diff --git a/lars/ddt.218 b/lars/ddt.218 new file mode 100644 index 00000000..d1b61f97 --- /dev/null +++ b/lars/ddt.218 @@ -0,0 +1,5244 @@ + +TITLE DDT + +.login=.demon + +NLEVS==7 ;LENGTH OF RING BUFFER OF . +NINFP==8 ;MAX NUM INF PROCEDURES +NBP==10 ;NUMBER OF BREAK POINTS +LPDL==140 ;MAX LENGTH PUSH DOWN LIST +BUFL==200 ;LENGTH OF I-O BUFFERS + +F=0 ;FLAGS +P=1 ;PUSH DOWN +A=2 ;POINTERS TO TABLES, CORE, ETC. +B=3 +C=4 ;CONTAINS DISPATCH ADDRESS IN WORD ASSEMBLER +D=5 ;TRANSFER DATA +W1=6 +W2=7 +U=10 ;DDT'S USER NUMBER FOR CURRENT INF PROCEDURE +W3=11 +I1=12 +I2=13 +I3=14 +I4=15 +W4=16 + +;LEFT HALF FLAGS + +TIF==100000 ;TRUNCATE TO 18 BITS - SET BY SPACE OR COMMA +PTF==100 ; +, -, OR * HAS BEEN TYPED +COMF==200000 ;COMMA FLAG +CTF==400 +SF==4 ;SYLLABLE FLAG +QF==1 ;QUANTITY TYPED IN TO WORD ASSEMBLER + +CF==40 ;$ TYPED +CCF==400000 ;$$ TYPED +MF==2 ;MINUS SIGN TYPED IN +LTF==20 ;LETTER TYPED IN TO CURRENT SYLLABLE +ROF==10 ;REGISTER OPEN FLAG +STF==4000 ;! MODE +FAF==1000 ; < TYPED +SAF==2000 ; > TYPED + +FPF==20000 ; . TYPED IN +FEF==10000 ; E FLAG + +MLF==200 ;*FLAG +DVF==40000 ;DIVIDE FLAG + +;TS SYMBOLS + +TYIC==1 +TYOC==2 +USRI==3 +USRO==4 +UTIC==5 +UTOC==6 +LPTC==7 +FDRC==10 +COMC==11 +ERRC==12 +CLIC==13 +CLAC==14 + +7TYPE=73000,, +CTYPE=74000,, ;TYPE EFF ADR AS CHAR +STRT=75000,, +OPNER=76000,, +TERR=77000,, + +MINUUO=73 + +DEFINE TSOPEN A,B + .OPEN A,B + OPNER A,B + TERMIN + +SYSGE==2 +SNFUSER==60 ;FOREIGN USER SYSTEM DEVICE CODE +CLIBL==40. ;LENGTH OF SEND BUFFER +VLRTSL==40 ;MAXIMUN LENGTH OF VALRET STRING (WORDS) + +BRKBIT==2000 ;BREAK BIT IN PIRQC +ILUADB==1000 ;ILL USER ADDRESS +BIOC==400 ;IO CHANNEL ERROR +VALBIT==200 ;VALRET " +SYSDDB==100 ;SYSTEM DEAD +SYSDBB==2,, ;SYSTEM BEING DEBUGGED +OIPBIT==400 ;ONE INSTRUCTION PROCEED PC BIT +OIPINT==4000 ; " " " INTERRUPT BIT +BCLI==400000 ;CLI BIT IN PIRQC +ILOPRB==40 ;ILLEGAL OPERATION + +.ZZ==. +LOC 41 + JSR UUOH + JSR TSINT +LOC .ZZ + +DEFINE INFORM A,B +IF1,[PRINTX \A = B +\]TERMIN + +;RIGHT HALF FLAGS +1RF==10 +OUTPUT==4 ;OPDECODER FLAGS + +CF1==400 ;OUTPUT 1 REGISTER AS CONSTANT +LF1==2000 ;OUTPUT 1 REGISTER AS FORCED SYMBOLIC OR CONSTANT +Q2F==1 ;NUMBER TYPED AFTER  +SBF==20 +NAF==200 ;NEGATIVE ADDRESSES PERMISSABLE +POWF==4000 ;ARGUMENT FOR EXPONENT COMING +SLL==10000 ;STOP LOOKING FOR LOCALS +OPERF1=20000 +OPERF2=40000 +BPLF==2 ;BPLOC REF AS ADDR +PF==400000 ;PATCH FLAG +PRINTF==2 ;PRINT FLAG +SIXF==40 ;SIXBIT FLAG + +GLOBAL==040000 ;GLOBAL SYMBOL +LOCAL==100000 +PNAME==740000 ;PROGRAM NAME +DELI==200000 ;DELETE INPUT +DELO==400000 ;DELETE OUTPUT + +;ERROR COMMENTS + +;TMJ=TOO MANY JOBS +;INT=RIGHT HALF INTERUPT +;NML=NOT MY LOSER (LEFT HALF INT.) +;CKS=CHECK SUM ERROR +;EOF=END OF FILE ENCOUNTERED +;CFT=CAN'T FLUSH TTY +;COR=CANT GET MORE CORE +;JOB=NO CURRENT JOB +;UNF=UNFLAPPABLE (UDISMOUNT FAILED) +;DSN=DISOWN LOST +;TMS=TOO MANY UNDEFINED SYMS +;ILUUO=ILLEGAL UUO EXECUTED IN DDT +;LOGIN=YOU ARE NOT LOGGED IN +;PUR=TRIED TO WRITE IN READ ONLY CORE + TOKTRM: 0 +MONMOD: 0 ;-1 IMPLIES MONITOR MODE + ;0 IMPLIES DDT MODE + +;NOTE CONTENTS OF THIS PAGE MUST BE LOCATED IN ADRESSES < 10000 OCTAL SO DDT +;REFERENCE HACK WORKS +MSK: -1 ;MASK FOR WORD+EFFECT SEARCHES + + +USRS: +UFUSR==.-USRS + (SIXBIT /USR/) +UUNAME==.-USRS + 0 +UJNAME==.-USRS + 0 +INTBIT==.-USRS ;USER INTERRUPT BIT + 0 +UINT==.-USRS ;PILEVEL INT STORAGE + 0 +UPIRQ==.-USRS ;PI RQS FOR THIS LOSER + 0 +PPC==.-USRS ;PROGRAM COUNTER + 0 +OPC==.-USRS ;OLD PC FOR BPT RESTORES + 0 +XECPC==.-USRS ;PC SAVE ON $X + 0 +UINTWD==.-USRS ;0=> RUNNING + ;-1=>STOP ON RANDOM INT + ;17,16 => XEC RETURN + ;N<9 => BPT + ;21 => LOADED, NOT YET STARTED + 0 +XINTWD==.-USRS ;SAVE UINTWD ON XEC + 0 +JTIME==.-USRS ;SEE FNJOB + 0 +FURN==.-USRS ;FOREIGN USER UNLESS ZERO + 0 +UIND==.-USRS ;SYSTEM INDEX + 0 +NBPTB==.-USRS ;-1 ON CONDITIONAL BPT BREAK 0 NORMAL + 0 +BPCPC==.-USRS ;PC SAVE ON CONDITIONAL BPT + 0 +CBPPS==.-USRS ;RH UINT (SAVE BPT #) LH EFFECTIVE ADDRESS OF INSTRUCTION FOR PROCEED + 0 +INCNT==.-USRS ;COUNT FOR LIMITED PROCEED + 0 +BPLOC==.-USRS + 0 +B1ADR==.-USRS ;ADDRESS OF BPT(RH) LOC TO PRINT OUT (LH) + 0 +BPCON==.-USRS ;CONDITIONAL BPT INSTRUCTION + 0 +B1CNT==.-USRS ;PROCEED COUNT + 0 +B1INS==.-USRS ;INSTRUCTION REPLACED BY .BREAK + 0 +BPL==B1INS-B1ADR+1 + BLOCK *BPL +BPEND==.-USRS +STARTA==.-USRS ;STARTING ADDRESS + 0 +PERMIT==.-USRS ;-1 => EXECUTE VALRET STRINGS + 0 +PATCHL==.-USRS ;PATCH LOCN FOR PATCH FEATURE + 0 +VALCOM==.-USRS + 0 +JOBSYM==.-USRS ;LEAVE JOBSYM LAST + 0 +USRLNG==.-USRS + REPEAT NINFP-1,[ + (SIXBIT /USR/) + BLOCK USRLNG-1] + +USREND: + +L=USRLNG ;LIKE ITS + +INFORM [STORAGE PER LOSER]\USRLNG + + + +IFILE: (SIXBIT /DSK/) +.FILE: +FILN1: SIXBIT /@/ +FILN2: SIXBIT /BIN/ +PCROCK: 0 ;FLAG TO DELETE PFILE ALSO CAUSES .FDELE TO WIN + 0 ;SNAME STORED HERE + +;THESE GO INTO 50-53 +SFILN1: 0 ;FIRST NAME +NEWFIL: 0 ;CURRENT VERSION +SFILN2: 0 ;AOSE OF NAEM (TECO WRITES THIS FOR NEW VERSION) +OLDFIL: 0 ;PREVIOUS NEWFIL (USED FOR DELETE) + + +CLGAGN: 5 ;MASK FOR ALLOWING RECEIPT OF :SENDS + ;1.1 OTHER USERS' HACTRNS + ;1.2 " " INFERIORS + ;1.3 YOUR HACTRN + ;1.4 " INFERIORS + +BUGI: (SIXBIT /COM/) + . + SIXBIT /MAIL/ +BUGO: 1,,(SIXBIT /COM/) + . + SIXBIT /MAIL/ + +WFILE: 1,,(SIXBIT /LPT/) ;INIT TO LPT + SIXBIT /WALL/ + SIXBIT /PAPER/ + 0 + 0 ;SNAME GOES HERE + +UUOH: 0 + PUSH P,A + PUSH P,D + LDB D,[331100,,40] + CAIGE D,MINUUO + MOVEI D,100 + SKIPL UUOTAB-MINUUO(D) + JRST @UUOTAB-MINUUO(D) +UUOH2: MOVEI P,PS + PUSHJ P,ERTTY ;SAVE TTYFLG IF NOT ALREADY SAVED + JRST @UUOTAB-MINUUO(D) + +UERFLN: SIXBIT / ERR/ + 2 +UERFLC: . + +PNTR: INST +CHP: 0 +TXT: BLOCK 2 + +SAVPDL: 0 +BTAB: FOO=44 +REPEAT 4,[(FOO_12.+1100)TBL + FOO=FOO-11 +] + +ININST: 0 +LIMBO: 0 ;LAST CHAR READ +UNRCHF: 0 ;-1 => RE READ LAST CHAR +UNECHF: 0 ;-1 WHEN UNRCHF .EQ. -1 => ECHO CHARACTER ON RE-READ +PS: BLOCK LPDL + +MSNAM: 0 ;SYSTEM NAME FOR NEW JOBS +SILNT: 0 ;SUPPRESS TYPEOUT IF -1 +PDUMPB: SETZ ;USED FOR PURE DUMP + SIXBIT /PDUMP/ + [USRI] + [UTOC] + 400000,,[-4,,NCVARB] + + +NCVARB: BLOCK 4 + +CU: 0 ;CURRENT PROCEDURE INDEX + +NJ1: @ ;COUNT USED FOR DETERMINING MOST RECENT JOB (SEE FNJOB) +NJ2: @ ;COUNT USED FOR DETERMINING LEAST RECENT JOB (") + +SIXP: .-.,,SFILN2 ;EXTRA WORD FOR CARRYS OFF TOP + REPEAT 7,<.RPCNT*6>_14+600,,SFILN2 +HSRAD: '9 ;DIGIT TO CARRY ON, (RADIX-1) +SFILE: 6,,(SIXBIT /SYS/) + SIXBIT /TS/ +SYSN2: SIXBIT /@/ + +VILDBP: 0 +UVCOM: BLOCK VLRTSL+1 ;VALRET STRING BUFFER + +CTEM1: 0 +CTEM: 0 + 0 ;MUST BE HERE + +CTTABF: REPEAT 2,[(SIXBIT /*/) + REPEAT 2,SIXBIT /*/ +] + +PFLUSH: 0 ;-1 => QUIT READING FILE +MORPOS: 24. ;LINE ON SCREEN TO TYPE --MORE-- + +LFILN: SIXBIT /0 DSK/ + BLOCK 5 + +LSNAM: 0 ;LAST SNAME IN CASE RESTORE DESIRED +SRFLAG: 0 ;FLAG TO DO ABOVE AT UOPNER IF .OPEN LOSES + +GETTY: 0 + +IOCF: 0 + 0 + 0 + . + SIXBIT /FOOBAZ/ + 0 + + +I40: 0 +IPC: 0 +TSUSRF: (SIXBIT /USR/) +TUNAME: 0 +TJNAME: 0 + +THFLAG: 0 ;-1 IF NOT BEEN THROUGH ALL USERS + +UBUF: +USRBF: BLOCK BUFL + 0 ;HA HA + +TEMT: 0 + +LLUP1: 0 ;END TEST FOR MATCH SEARCHES + ;INSERT IMPURE CODE HERE +MARCON: 0 ;3.3 3.1 => STOP ON +,-,WRITE ONLY +BADR: 0 + +CPTCHL: 0 +CPTCHM: 0 + +MAXUSET: 0 ;MAX USET ALLOWED, SET AT INITIALIZATION + +ISYMP: IISYM-INISYE,,IISYM ;-N,,IISYM, CHANGED AT ISLUP +ISYME: INISYE ;CHANGED AT ISLUP + +INTUSR: 0 ;USER WAITING FOR INTERRUPT +WRD: 0 ;CURRENT VAL OF WORD ASSEM +WRD2: 0 ;ARG FOLLOWING ALT-MODE +WRDO2: 0 ;LIKE WRD2 BUT UPDATED IN OCTAL +PRNC: 0 +FRASE: 0 ;VALUE OF FIELD FOR PRECEDENCE OF * OR ' +SYL: 0 ;CURRENT NUMERIC SYL +DEN: 0 +ZLWT: 0 +TEM2: 0 +LPTRST: 0 +LPTFLG: 0 +TTYFLG: -1 +STYFLG: 0 ;SAVED TTYFLG DURING ERR PRINT, ETC +STYSW: -1 ;.GE. 0 => TTYFLG SAVED +ESTUT: 0 ;TEM USED TO CHECK FOR UNDEF IN CURRENT WRD +FSV: 0 +FRACT: 0 +FPWR: 0 +FTERM: 0 +FH: 0 +FL: 0 +SYM: 0 ;ARGUMENT TO EVAL +DEFV: 0 ;VALUE OF "FIRST" ARG (<) +ULIMIT: 0 ;VAL OF "SECOND ARG (1<2>) +LLOC: 0 +LLOCO: 0 ;LAST LOCATION OPENED AS POINT +PLCR: 0 +LOCBF: BLOCK NLEVS + +34SAV: 0 ;$X + .BREAK 16, + .BREAK 17, + +INST: 0 +LWT: 0 +TEM: 0 +TEM1: 0 +DSSAV: SYM +SPTS: JRST TOUT +SATPP: .+1 +SATPT: 0 + +AUTOPI: 0 + +;CURRENT MODE +SCH: 0 ;HLTW,TFLOT,SATP,ITEXO,PIN,FTOC +AR: 0 +ODF: 0 + +SCHM: PIN ;PERMANENT MODE +ARM: PADSO +ODFM: 10 + +SCHMM: TFLOT ;MODE TO RETYP IN +ARMM: PADSO +ODFMM: 10 + +SARS: 0 ;0 => DDT SLEEPING -1 => DDT RUNNING +DDTTY: -1 ;-1 =>TTY IN DDT +DDINT: 0 ;-1 FLAG FOR INTERRUPT HAPPENED BETWEEN TTYRET AND RESTR2 +TTYUSR: 0 ;USER INDEX GAVE TTY TO LAST +TEM3: +FRASE1: 0 ;SYL TO LEFT OF * OR ' +SYSSW: 0 +SYSDPS: 0 +SUSMNG: 0 +DDTSW: 0 +XCRFSW: 0 ;-1 => DON'T TYPE CRLF WHEN PROCEDING + +HIGH: 0 + +UNAME: 0 +JNAME: 0 +TTABF: BLOCK 6 ;MUST FOLLOW UNAME&JNAME FOR TRANAD + +MAILF: SIXBIT / COM/ +RUNAME: -1 ;REAL USER NAME + SIXBIT /MAIL/ +RUNM1: -1 + SIXBIT /OMAIL/ + +OMAILF: SIXBIT / COM/ +RUNM2: -1 + SIXBIT /OMAIL/ + 0 + + +FFILE: 0 + SIXBIT /.FILE./ + SIXBIT /(DIR)/ + +AC0: BLOCK 20 +PRGM: 0 + +BOYD: .-ESTU,,. +LUDST==100 +UDST: BLOCK LUDST +UDSTE: +ESTU: UDSTE + +SATPC: 0 +DGO: 0 +UCHNLO: 0 ;0 => NO USER OPEN + ;+ => FOREIGN USER + ;-1 => INFERIOR + +FETCH4: D + +$X=34 +SYMTOP: INISYE ;PTR TO FIRST FREE REG. AFTER SYMTAB'S + + +PFILE: SIXBIT / COM/ +PFILE1: -1 + SIXBIT /MAIL/ + 0 ;WIN ON DELETE + 0 ;LEAVE ROOM FOR SNAME + +PAT: +PATCH: BLOCK 100 + +IOCX: .STATUS I4 ;AC FIELD WRITTEN AT IOCBRK + +STRB: 440700,,TEM +NM1A: MOVEI W2,0 ;USED TO FORM FLOATING NUMBS. + +CLIFNB: 3,,(SIXBIT /CLI/) ;USED FOR :SEND CORE LINK +CLIFN1: . + SIXBIT /HACTRN/ + +CLUFNB: (SIXBIT /USR/) +CLUFN1: . + SIXBIT /HACTRN/ + +CLIBUF: BLOCK CLIBL + +ERROPN: (SIXBIT /ERR/) + 3 + 0 ;STATUS WORD +HOLPPX: POP P,.(D) ;USED BY HOLE +TEXCT2: LSHC D,7 +COMWDX: HRLI D,. ;USED IN COMMA EVAL + +CLABRP: 100,,CLGAGN ;CORE LINK THINGS +CLABUF: BLOCK CLIBL+2 + 0 + CLABL==.-CLABUF +CLAFNB: 2,,(SIXBIT /CLA/) + +.ZZ0==. + +MINPUR==<.+1777>/2000 + +LOC 2000*MINPUR +DDT: .CLOSE 3, ;CHANNEL USED BY RANDOM LOADER +; MOVEI U,0 ;INDICATE NO CURRENT JOB + SETZM UCHNLO ;INDICATE NO USER CHANNEL OPEN + MOVE A,[202,,727766] + HRROI B,1_+1_ + .SETM2 A, ;SET INTERRUPT MASKS + MOVNI D,1 + .UPISET D, ;ENABLE INTERRUPTS + MOVEI P,PS ;SET UP PDL POINTER + PUSHJ P,%RESET + .SUSET [.RUNAME,,D] ;GET UNAME AND SALT AWAY + MOVEM D,UNAME + MOVEM D,RUNAME + MOVEM D,MSNAM ;INITIALIZE MASTER SYSTEM NAME + .SUSET [.RJNAME,,JNAME] ;GET JNAME + PUSHJ P,FORMF ;CLEAR SCREEN IF GE CONSOLE + + ;NOW TO GET INITIAL SYMS FROM SYSTEM + + HRROI A,INISYE ;START LOADING SYMS AT INISYE + MOVE B,[SIXBIT /CALLS/] ;FIRST THE REGULAR SYMS + PUSHJ P,GTSYS ;INPUT THEM (UPDATES A) + HRROS W1,A ;LOCATION OF BEGINNING OF USYMS + MOVE B,[SIXBIT /USYMS/] ;.UPC,.VAL, .TTY, ETC. + PUSHJ P,GTSYS ;GET THE SYMS (AGAIN UPDATES A) + HRRZM A,SYMTOP ;MARK END OF INITIAL SYMBOL AREA + HRRZM A,ISYME ;" " " + MOVSI A,-INISYE(A) ;GET SWAPPED TOTAL NUMBER OF SYMS INPUT + MOVNS A ;NEGATE A + ADDM A,ISYMP ;UPDATE POINTER TO INITIAL SYMS + LDB A,[14300,,D] ;GET NUMBER OF USYMS + MOVEI B,-<3+1>(A) ;DE-COMPENSATE FOR .IOC, .IOS, .IOP; GET VALUE OF LAST REGULAR ONE + MOVEM B,MAXUSET ;SAVE AS MAXIMUM USET + MOVSI A,1(A) + XOR A,W1 ;LH(W1)=-1 + MOVEI W1,760000 ;MAGIC RELOCATION FOR .USET SYMS + ADDM W1,1(A) ;RELOCATE A SYMBOL (ACTUALLY ITS VALUE) + AOBJN A,[AOJA A,.-1] ;DO IT FOR THE USYMS + STRT [SIXBIT /DDT./] + STRT [.FNAM2+(SIXBIT /./)] ;TYPE OUT DDT VERSION NUMBER + .DIETIM D, ;GET TIME TILL SYS DOWN + JUMPL D,DD1C ;NEGATIVE=>FOREVER + 7TYPE [ASCIZ /SYS DOWN IN /] + IDIVI D,30. + PUSHJ P,TMPT ;TYPE TIME TILL SYS DOWN +DD1C: PUSHJ P,CRF + .OPEN FDRC,[SIXBIT / SYSSYSTEMMAIL/] ;SEE IF THERE IS ANY SYSTEM MAIL + JRST DD1B ;NO + JRST CTLF1 ;YES, TYPE IT OUT + + ;ROUTINE CALLED TWICE DURING READING IN OF INITIAL SYMS FROM SYSTEM + +GTSYS: .GETSYS A, ;SHOULDN'T SKIP (LH(A)=-1) + HLRE D,A ;GET - + MOVNS C,D ;NUMBER OF WORDS (STILL IN D WHEN GTSYS RETURNS) + ADDI C,(A) ;GET 1+ + LSH C,-10. ;CONVERT TO NUMBER OF BLOCKS + .CORE 1(C) ;GET CORE + JRST .-1 ;WHAT ELSE TO DO? (THIS PART OF INITIALIZATION) + .GETSYS A, ;THIS TIME FOR REAL + TERR (SIXBIT /BRF/) + POPJ P, + +;DDT DISPATCH IS ORDERED BY REQUIREMENTS OF EVALUATION,CALL INS,ETC. +; EVAL? TYPE OF CALL +;?=>? NO EVAL JRST +;MULT=>SPACE-1 EVAL WITHIN FIELD " +;SPACE=>RPRN EVAL WORD " +;RPRN+1=>CARR " PUSHJ +;CARR+1=> " " +; DISPATCHES ABOVE "CARR" DO NOT ALLOW UNDEFINED +; SYMBOLS IN WORD + +DD1A: +DD1: PUSHJ P,CRF +DD1B: TLZ F,ROF + MOVE D,[SCHM,,SCH] + BLT D,ODF +DD2: MOVEI P,PS + SETZM PRNC ;PARENTHESES COUNT +LIS: MOVE D,ESTU + MOVEM D,ESTUT +LISA: TDZ F,[(,-1-ROF-STF)LF1+CF1+SBF+2] ;LEAVE REGISTER OPENED,TYPEOUT SUPPRESSED +LISB: TDZ F,[(,-1-ROF-STF-FAF-SAF)NAF] + SETZM,WRD +LIS1: SETZM,FRASE +LIS2: MOVEI D,1 + MOVEM D,FRASE1 + TLZ F,MLF+DVF +L1: TLZ F,CF+CCF+SF+FPF ;TURN OFF CONTROL, SYL, PERIOD FLAG + SETZM,SYL +L1RPR: SETZM,SYM + MOVSI D,(50*50*50*50*50*50) + MOVEM D,TEM ;INIT SYMBOL COUNTER + SETZM,DEN +L2QAN: SETZM,WRD2 + SETZM WRDO2 ;ALSO CLEAR WORD UPDATED IN OCTAL + TRZ F,Q2F ;CLEAR "NUMBER TYPED AFTER ALTMODE" FLAG +L2: SKIPGE MONMOD + JRST NCOM + PUSHJ P,IN ;PICK UP CHARACTER + TLNE F,CF ;CONTROL FLAG + JRST,L21 + CAIG D,"Z ;Z + CAIGE D,"A ;A +L21: SKIPA A,D + JRST,LET + ROT A,-1 + HLRZ C,DISP(A) + SKIPGE A + HRRZ C,DISP(A) + MOVEI A,0 ;FOR HACKS THAT DO "ADDI FOO-BAR" AND FALL THRU + CAIGE C,MULT + JRST (C) + CAIN C,MULT ;LET * WORK LIKE : IN SOME CASES + TLNE F,SF+QF + JRST L211 +NCOM: SKIPGE MONMOD + CTYPE ": + PUSHJ P,RTOKEN ;CLEARS A, REACHED FROM TAG + JUMPE B,DD1 ;NULL COMMAND +NCLOOP: CAMN B,NCTAB(A) + JRST NCL2 + CAIGE A,NLCOM-1 + AOJA A,NCLOOP + MOVEM B,SYSN2 + TDO F,[LTF,,SIXF] + JRST ACTRLH ;TRY ^H'ING IT + +NCL2: HRRZ A,NCTB2(A) + JRST (A) + +;READ TOKEN (6BIT) +RTOKEN: CLEARB A,B + MOVE C,[440600,,B] +RTOK2: PUSHJ P,IN +RTOK4: CAIN D,": ;DON'T SCREW LOSER TYPING ":" IN MON MODE + JRST RTOK2 + CAIN D,33 + JRST RTCOM ;COMMENT + CAIN D,^Q + JRST RTOK1 + CAILE D,"_ + JRST ERR + SUBI D,40 + JUMPG D,RTOK3 + SETZM TOKTRM + JUMPE D,CPOPJ + SETOM TOKTRM + POPJ P, + +RTOK1: PUSHJ P,IIN + SUBI D,40 +RTOK3: TLNE C,770000 + IDPB D,C + JRST RTOK2 + +RTCOM: PUSHJ P,IIN + CAIE D,33 + JRST RTCOM + JRST RTOK4 + +RONUM: TLZ F,QF + MOVEI B,0 +RONUM2: PUSHJ P,IIN + SUBI D,60 + JUMPL D,RONUM4 + CAILE D,11 + JRST RONUM4 + ASH B,B + ADD B,D + TLO F,QF + JRST RONUM2 +RONUM4: TLNE F,QF + AOS (P) + POPJ P, + +NCTAB: SIXBIT /?/ + SIXBIT /DISOWN/ + SIXBIT /LOGOUT/ + SIXBIT /SL/ + SIXBIT /SYMLOD/ + SIXBIT /V/ ;SAME AS  BUT COMMAND NOT INTERPRETED AT IO LEVEL + SIXBIT /VP/ ;TURN ON TYPEOUT AND PROCEEDS JOB + SIXBIT /XFILE/ + SIXBIT /CR/ + SIXBIT /ED/ + SIXBIT /ST/ ;SPECIFY CURRENT FN1 FN2 TO DDT + SIXBIT /LOAD/ + SIXBIT /DUMP/ + SIXBIT /PDUMP/ + SIXBIT /KILL/ + SIXBIT /LOGIN/ + SIXBIT /SEND/ + SIXBIT /GAG/ + SIXBIT /BUG/ + SIXBIT /MAIL/ + SIXBIT /JOB/ + SIXBIT /LISTJ/ + SIXBIT /FLAP/ + SIXBIT /LISTF/ + SIXBIT /DELETE/ + SIXBIT /PRINT/ + SIXBIT /LINK/ + SIXBIT /ERR/ + SIXBIT /DDT/ + SIXBIT /MON/ + SIXBIT /START/ + SIXBIT /CONTIN/ + SIXBIT /PROCED/ + SIXBIT /VK/ ;TURNS ON TYPEOUT AND GOES KERCHINK + SIXBIT /WALLP/ + SIXBIT /SLIST/ +NLCOM==.-NCTAB + +NCTB2: [ASCIZ /LIST MOST COMMANDS/],,QSN + [ASCIZ /DISOWN CURRENT JOB/],,DISOWN + [ASCIZ /AUTO-EXPUNGE/],,LOGOUT + CSMI + [ASCIZ /LOAD SYMBOLS ONLY/],,CSMI + VHACK + VPHACK ;DOES ^V$P WITHOUT PRINTING + [ASCIZ /EXECUTE FILE AS DDT COMMANDS/],,XFILE + [ASCIZ /ENTER TECO AND CREATE FILE/],,CRFIL + [ASCIZ /ENTER TECO AND EDIT/],,EDFIL + STFIL + [ASCIZ /LOAD FROM FOLLOWING FILE INTO CURRENT JOB/],,LOAD + [ASCIZ /DUMP INTO " " FROM " "/],,DUMP + [ASCIZ /PURE DUMP/],,PDUMP + [ASCIZ /KILL CURRENT JOB/],,JKILL + [ASCIZ /LOGIN AS FOLLOWING NAME/],,NLOGIN + [ASCIZ /SEND MESSAGE/],,CLSEND + [ASCIZ /CONTROL RECEIPT OF MESSAGES/],,CLGAG + [ASCIZ /DOCUMENT BUG/],,BUG + [ASCIZ /ADD TO USER'S MAIL FILE/],,MAIL + [ASCIZ /CREATE OR SELECT JOB/],,JJOB + [ASCIZ /LIST JOBS/],,ULIST + [ASCIZ /FLAP DECTAPE, FOLLOW BY DRIVE #/],,FFLAP + [ASCIZ /LIST FILES/],,LLISTF + [ASCIZ /DELETE FILE/],,CTLO + [ASCIZ /PRINT FILE/],,PRINT + [ASCIZ /CREATE LINK/],,LINK + [ASCIZ /IOC ERROR STATUS/],,ERRSTS + [ASCIZ /ENTER DDT MODE/],,EDDTM + [ASCIZ /ENTER MONITOR MODE/],,EMONM + [ASCIZ /START INFERIOR/],,AAGO + [ASCIZ /CONTINUE GIVING INF. TTY/],,PROCED + [ASCIZ /PROCEDE INF., LEAVE TTY WITH DDT/],,CTLP + VKHACK + [ASCIZ / TO SPECIFIED FILE/],,WALLP + [ASCIZ /LIST SYMBOLS OF USER JOB/],,SLIST +IFN .-NCTB2-NLCOM,[PRINTC /NCTB2 LOSES +/] + +EDDTM: SETZM MONMOD + JRST ALTL2 + +EMONM: SETOM MONMOD + JRST DD1 + +VHACK: SETOM TTYFLG + JRST DD1B + +VPHACK: SETOM TTYFLG + SKIPE ININST ;IF GETTING INPUT FROM FILE OR VALRET, + SETOM XCRFSW ;THEN TELL PROCEDER NOT TO TYPE CRLF + JRST PROCED + +VKHACK: SETOM TTYFLG ; :VK + JRST ALTL2 + +QSN: PUSHJ P,FORMF + PUSHJ P,MORFIN + MOVEI A,0 +QSN0: HLRZ B,NCTB2(A) + JUMPE B,QSNLP + PUSHJ P,MORFLS + JRST ALTL2 + MOVE C,[440600,,NCTAB(A)] +QSN1: ILDB D,C + JUMPE D,QSN2 + ADDI D,40 + PUSHJ P,TOUT + TLNE C,770000 + JRST QSN1 +QSN2: 7TYPE [ASCIZ / = /] + 7TYPE (B) + PUSHJ P,CRF +QSNLP: CAIGE A,NLCOM-1 + AOJA A,QSN0 + JRST ALTL2 + +NLOGIN: PUSHJ P,RTOKEN + MOVEM B,UNAME + JRST NLOGI2 + +JJOB: SKIPE TOKTRM + JRST ALTJ9 + PUSHJ P,RTOKEN + MOVE D,B + MOVEM D,JNAME + JRST ALTJJ + +FFLAP: PUSHJ P,RONUM + JRST ERR + MOVE D,B + JRST FFLAP2 + +LLISTF: SKIPE TOKTRM + JRST LLIST2 + PUSHJ P,RTOKEN + MOVS D,B + JRST CTLF0 + +LLIST2: MOVE D,IFILE + JRST CTLF0 + +JKILL: JUMPE U,JERR + JRST JKILL2 + +CLSEND: PUSHJ P,RTOKEN + MOVEM B,CLIFN1 + MOVEM B,CLUFN1 + .OPEN CLIC,CLUFNB + JRST CLSND6 ;NOT LOGGED IN,TRY MAIL + MOVE C,[440700,,CLIBUF] + PUSHJ P,BUGTIM ;RECORD TIME OF MESSAGE +CLSND0: PUSHJ P,BUGRD ;GOBBLE TEXT + SKIPA D,[CLSND0] + MOVEI D,ALTL2 + TSOPEN CLIC,CLIFNB + MOVE A,[-CLIBL,,CLIBUF] + .IOT CLIC,A + .CLOSE CLIC, + MOVE C,[10700,,CLIBUF-1] ;RESET PTR FOR NEXT BUFFERLOAD + JRST (D) + +BUGRD: +CLSND1: PUSHJ P,IN + CAIN D,177 + JRST CLSRUB + CAIE D,14 + CAIN D,^C + JRST CLSND2 +CLSND5: IDPB D,C + CAMN C,[10700,,CLIBUF+CLIBL-1] ;LEAVE SPACE FOR ^C + JRST CLSND + CAIE D,15 + JRST CLSND1 + PUSHJ P,CRF + MOVEI D,12 + JRST CLSND5 + +CLSND2: AOS (P) +CLSND: PUSHJ P,CRF + MOVEI D,^C +.CLSN1: IDPB D,C + TLNE C,760000 + JRST .CLSN1 + POPJ P, + +CLSRUB: CAMN C,[10700,,CLIBUF-1] ;BEGINNING OF BUFFER + JRST ERR + LDB D,C + PUSHJ P,TOUT ;ECHO CHARACTER FLUSHED + ADD C,[70000,,] + TLNE C,400000 ;DECREMENT BYTE PNTR + SUB C,[430000,,1] + JRST CLSND1 + +CLGAG: PUSHJ P,RONUM + JRST ERR + MOVEM B,CLGAGN + JRST ALTL2 + +CLSND6: 7TYPE [ASCIZ /(MAIL)/] ;TRY OTHER + JRST MAIL1 + +BUG: SKIPA B,[SIXBIT /SYS/] +MAIL: PUSHJ P,RTOKEN +MAIL1: MOVEM B,BUGI+1 + MOVEM B,BUGO+1 + MOVE C,[10700,,CLIBUF-1] ;MUST BE 10700,, FOR RUBOUT END CHECK + MOVEI A,15 + IDPB A,C + MOVEI A,12 + IDPB A,C + MOVE A,RUNAME + JSP W1,6TO7 + IDPB B,C + PUSHJ P,BUGSPC + PUSHJ P,BUGDAT + PUSHJ P,BUGTIM + MOVNI B,1 +BUG3: PUSHJ P,BUGRD + TDZA A,A + MOVEI A,1 ;SUCCESSFUL END + JUMPE B,BUG4A ;ALREADY OPENED FILE + MOVEI B,0 + TSOPEN UTOC,BUGO +BUG4A: MOVE C,[10700,,CLIBUF-1] +BUG4: ILDB D,C + CAIN D,^C + JRST BUG5 + .IOT UTOC,D + JRST BUG4 + +BUG5: MOVE C,[10700,,CLIBUF-1] ;NEW BUFFER + JUMPE A,BUG3 ;READ MORE CRUFT + .OPEN UTIC,BUGI ;APPEND ORIGINAL FILE + JRST BUG7 +BUG6: .IOT UTIC,D + .IOT UTOC,D + JUMPGE D,BUG6 +BUG8: PUSHJ P,CLSU ;CLOSE OUT FILES + JRST ALTL2 + +BUG7: .IOT UTOC,[^C] + JRST BUG8 + +BUGDAT: .RDATE B, + ROT B,12. ;SHIFT TO MONTH,DAY,YEAR + MOVEI W1,"/ + JRST BUGTL2 + +BUGTIM: .RTIME B, + MOVEI W1,": +BUGTL2: MOVEI D,0 +BUGTL1: MOVEI A,0 + ROTC A,6 + ADDI A,40 + IDPB A,C + JUMPE B,BUGSPC + MOVE A,W1 + TRNE D,1 + IDPB A,C + AOJA D,BUGTL1 + +BUGSPC: MOVEI A,40 + IDPB A,C + POPJ P, + +6TO7: MOVEI B,0 + ROTC A,6 + ADDI B,40 + XCT (W1) + JUMPN A,6TO7 + JRST 1(W1) + +ERRSTS: MOVE D,WRD + TLNN F,QF + MOVE D,LWT + MOVEM D,ERROPN+2 + .OPEN FDRC,ERROPN + JRST ERR +ERRST1: .IOT FDRC,D + CAIE D,14 + CAIN D,^C + JRST RET + PUSHJ P,TOUT + JRST ERRST1 + + + ; :WALLP + ;TURNS ON "LINE PRINTER" OUTPUT TO SPECIFIED FILE + +WALLP: MOVE A,RUNAME ;GET REAL USER NAME, + AOJE A,LOGQ ;IF NOT LOGGED IN THEN COMPLAIN + MOVEI C,WFILE ;GET PNTR TO FILE NAMES + PUSHJ P,RRFL1 ;GET FILE DESCRIPTION + MOVEI A,1 ;MODE FOR .OPEN + HRLM A,WFILE + SETZM LPTFLG ;.OPEN MAY LOSE + SETOM SRFLAG ;SET TO RESTORE SNAME IF .OPEN LOSES + TSOPEN LPTC,IFILE + SETOM LPTFLG ;NOT OUTPUTTING + SETZM SRFLAG ;.OPEN WON CLEAR FLAG + .SUSET [.SSNAM,,LSNAM] ;RESTORE SNAME + JRST ALTL4 ;MAYBE TYPE * + +SLIST: PUSHJ P,CRF ;TYPE OUT USERS SYMBOL TABLE + MOVE W2,JOBSYM(U) + JUMPGE W2,DD1 ;DONE? + HRRZ W1,W2 + PUSHJ P,SPT ;SQUOZE SYMBOL PRINT + PUSHJ P,LCT + TRNN W2,16 + PUSHJ P,CRF + ADD W2,[2,,2] + JRST SLIST+2 + + +L211: MOVE D,SYL + TLZN F,LTF + JRST POWER +L4A: PUSHJ P,EVAL + JRST,UND1 +L4: TLZE F,MF + MOVN D,D + TLNN F,SF + CAIE C,LPRN + JRST,.+2 + JRST,LPRN + + EXCH D,FRASE1 + TLNN F,DVF + IMULB D,FRASE1 + TLZE F,DVF + IDIVB D,FRASE1 + CAIGE C,ASSEM + JRST (C) ;MULTIPLY OR DIVIDE + ADDB D,FRASE + CAIGE C,SPACE + JRST (C) ; + - @ , + + ADD D,WRD + TLNE F,TIF ;TRUNCATE INDICATOR FLAG + HLL D,WRD ;TRUNCATE + MOVEM D,WRD + TLNN F,QF + MOVE D,LWT + SETZM,A + JUMPE U,L5 + MOVE W1,ESTUT ;CHECK TO SEE IF WRD CONTAINS UNDEF SYM + CAMN W1,ESTU + JRST L5 + CAILE C,CARR + JRST ERR +L5: CAIG C,RPRN + JRST (C) + PUSH P,KILRET + SKIPN PRNC + JRST (C) + JRST ERR + +UNDEF: TERR (SIXBIT /U/) +ERR: TERR + +UUOTAB: U7TYP + UCTYPE + USTRT + SETZ UOPNER + SETZ UTERR + SETZ UUOH3 ;ILUUO + SETZ .UUOH2 + +UUOH3: PUSHJ P,COMPLN + MOVE D,40 + HRRZ D,UUOH + JRST CPOPJ1 + SKIPA A,[SIXBIT /ILUUO/] +UTERR: MOVSI A,@40 + JRST ERR1 + +.UUOH2: MOVSS D + MOVE A,(D) +ERR1: MOVE W1,[440600,,A] +ERR2: ILDB D,W1 + JUMPE D,ERR3 + ADDI D,40 + PUSHJ P,TOUT + JRST ERR2 + +ERR3: MOVEI D,"? + MOVEI A,(SIXBIT /U/) + CAIE A,@40 + PUSHJ P,TOUT +ERR5: SETZM ININST ;QUIT VALRET OR XFILE +ERR4: MOVE B,STYFLG + MOVEM B,TTYFLG + SETOB B,STYSW ;INDICATE THAT TTYFLG HAS BEEN UNSAVED + .UPISET B, + +RET: MOVEI P,PS + PUSHJ P,LCT ;COMMON RETURN FOR TAB;,JRST,LIS + JRST DD2 + +LOGQ: MOVE D,[[SIXBIT /LOGIN/],,101] + JRST UUOH2 + +UOPNER: LDB D,[270400,,40] + CAIN D,TYOC + JRST GASP + MOVEM D,UERFLC + .OPEN ERRC,UERFLN + JRST .-1 +UOPNR2: .IOT ERRC,D + CAIE D,14 + CAIN D,3 + JRST UOPNR4 + PUSHJ P,TOUT + JRST UOPNR2 + +UOPNR4: .CLOSE ERRC, + HRRZ D,40 + HRRZ D,(D) + AOSN SRFLAG ;IF ROUTINE WANTED SNAME RESTORED + .SUSET [.SSNAM,,LSNAM] ;DO IT TO IT + TERR (D) + +GASP: .LOGOUT ;FLAME OUT + .VALUE 0 + JRST .-2 + +U7TYP: PUSH P,B + LDB B,[270400,,40] + MOVE A,40 + HRLI A,440700 +U7TY1: ILDB D,A + JUMPE D,7TYXIT + CAIN D,^C + JRST 7TYXIT + PUSHJ P,TOUT(B) + JRST U7TY1 + +7TYXIT: POP P,B + JRST UUOXIT + +USTRT: MOVE A,40 + HRLI A,440600 +UUOH11: ILDB D,A + ADDI D,40 + PUSHJ P,TOUT + CAIE D,". + JRST UUOH11 +UUOXIT: POP P,D + POP P,A + JRST 2,@UUOH + +UCTYPE: HRRZ D,40 + PUSHJ P,TOUT + JRST UUOXIT + +QIJERR: SKIPL UCHNLO ;ERR UNLESS INFERIOR OPEN + JRST JERR +QJERR: SKIPE UCHNLO ;ERR IF NO JOB OR SYS OPEN + POPJ P, +JERR: MOVE D,RUNAME + AOJE D,LOGQ ;COMPLAIN ABOUT NOT BEING LOGGED IN BEFORE ABOUT JOB + TERR (SIXBIT /JOB/) + +UND1: JUMPE U,OPLOOK + MOVE A,ESTUT ;UNDEFINED SYM ASSEMBLER + PUSHJ P,EVAL2 + CAIN C,ASSEM + TLNN F,ROF + JRST OPLOOK + LDB D,[(100)PRNC + JUMPN D,UNDEF + CAIE C,ASSEM + CTYPE "# + MOVN A,[(2)2] + ADDB A,ESTUT + CAMG A,BOYD + TERR (SIXBIT /TMS/) + MOVE D,SYM + TLO D,GLOBAL + MOVEM D,(A) + HRRZ D,LLOCO + TLNE F,MF + TLO D,400000 + MOVEM D,1(A) + SETZI D, + JRST L4 + +CTLA: TLZ F,QF+LTF + PUSHJ P,OPLK2 + JRST QUAN3 ;RET NO VALUE + TLZN F,CF ;HERE IF FOUND IN LOCAL SYM + JRST QUAN1 ;FOUND IN OPTABLE + JRST L2 + +QUESTN: JUMPE U,JERR + PUSHJ P,CRF ;LIST UNDEFINED SYMBOLS + MOVE A,ESTU +QUEST1: JUMPGE A,DD1 + MOVE D, (A) + SKIPA W1,ESTU + +QUEST2: ADD W1,[(2)2] + CAME D,(W1) + JRST QUEST2 + +QUEST3: CAME A,W1 + JRST QUEST4 + PUSHJ P,SPT + PUSHJ P,CRF +QUEST4: ADD A,[(2)2] + JRST QUEST1 + +OPLK3: JRST UNDEF + JRST L4 ;LOCAL SYM + JRST L4 ;OP SYM + +OPLOOK: PUSH P,[OPLK3] +OPLK2: MOVE D,OPLK1 + MOVEI W1,SYM + MOVE A,[(440700)TXT] + PUSHJ P,.SPT +OPLK1: IDPB D,A + +;OPDECODER + +OPEVAL: MOVEM P,SAVPDL + TRZA F,OUTPUT +OPTYPE: TRO F,OUTPUT + LSH D,-27. + MOVEM D,INST + MOVE D,[(440700)TXT + MOVEM D,CHP +DEC: TRZ F,1RF + SETZB A,W1 + MOVE W2,BTAB +DC1: ILDB D,W2 + CAILE D,40 + CAIL D,73 + SOJGE A,DC1 + JUMPG A,DC1 + SUBI D,40 + JUMPE D,DECX + JUMPG D,DC2 + DPB D,[(340500)PNTR] + TRZ D,-4 + AOS D + DPB D,[(300600)PNTR] + TRNN F,OUTPUT + JRST DC6 + LDB A,PNTR + JRST DC1 +DC2: HRREI D,-33(D) + JUMPL D,DECT + MOVE W1,D + IDIVI W1,4 + MOVE W2,BTAB(W2) + ADDI W2,(W1) + JRST DC1 + +DECT: TRNE F,OUTPUT + JRST O1CZ + ILDB W1,CHP + CAIE W1,133(D) + JRST LOSE + JRST DC1 + +DECX: TRNE F,OUTPUT + POPJ P, + ILDB W1,CHP + JUMPE W1,DC7 +LOSE: POP P,A + POP P,W2 + POP P,PNTR + POP P,CHP +LOSE1: AOS A + DPB A,PNTR + LDB A,PNTR + JUMPN A,DC6AA + CAME P,SAVPDL + JRST LOSE + JUMPE U,CPOPJ + MOVSI D,DELO ;LOOK AT ALL LOCALS BEFORE GIVING UP + IORM D,SYM + PUSHJ P,EVAL + POPJ P, ;NOT FOUND + PUSH P,A + PUSHJ P,EVAL1 + XCT "',CRF + CAME A,ISYME + XCT "",CRF + POP P,A +LOSE2: MOVEM A,PRGM + SUB A,[2,,2] + MOVE W1,(A) + CAML A,JOBSYM(U) + TLNN W1,PNAME + JRST .+2 + JRST LOSE2 + PUSHJ P,EVAL + TERR (SIXBIT /IAE/) + JRST CPOPJ1 + +DC6: MOVEI A,0 + DPB A,PNTR +DC6AA: CAMN P,SAVPDL + JRST DC6BB + LDB D,-2(P) + CAME D,(P) + JRST LOSE1 +DC6BB: PUSH P,CHP + PUSH P,PNTR + PUSH P,W2 + PUSH P,A + JRST DC1 +DC7: MOVE P,SAVPDL + MOVE D,INST + LSH D,27. +POPJ2: AOS (P) + JRST CPOPJ1 + +O1CZ: TRO F,1RF + MOVEI D,133(D) + PUSHJ P,TOUT + JRST DC1 + TBL: +.BYTE 9 + +DEFINE BARF A +A +CLOC=CLOC+1 +TERMIN + +DEFINE HACK A +IRPS B,D,[A] +Z="D +IFE Z-":,Y!B==CLOC +IFE Z-"/,IF1 [BARF 1] IF2 BARF Y!B+73 +IFE Z-"^,BARF _-1+B&7-1 +IFE *,[ +IRPC Q,,B +Z="Q +IFE Z-".,Z=100 +BARF Z-40 +TERMIN +] +TERMIN +TERMIN + + + CLOC=0 +;INITIAL DISPATCH + HACK [63^. FLO/ HAK/ ACCP/ BOOLE/ H HWT/ T ACBM/ . ] + +;BYTE AND FLOATING INST + HACK [FLO: 33^ ... BYTE/ FAD A/ FSB A/ FMP A/ FDV A: + 21^ LMB/ R LMB: 02^ . L:L. M:M. B:B. BYTE: 03^ .. + FS C/ IB P: P. I LD/ LD: LD B/ I DP/ DP: DP B/] + +;FWT, FIXED POINT ARITH, MISC. + HACK [HAK: 33^ MV/ MV: MOV MO/ ML/ DV/ SH/ H1/ JP/ + 21^ ADD IMB/ SU BIMB: B IMB: 02^ . I:I. M/ B/ MO: 22^ + EIMS: E IMS/ S IMS/ N IMS/ M IMS: 02^ . I/ M/ S: S. + ML: 21^ I ML1/ ML1: MUL IMB/ DV: 21^ I DV1/ DV1: + DI DV2: V IMB/ H1: 03^ EXC S3/ BL T: T. AO/ AO: AOBJ + AOB/ JRS T/ JFC L/ XC T/ . AOB: 01^ P/ N/ + JP: 03^ PU/ PU: PUSH PUS/ PO/ PO: POP POP/ JSR. + JS P/ JS PA: A. JR PA/ PUS: 01^ J: J.. POP: + 01^ . J/ SH: 02^ A S2/ ROT S1/ L S2: S S3: H S1/ . + S1: 21^ . C: C. ] + +;ARITH COMP, SKIP, JUMP + HACK [ACCP: 42^ CA CA1/ SJ/ A JS/ S JS: O 31^ + J COMP/ S COMP/ CA1: 31^ I COMP/ M COMP/ + SJ: 31^ JUM PSJ/ SKI PSJ: P COMP: + 03^ . L/ E: E. L E/ PA/ G E/ N: N. G. ] + +;BOOLEAN + HACK [BOOLE: 24^ ST/ AN: AND B2/ AN/ ST/ AN/ ST/ + X OR: OR B2/ I OR/ AN/ EQ DV2/ ST/ OR/ ST/ OR/ OR/ + ST: SET B2: 24^ Z IMB/ IMB/ CA: C TA/ TM: M IMB/ + CM: C TM/ TA: A IMB/ IMB/ IMB/ CB: C BIMB/ IMB/ CA/ + CA/ CM/ CM/ CB/ O IMB/ ] + +;HALF WORDS + HACK [HWT: 51^ HW1/ 21^ R HW2/ L HW2: R HW3/ HW1: + 21^ L HW4/ R HW4: L HW3: 32^ IMS/ Z IMS/ O IMS/ + EIMS/ ] + +;TEST INST + HACK [ACBM: 31^ AC1/ 01^ D AC2/ S AC2/ AC1: 01^ R AC2/ L + AC2: 42^ N EAN/ Z EAN/ C EAN/ O EAN: 12^ . E/ PA/ N/ ] + +.BYTE + + +NUM: ANDI D,17 ;D HOLDS CHARACTER + TLNE F,CF+FPF + JRST NM1 + MOVE C,SYL + LSH C,3 + ADD C,D + MOVEM C,SYL + MOVE C,DEN + IMULI C,12 ;CONVERT TO DECIMAL + ADD C,D + MOVEM C,DEN +LE1: AOJA D,LE1A + +DOLLAR: +PERC: MOVEI D,47+101-13-45(D) ;PERCENT SIGN +LET: TLC F,SF+FPF ;EXPONENT IFF LTF'*FEF'*(D=105)*SF*FPF=1 + TLZN F,LTF+FEF+SF+FPF + CAIE D,"E + TLOA F,LTF + TLOA F,FEF + JRST LET1 + TLZN F,MF + SKIPA W1,SYL + MOVN W1,SYL + MOVEM W1,FSV + SETZM DEN +LET1: SUBI D,101-13 ;FORM RADIX 50 SYMBOL +LE1A: TLO F,SF+QF +LE2: MOVEI C,50 + EXCH C,TEM + IDIVM C,TEM + IMUL D,TEM + ADDM D,SYM + JRST L2 + +NUM1: MOVEI C,10. ;FORM NUMBER AFTER ALTMODE + IMULM C,WRD2 ;UPDATE WRD2 IN DECIMAL + ADDM D,WRD2 + MOVEI C,8 ;ALSO UPDATE WRDO2 IN OCTAL + IMULM C,WRDO2 + ADDM D,WRDO2 + TRO F,Q2F + JRST,L2 + +NM1: TLNE F,CF + JRST NUM1 + MOVEI W1,6 ;FORM FLOATING POINT NUMBER + AOS NM1A + XCT NM1A ;MOVED TO UNPURE PAGE + MOVSI A,201400 +NM1A1: TRZE W2,1 + FMPR A,FT(W1) + JUMPE W2,NM1B + LSH W2,-1 + SOJG W1,NM1A1 +NM1B: MOVSI W1,211000(D) + FMPL A,W1 + SKIPN FH + JRST NM1C + LDB W2,[(331000)A] + LDB W1,[(331000)FH] + TLZ A,377000 + SUB W2,W1 + ASHC A,(W2) + ADD B,FL + TLZE B,400000 + AOS A + MOVE W2,FH + TLZ W2,377000 + ADD A,W2 + TLNN A,1000 + SOSA W1 + ASHC A,-1 + FSC A,1(W1) +NM1C: MOVEM A,FH + MOVEM B,FL + JUMPE A,NM1D + TLNE B,200000 + AOS A ; ROUND + TLO A,400 ; NORMALIZE +NM1D: MOVEM A,SYL + AOJA D,LE1A + +POWER: TLNN F,FEF + JRST L4 ;NO EXPONENT + CAIE C,PLUS + CAIN C,MINUS + TROE F,POWF + TRZA F,POWF + JRST (C) ; E+- + + MOVE W2,DEN + MOVEI W1,FT-1 + TLZE F,MF + MOVEI W1,FT01 + SKIPA D,FSV +POW2: LSH W2,-1 + TRZE W2,1 + FMPR D,(W1) + JUMPE W2,L4 + SOJA W1,POW2 + +PERIOD: TLOE F,FPF ;IF . ALREADY TYPED, + TLOA F,LTF ;THEN MUST BE LOGICAL LETTER, SET LTF AND GO TO PERD2 + SKIPA D,LLOC ;FIRST . TYPED + JRST PERD2 + TLNE F,SF ;SYLLABLE STARTED + MOVE D,DEN + MOVEM D,SYL + TLON F,SF+QF + MOVEI D,0 + IDIVI D,400 + SKIPE D + TLC D,243000 + TLC W1,233000 + FADL D,W1 + MOVEM D,FH + MOVEM W1,FL + HLLZS NM1A +PERD2: MOVEI D,45 ;RADIX 50 PERIOD + JRST LE2 + +QUAN: MOVE D,LWT ;LAST QUANTITY TYPED +QUAN1: MOVEM D,SYL + TLZ F,LTF + TLO F,SF+QF ;WRD,SYL STARTED +QUAN3: TLZ F,CF+CCF + JRST L2QAN + +CONTROL: TLOE F,CF + TLO F,CCF + JRST,L2 + +EVAL: MOVE A,PRGM ;LOOK UP SYMBOL +EVAL0: HRLOI W1,37777+DELI + JUMPE U,CPOPJ + JUMPL A,EVAL3 ;ANY SYMS AT ALL? +EVAL1: ADD A,[(2)2] +EVAL2: JUMPL A,EVAL4 + CAMN A,ISYME ;DONE LOKING AT INITIAL SYMS => REALLY DONE + POPJ P, ;YOU LOSE + MOVE A,JOBSYM(U) ;TRY REST OF SYM TABLE +EVAL4: CAMN A,PRGM ;LOOPED BACK TO START + MOVE A,ISYMP +EVAL3: MOVE D,(A) + XOR D,SYM + TLNN D,PNAME + TLOA W1,LOCAL ;FOUND PRGM NAME, SET NO LOCAL + TDNE D,W1 + JRST EVAL1 + TLNN D,340000 ;FLUSH PRGM NAMES, DELO SET IN SYM TO LOOK AT ALL LOCALS + JRST EVAL1 + MOVE D,1(A) + +CPOPJ1: AOS (P) ;FOUND SYMBOL, SKIP +CPOPJ: POPJ P, + + +;BIT 40 - DELETE OUTPUT +; 20 - DELETE INPUT +; 10 - LOCAL +; 04 -GLOBAL +; NO BITS - PROGRAM NAME + +OVRD: MOVSI B,-5 ;$>, $< +OVRD1: MOVE A,MSKTB(B) + AND A,LWT + TDNN D,MSKTB(B) + IOR D,A + AOBJN B,OVRD1 +OVRD2: SETZM FRASE + TLZ F,TIF + SETZM WRD + JRST MASK2 + +MSKTB: 777000,, + 0 17,0 + @ + (17) + ,-1 + +ISTRING: PUSHJ P,SETISB + PUSHJ P,IIN + MOVEM D,TEM2 +ISTR1: PUSHJ P,IIN + CAMN D,TEM2 + JRST ISTR2 + PUSHJ P,SASEM + JRST ISTR1 + +ISTR2: MOVE D,TEM + JRST MASK2 + +SETISB: TRZN F,Q2F + JRST STISB2 + MOVEI W2,40 + MOVE W1,WRD2 + CAIN W1,6 + HRRM W2,SASEM + CAIN W1,7 + HLLZS SASEM + DPB W1,[300600,,STRB] +STISB2: MOVE W1,STRB + SETZM TEM + POPJ P, + +SASEM: SUBI D,FOO +SASME: IDPB D,W1 + HRRI W1,TEM + POPJ P, + +IIN: PUSHJ P,IN + CAIE D,177 + POPJ P, + JRST ERR + +IN4: MOVE D,LIMBO + AOSN UNECHF ;IF ECHO DESIRED, + JRST TOUT ;THEN MAYBE ECHO IT + POPJ P, ;OTHERWISE JUST RETURN + +TEXO2: TRZN F,Q2F + JRST TEXSET + SKIPN W1,WRD2 + JRST ERR + HRRM W1,TEXCT2 + MOVEI W2,40 + CAIN W1,6 + MOVEM W2,TEXOF + CAIN W1,7 + SETZM TEXOF + JRST TEXSET + + ;1) INPUT CHARACTER + ;2) CHECK FOR , ,  + ;3) MAYBE PRINT AND LPT IT + ;4) CHECK FOR ,  + +.ZZ1==. +LOC .ZZ0 + +TEXOF: 0 + +LCT: PUSHJ P,TSPC + PUSHJ P,TSPC +TSPC: MOVEI D,40 + JRST TOUT + +TYOI: 0 ;NELSON HAC TO OUTPUT + MOVE D,TYOI ;ONE CHARACTER BY + LDB D,[270600,,-1(D)] + PUSH P,TYOI + JRST TOUT + +.ZZ2==. +LOC .ZZ1 + +LISTN: PUSHJ P,TYI + POPJ P, + PUSHJ P,TYI4 + CAIE D,^B + CAIN D,^E + POPJ P, + CAIE D,^V + CAIN D,^W + POPJ P, + JRST CPOPJ1 + +IN: AOSN UNRCHF + JRST IN4 + SKIPE ININST + JRST IN2 + PUSHJ P,TYI3 + JFCL + PUSHJ P,ECHOT ;IF CHARACTER SHOULD BE ECHOED, + PUSHJ P,LPTR ;THEN MAYBE LPT IT + JRST TYI4 + +LPTR: SKIPE LPTFLG + .IOT LPTC,D + POPJ P, + +TTYON: SETOM TTYFLG + JRST L2 + +LPTF: 1,,(SIXBIT /LPT/) + SIXBIT /.DDT./ + SIXBIT /LPTOUT/ + +TOUT: PUSHJ P,LPTR + SKIPN SILNT + SKIPN TTYFLG + POPJ P, +TYO2: .IOT TYOC,D + POPJ P, + +TYI: .LISTEN D, + JUMPE D,CPOPJ +TYI3: .IOT TYIC,D +TYI3B: MOVEM D,LIMBO + CAIN D,^S + SETZM SILNT + CAIE D,^E + JRST TYI2 + SETZM LPTFLG + .CLOSE LPTC, +TYI2: CAIN D,^W + SETZM TTYFLG + JRST CPOPJ1 + + ;CHECK FOR  AND  + +TYI4: CAIE D,^B + JRST TYI1 + TSOPEN LPTC,LPTF + SETOM LPTFLG +TYI1: CAIN D,^V + SETOM TTYFLG + POPJ P, + + ;SKIP UNLESS CHARACTER SHOULD BE ECHOED + +ECHOT: CAIE D,15 + CAIN D,12 + JRST CPOPJ1 + CAIE D,^Q + CAIN D,^R + AOS (P) + POPJ P, + +IN2: XCT ININST ;INPUT CHAR FROM FILE OR INFERIOR + ANDI D,177 ;MASK TO 7 BITS + SKIPE D + CAIN D,3 + JRST UVLOOK ;END IF ZERO OR ^C + CAIN D,177 + JRST IN ;IGNORE IF DEL + PUSHJ P,TYI3B ;SET OR CLEAR VARIOUS FLAGS + JFCL + PUSHJ P,ECHOT + PUSHJ P,TOUT + JRST TYI4 + +;FLOATING POINT OUTPUT + +TFLOT: MOVE A,D + JUMPG A,TFL1 + JUMPE A,FP1A + MOVNS A + XCT "-,CRF + TLZE A,400000 + JRST FP1A + +TFL1: MOVEI B,0 + TLNN A,400 + XCT "#,CRF ;NOT NORMALIZED + +FP1: CAMGE A,FT01 + JRST,FP4 + CAML A,FT8 + AOJA B,FP4 +FP1A: +FP3: SETZB C,TEM1 ;CLEAR DIGIT CNTR, C TO RECEIVE FRACTION + MULI A,400 + ASHC B,-243(A) + MOVE A,B + PUSHJ P,FP7 + XCT ".,CRF + MOVNI A,10 + ADD A,TEM1 + MOVE W1,C +FP3A: MOVE D,W1 + MULI D,12 + PUSHJ P,FP7B + SKIPE,W1 + AOJL A,FP3A + POPJ P, + + ;GET A CHARACTER FROM THE INPUT FILE OR VALRET STRING AND SKIP, + ;OR DON'T SKIP IF GETTING CHARS. FROM TTY + +RTYIC: SKIPN ININST ;IF GETTING CHARACTERS FROM TTY, + POPJ P, ;THEN JUST RETURN + SKIPGE UNRCHF ;IF CHARACTER SAVED, + JRST RTYIC2 ;THEN USE IT (LEAVE UNRCHF ALONE) + XCT ININST ;GET CHARACTER + ANDI D,177 ;MASK TO 7 BITS + CAIE D,3 ;IF NOT CONTROL C, + JUMPN D,RTYIC3 ;AND NOT ZERO, THEN USE IT, SET UNRCHF, AND SKIP-RETURN + MOVSI D,(MOVEI D,) ;END OF THIS FILE OR VALRET STRING, + ;BUT DON'T LOOK FOR OTHERS + MOVEM D,ININST ;NEXT REGULAR CHARACTER FETCH WILL GET A ZERO + POPJ P, + +RTYIC2: MOVE D,LIMBO ;RECOVER CHARACTER + JRST CPOPJ1 ;SKIP-RETURN +RTYIC3: MOVEM D,LIMBO ;SAVE AS NEXT CHARACTER + SETOM UNRCHF ;TELL INPUT ROUTINE TO USE IT + SETOM UNECHF ;TELL INPUT ROUTINE TO ECHO IT + JRST CPOPJ1 + +FP4: MOVNI C,6 + MOVEI W2,0 +FP4A: ADDI W2,1(W2) + XCT,FCP(B) + SOSA W2 + FMPR A,@FCP+1(B) +FP4B: AOJN C,FP4A + PUSH P,EXPSGN(B) + PUSHJ P,FP3 + MOVEI D,"E + PUSHJ P,TOUT + POP P,D + PUSHJ P,TOUT + MOVE A,W2 + +FP7: SKIPE A ;AVOID AOSING TEM1, NOT SIGNIFICANT DIGIT + AOS TEM1 + IDIVI A,12 +FP7A: HRLM B,(P) + JUMPE A,FP7A1 + PUSHJ P,FP7 + +FP7A1: HLRZ D,(P) +FP7B: ADDI D,"0 + JRST,TOUT + + 1.0^32. + 1.0^16. +FT8: 1.0^8 + 1.0^4 + 1.0^2 + 1.0^1 +FT: 1.0^0 + 1.0^-32. + 1.0^-16. + 1.0^-8 + 1.0^-4 + 1.0^-2 +FT01: 1.0^-1 +FT0=FT01+1 + +FCP: CAMLE A, FT0(C) + CAMGE A, FT(C) + 0, FT0(C) + +EXPSGN: "- + "+ + +ALTU: JUMPL F,ALTU3 ;DISPATCH FOR $U + TLNN F,LTF ;IF $$U TYPED, GO TO ALTU3 + JRST ALTU2 ;RELOAD DDT FEATURE + MOVEI W2,UNAME ;REGULAR LOGIN + PUSHJ P,BITE ;GET ARG INTO UNAME IN 6BIT +NLOGI2: MOVE D,UNAME + .LOGIN D, + JRST PSDERR ;? IF LOGIN LOSES + MOVEM D,RUNAME + MOVEM D,RUNM1 + MOVEM D,RUNM2 + MOVEM D,PFILE1 + MOVEM D,MSNAM ;SET SYS NAME FOR NEW JOBS + .OPEN COMC,INITF ;EXECUTE .DDT. (INIT) FILE IF ANY + JRST NLOGI3 + MOVE D,[.IOT COMC,D] + MOVEM D,ININST + STRT [SIXBIT /INIT./] +NLOGI3: .OPEN FDRC,MAILF ;PRINT OUT MAIL IF ANY + JRST ALTL2 + .FDELE OMAILF + JFCL + .FDELE MAILF + JFCL + JRST CTLF4 + +PSDERR: CTYPE "? + JRST RET + +ALTU2: TLNN F,QF ;RELOAD DDT + SETZM SYL + PUSHJ P,IIN + CAIE D,". ;MUST BE FOLLOWED BY . + JRST ERR + .VALUE SYL + JRST ALTL2 + +ALTU3: TLNE F,LTF+QF ;IF ARG GIVEN, ERR + JRST ERR +LOGOUT: SETZM DDTTY + PUSHJ P,MASAC1 ;MAKE ROOM FOR COM: DIRECTORY + .FDELE OMAILF ;DELETE MAIL, IF ANY + JFCL + .LOGOUT ;GOOD BYE + PUSHJ P,TTYRET ;HELLO? + PUSHJ P,FORMF + 7TYPE [ASCIZ /NOT TOP LEVEL, CAN'T LOGOUT/] + JRST ERR + +ALTJ: MOVE A,JNAME ;$J COMMAND + TLNN F,LTF + JRST ALTJ2 ;IF NO ARG, GO FIND OLD JOB + MOVEI W2,JNAME + PUSHJ P,BITE ;GET ARG IN JNAME IN 6BIT +ALTJ3: MOVE D,JNAME + JUMPL F,ALTJ4 ;IF $$J CHANGE NAME OF CURRENT JOB +ALTJJ: PUSHJ P,OUSR ;OTHERWISE, CHANGE CURRENT JOB + JRST ALTL2 + +ALTJ4: PUSHJ P,QIJERR ;IS IT A REAL JOB? + MOVE D,JNAME + CAME D,[SIXBIT /PDP10/] + CAMN D,[SIXBIT /SYS/] + JRST ERR ;NOT SYSTEM + .USET USRI,[.SJNAME,,D] ;SET JOB NAME (MAY LOSE) + MOVEM D,UJNAME(U) ;DOCUMENT NEW NAME + JRST ALTL2 + +ALTJ2: JUMPL F,ALTJ5 + TLNN F,QF + JRST ALTJ9 ;IF NO ARG, GET OLD JOB + MOVE D,SYL ;IF NUMERICAL ARG, USE IT FOR JOB NAME + TLNN D,770000 + JRST ERR ;LOSING NAME + MOVEM D,JNAME + JRST ALTJ3 + + ;$$J (NO ARG) TYPE OUT CURRENT JOB STATUS IN $$V FORMAT + +ALTJ5: JUMPLE U,ALTL2 ;NOTHING IF NO JOB + PUSHJ P,LCT + TRO F,BPLF + JRST ULIST4 + +BITE: MOVEI W1,SYM ;CONVERT SQUOZE SYM TO SIXBIT + MOVE D,[JRST BITE5] + SETZM (W2) + MOVE A,[440600,,(W2)] + JRST .SPT + +BITE5: TRC D,40 + IDPB D,A + POPJ P, + + +CTLS: SETZM SILNT ;RESET SILENCE FLAG + TLNN F,QF ;IF NO ARG, THAT'S IT + JRST DD1 ;OTHERWISE, SET SYSTEM NAME + MOVEI W2,TEM + PUSHJ P,BITE + TLNE F,CF ;IF $ TYPED, + JRST CTLS1 ;THEN SET DDT'S SYSTEM NAME + PUSHJ P,QIJERR + .USET USRI,[.SSNAM,,TEM] ;SET INFERIOR PROCEDURE'S SYSTEM NAME + JRST ALTL2 +CTLS1: .SUSET [.SSNAM,,TEM] + JUMPGE F,ALTL2 ;IF ONLY ONE $ TYPED THEN THAT'S ALL + MOVE W1,TEM + MOVEM W1,MSNAM ;SET SYSTEM NAME FOR NEW JOBS + JRST ALTL2 + + +LOAD: TLO F,CF +ALTL: SKIPE FURN(U) + JRST JERR + PUSHJ P,RRFILE + MOVEI A,6 + HRLM A,IFILE + HRRZ A,IFILE + CAIN A,(SIXBIT /TTY/) + TERR (SIXBIT /DEV/) + TSOPEN UTIC,IFILE + PUSHJ P,ALOAD +ALTL4: SKIPL GETTY +ALTL2: PUSHJ P,CRF ;HERE FROM UBRK1 +ALTL5: SKIPL GETTY + JRST DD1B +ALTL3: SKIPL MONMOD + CTYPE "* + JRST DD1B + +PDUMP: PUSHJ P,RRFILE + MOVEI A,3 + HRLM A,IFILE + TSOPEN UTOC,IFILE + SETZM NCVARB + .CALL PDUMPB + OPNER + PUSHJ P,ADMPS + .CLOSE UTOC, + JRST ALTL4 + +DUMP: +ALTY: PUSHJ P,RRFILE ;SIGN OF F USED AT ADUMP + PUSHJ P,ADUMP + JRST ALTL4 + + +OUSR: MOVE D,RUNAME ;CHECK USER NAME + AOJE D,LOGQ ;IF RUNAME IS -1, GUY IS NOT LOGGED IN + MOVEI U,USRS ;SET U TO BEGINNING OF USER STORAGE + MOVE C,UNAME ;PICK UP UNAME + MOVE D,JNAME ;AND JNAME +OUSR2: CAME C,UUNAME(U) ;DO UNAMES AGREE? + JRST OUSR5 ;NO, TRY NEXT + CAMN D,UJNAME(U) ;HOW ABOUT JNAME? + JRST OPUSR ;FOUND USER, MAKE HIM CURRENT JOB +OUSR5: ADDI U,USRLNG ;NOT THIS ONE, BUMP TO NEXT + CAIGE U,USREND ;ALL CHECKED YET? + JRST OUSR2 ;NO, KEEP TRYING + MOVEI U,USRS ;YES, GO BACK TO BEGINNING TO LOOK FOR FREE SLOT FOR NEW JOB +OUSR3: SKIPN UJNAME(U) ;IS THIS SLOT FREE? + JRST OUSR4 ;YES, CREATE NEW JOB + ADDI U,USRLNG ;NO, TRY NEXT + CAIGE U,USREND ;ALL CHECKED? + JRST OUSR3 ;NO, TRY AGAIN + MOVEI U,0 ;YES, INDICATE NO CURRENT JOB + TERR (SIXBIT /TMJ/) ;AND TELL USER + +OUSR4: MOVE D,UNAME ;GET HERE FOR NEW JOB + MOVEM D,UUNAME(U) ;SET UP UNAME AND JNAME FOR NEW JOB + MOVE D,JNAME + MOVEM D,UJNAME(U) + CTYPE "! ;INDICATE THAT THIS IS NEW JOB + SETOM PERMIT(U) ;ALLOW VALRET STRINGS + MOVE D,SYMTOP + MOVEM D,JOBSYM(U) ;INITIALIZE SYMTAB POINTER FOR THIS JOB + MOVS D,JNAME + CAIN D,(SIXBIT /SYS/) ;CHECK FOR SYS JOB + JRST OUSR6 ;SYSJ OR SYS + SETZM UINT(U) ;CLEAR INT WORD + PUSHJ P,OPUSR ;OPEN JOB + .USET USRI,[.RUIND,,D] ;PICK UP INDEX # + MOVEM D,UIND(U) ;AND SAVE + MOVEI D,21 + MOVEM D,UINTWD(U) ;INDICATE JOB NOT YET STARTED + .USET USRI,[.RUSTP,,D] ;PICK UP STOP WORD + TLNE D,100000 ;SKIP IF JOB RUNNING + JRST OUSR4B ;JOB STOPPED + SETZM UINTWD(U) ;INDICATE JOB RUNNING + JRST OUSR4A +OUSR4B: .USET USRI,[.RUPC,,D] ;GET JOB'S PC + CAMN D,[10000,,0] ;TEST TO SEE IF NEW JOB + JRST OUSR4A ;YES + MOVEM D,PPC(U) ;DISOWNED JOB. SIMULATE INTERRUPT IF NOT RUNNING + SETOM UINTWD(U) +OUSR4A: SKIPN FURN(U) ;IF NOT FOREIGN USER, + .USET USRO,[.SSNAM,,MSNAM] ;THEN SET SYSTEM NAME APPROPRIATELY + SKIPN DDTSW + POPJ P, ;EXIT IF NOT OPENING SELF + PUSHJ P,ELECTRON ;OTHERWISE FLUSH EXISTING SYMS + TSOPEN UTIC,TSDDT ;OPEN SYS DDT FILE + JRST CSMI1 ;AND LOAD SYMS THEREFROM + +OUSR6: MOVE D,RUNAME ;IF REAL UNAME + CAME D,UNAME ;DOESN'T EQUAL INTERNAL UNAME + JRST OPUSRT ;FORCE UNAME TO RUNAME + SETZM UCHNLO ;INDICATE NO INFERIOR OPEN + .CLOSE USRI, ;AND MAKE SURE IT'S TRUE + .CLOSE USRO, + SETOB A,SYSSW ;SYSTEM FLAG + BLOCK LENGTH OF 1 FOR GETSYS + SETZM HIGH + SETZM UINTWD(U) ;INDICATE JOB RUNNING + MOVEM U,CU ;MAKE THIS CURRENT JOB + MOVE B,[SIXBIT /DSYMS/] ;PREPARE TO GET SYMS FROM SYS + .GETSYS A, ;SHOULD LOSE, AND PUT -LENGTH IN LH OF A + PUSHJ P,HOLE ;MAKE ROOM FOR SYMS + HRRZ A,JOBSYM(U) ;GET POINTER TO AREA CREATED BY HOLE + .GETSYS A, ;GOBBLE GOBBLE + TERR (SIXBIT /???/) ;LOSEY LOSEY + AOS D,NJ1 + MOVEM D,JTIME(U) + POPJ P, + +TSDDT: SIXBIT / &SYS@ HACTRN/ + +OPUSR1: SKIPE VALCOM(U) ;IS THERE A VALRET STRING FROM THIS JOB? + JRST OPUSRC ;YES, GO EXECUTE IT + PUSHJ P,CRF ;TYPE CRLF +OPUSRK: SETZM SILNT ;INSURE TYPEOUT NOT FLUSHED + CAMN U,CU ;IS THIS THE CURRENT JOB? + JRST OPUSR ;YES + PUSHJ P,NJTYP ;NO, TYPE MUMBLEJ + PUSHJ P,CRF ;AND CRLF +OPUSR: JUMPE U,JERR ;COMPLAIN IF ILLEGAL JOB +OPUSRN: AOS D,NJ1 ;GET NEXT JTIME VALUE + MOVEM D,JTIME(U) ;INDICATE THIS JOB MOST RECENT + MOVEM U,CU ;AND CURRENT + SETZM UCHNLO ;AVOID IOC ERROR FROM USR IO IF .OPEN LOSES + MOVE D,UJNAME(U) + MOVEM D,JNAME ;SET CURRENT JNAME + SETZM SYSSW ;FLUSH SYS FLAG + CAMN D,[SIXBIT /SYS/] ;IS JNAME SYS? + JRST OPUSRS ;YES, TAKE SPECIAL ACTION + SETOM DDTSW ;SET INTROSPECTION FLAG + MOVE B,RUNAME + CAME B,UNAME ;CHECK FOR UNAME BEING SAME AS DDT'S + SETZM DDTSW ;FLUSH FLAG IF NOT + .SUSET [.RJNAM,,B] ;GET DDT'S JNAME + CAME B,D ;CHECK AGAINST CURRENT JNAME + SETZM DDTSW ;FLUSH FLAG IF DIFFERENT + MOVEI D,2 + HRLM D,UFUSR(U) ;SET OPEN MODE TO BLOCK INPUT +OPUSRR: .OPEN USRI,UFUSR(U) ;OPEN JOB + JRST OPUSR5 ;LOSE + MOVEI D,3 + HRLM D,UFUSR(U) ;SET MODE TO BLOCK OUTPUT +OPUSRW: .OPEN USRO,UFUSR(U) ;OPEN JOB AGAIN + JRST OPUSR6 ;WIN ON INPUT & LOSS ON OUTPUT => FOREIGN USER + .USET USRI,[.RINTB,,D] ;PICK UP INTERRUPT BIT + MOVEM D,INTBIT(U) ;AND SAVE + SETZM FURN(U) ;INDICATE NOT FOREIGN USER + SETOM UCHNLO ;INDICATE INFERIOR OPEN +OPUSRB: .USET USRI,[.RMEMT,,HIGH] ;GET MEM BOUND +OPUSRA: MOVE D,JOBSYM(U) + MOVEM D,PRGM ;SET CURRENT SYMTAB POINTER TO POINTER FOR THIS JOB + SKIPE SYSSW + POPJ P, ;EXIT IF SYS + SKIPE D,UINT(U) ;IS JOB RUNNING? + JRST UBRK1 ;NO, TELL USER WHY + POPJ P, ;YES, EXIT + +OPUSRS: SETOM SYSSW ;SET SYS JOB FLAG + SETZM HIGH + JRST OPUSRA ;BACK TO OPUSR FOR VARIOUS ODDS & ENDS + + ;.VALUE EXECUTED WITH EFFECTIVE ADDRESS .NE. 0 +OPUSRC: MOVEI A,4 ;USED BY UBRK9 TO INDICATE LOSING VALRET + SKIPE ININST ;CHECK FOR OTHER HACKS ON SOURCE OF INPUT + JRST UBRK9 ;ININST NOT AVAILABLE + SETZM UINT(U) ;FLUSH INTERRUPT WORD + PUSHJ P,OPUSRK ;OPEN JOB + MOVSI D,-1 + EXCH D,VALCOM(U) ;GET & FLUSH STRING POINTER + MOVEI B,(D) ;GET FIRST LOCATION OF STRING + .ACCESS USRI,B ;PREPARE TO GET STRING + MOVE D,[-VLRTSL,,UVCOM] ;AOBJN POINTER TO VALRET BUFFER, ASSUMING NO MEMTOP PROBLEMS + SUB B,HIGH ;CALCULATE -# WORDS BETWEEN STRING AND MEMTOP + CAMLE B,[-VLRTSL] ;IF NOT ENOUGH TO FILL UP THE BUFFER, + HRL D,B ;THEN USE AMOUNT THAT THERE IS + .IOT USRI,D ;GET THE STRING + SETZM (D) ;ENSURE AN "END OF FILE" + MOVE D,[ILDB D,VILDBP] + MOVEM D,ININST ;REDEFINE SOURCE OF INPUT + MOVE D,[440700,,UVCOM] + MOVEM D,VILDBP ;INITIALIZE BYTE POINTER + SETOM UINT(U) ;SET INTERRUPT WORD FOR NON-BPT INT + MOVE B,UPIRQ(U) ;GET PI REQUESTS + ILDB D,D ;GET CHARACTER FROM VALRET STRING + TRNN B,461464 ;IF NO INTERRUPTS TO COMPLAIN ABOUT, + CAIE D,^W ;AND CHARACTER IS CONTROL W, + JRST UBRK0 ;... + SETZM TTYFLG ;THEN SILENCE TYPEOUT NOW + IBP VILDBP ;KEEP CHARACTER FROM BEING INPUT AGAIN + JRST UBRK1 + +ALTV: JUMPGE F,ERR ;RESERVE $V FOR DISPLAY MODE +ULIST: PUSHJ P,CRF + MOVEM U,CU + MOVEI U,USRS +ULIST2: SKIPE UUNAME(U) + SKIPN D,UJNAME(U) + JRST ULIST1 + MOVEI D," + CAMN U,CU + MOVEI D,"* + PUSHJ P,TOUT + PUSHJ P,TSPC + +ULIST4: SKIPN FURN(U) + JRST ULIST3 + MOVE D,UUNAME(U) + PUSHJ P,SIXTYP + PUSHJ P,TSPC +ULIST3: MOVE D,UJNAME(U) + PUSHJ P,SIXTYP + PUSHJ P,TSPC + MOVE D,UINTWD(U) + CAIN D,21 + XCT "-,CRF + JUMPL D,ULISTP + JUMPE D,ULISTR + CAIL D,8 + JRST ULSTRT + PUSHJ P,TOC + MOVEI D,"B + PUSHJ P,TOUT +ULSTRT: PUSHJ P,TSPC + MOVE D,UIND(U) + PUSHJ P,TOC + TRZE F,BPLF + JRST ALTL2 + PUSHJ P,CRF +ULIST1: ADDI U,USRLNG + CAIGE U,USREND + JRST ULIST2 + MOVE U,CU + JRST ALTL2 + +ULISTR: MOVEI D,"W + SKIPN UINT(U) + MOVEI D,"R + JRST .+2 +ULISTP: MOVEI D,"P + PUSHJ P,TOUT + JRST ULSTRT + +NJTYP: MOVE D,UJNAME(U) ;TYPE JNAME OF CUR JOB AND "$J" + PUSHJ P,SIXTYP + MOVSI D,(SIXBIT /$J/) +SIXTYP: MOVEM D,TEM ;PRINT D AS SIXBIT STOPPING WHEN ZERO + SETZM TEM1 + MOVE C,[440600,,TEM] +SIXTP2: ILDB D,C + JUMPE D,CPOPJ + CTYPE 40(D) + JRST SIXTP2 + +;N + PUSHJ P,TSINTT + TRNE I1,1_ + PUSHJ P,TSINTC + TLNN I1,177777 + .DISMIS TSINT+1 + SETZM DGO + MOVEI I2,USRS + PUSH P,A + PUSH P,B + PUSH P,D + PUSH P,W1 + PUSH P,W2 + PUSH P,W3 + .IOPUSH USRI, + .IOPUSH USRO, +TSIN2: TDZE I1,INTBIT(I2) + JRST TSIN3 +TSIN22: ADDI I2,USRLNG + CAIGE I2,USREND + JRST TSIN2 + .IOPOP USRO, + .IOPOP USRI, + POP P,W3 + POP P,W2 + POP P,W1 + POP P,D + POP P,B + POP P,A + TLNN I1,-1 + TERR (SIXBIT /NML/) + SKIPN DGO + .DISMIS TSINT+1 + SKIPN DDTTY ;DDT DOESNT HAVE TTY, MAY JUST BE LEAVING + SETOM DDINT;SET FLAG FOR RESTORE TO START DDT + SKIPE SARS + .DISMIS TSINT+1 ;DDT RUNNING + MOVE A,INTUSR ;WHICH USR INTERRUPTING (DONT CLOBBER D FOR SLP) + SKIPN DDTTY ;MAY REALLY STILL BE IN DDT + CAMN A,TTYUSR ;NOT THE SAME AS GAVE TTY TO + .DISMIS [UBREAK] ;ONLY NON-RETURN NON-ERROR EXIT FROM INTERRUPT ROUTINE + PUSHJ P,TSWARN ;MESSAGE TO LOSER + .DISMIS TSINT+1 ;RESTORE WORLD + +.ZZ4==. +LOC .ZZ3 + +TSWARN: JSR %SAVE + SKIPE GETTY + .IOT TYOC,["^] + .IOT TYOC,[^G] + JRST %UNSAVE + +OTHERI: TRZE I1,BIOC + PUSHJ P,IOCBRK + TRZE I1,SYSDDB + PUSHJ P,SYSDED + TLZE I1,(SYSDBB) + PUSHJ P,SYSDBG + TRZE I1,BCLI + PUSHJ P,CLIBRK + TLNE I1,200 + TERR (SIXBIT /PUR/) + TRNE I1,ILUADB + TERR (SIXBIT /COR/) + TRNE I1,ILOPRB ;IF ILLOP, + PUSHJ P,ILOPBK ;CHECK FOR CERTAIN .USET'S + TRNN I1,-1 + .DISMIS TSINT+1 + PUSHJ P,COMPLN + MOVE D,I1 + HRRZ D,TSINT+1 + TERR (SIXBIT /INT/) + +IOCBRK: SOS I2,TSINT+1 + LDB I3,[270400,,(I2)] + DPB I3,[270400,,IOCX] + XCT IOCX ;THIS IS A .STATUS + LDB I4,[330500,,I4] + CAIN I4,9 + JRST IOCFUL + CAIN I4,8 + JRST IOCOPN + CAIN I4,7 + JRST NOUSER ;USER NOT OPEN ON CHANNEL +IOCER2: PUSHJ P,COMPLN + MOVE D,I4 + MOVE D,I3 + HRRZ D,TSINT+1 + TERR (SIXBIT /IOC/) + +NOUSER: CAIE I3,USRI ;IF GUILTY IO CHANNEL... + CAIN I3,USRO ;IS EITHER USER IO CHANNEL, + JRST .+2 ;THEN CHECK FURTHER + JRST IOCER2 ;NOT USER CHANNEL, COMPLAIN + MOVE I2,-1(I2) ;GET GUILTY INSTRUCTION + TLZ I2,(0 17,) ;WIPE OUT AC FIELD + CAME I2,[.UCLOSE] ;IF NOT .UCLOSE, + JRST IOCER2 ;THEN COMPLAIN + POPJ P, ;.UCLOSE, LET IT CONTINUE + +ILOPBK: MOVE I2,TSINT+1 ;ILLOP BREAK + MOVS I3,-1(I2) ;GET GUILTY INSTRUCTION + LDB I4,[050400,,I3] ;GET AC FIELD + CAIE I4,USRI ;IF USER INPUT, + CAIN I4,USRO ;OR USER OUTPUT, + TRNE I1,20000 ;THEN CHECK FURTHER UNLESS MPV. + POPJ P, ;DON'T CHECK FURTHER + ANDI I3,777000 ;MASK TO INSTRUCTION PART + CAIE I3,(.USET) ;IF NOT .USET, + POPJ P, ;THEN GO COMPLAIN + HLRZ I4,@-1(I2) ;GET LH OF CONTENTS OF EFFECTIVE ADDRESS + CAIE I4,.SJNAM ;IF NOT TRYING TO SET JNAME, + POPJ P, ;THEN GO COMPLAIN + PUSHJ P,ERTTY ;TRYING TO SET JNAME, COMPLAIN IN ENGLISH + STRT [SIXBIT /JOB ALREADY EXISTS./] + JRST ERR4 + +IOCFUL: CAIE I3,UTOC + JRST IOCER2 + MOVEM I3,IOCF+2 + .GENSYM I4, + MOVEM I4,IOCF+3 + .FDELE IOCF + JRST ERR + .CLOSE UTOC, + MOVE I4,IFILE + MOVEM I4,IOCF+2 + .FDELE IOCF+2 + JFCL + PUSHJ P,TTYRET + PUSHJ P,CRF + STRT [SIXBIT /DEVICE FULL, DUMP ABORTED./] + MOVE I4,IFILE + TERR (I4) + +TSINTT: SKIPA I3,[TYIC] +TSINTC: MOVEI I3,COMC + .ITYIC I3, + POPJ P, + CAIN I3,^S + JRST SILNCE + CAIN I3,^E + JRST LPTSTP + CAIE I3,^G + POPJ P, + PUSHJ P,%RESET + .RESET TYOC, + .RESET TYIC, + MOVEI I3,TQUIT + MOVEM I3,TSINT+1 + POPJ P, + +%RESET: .IOPDL ;RESET I/O PDL + .CLOSE COMC, + .CLOSE FDRC, + .CLOSE ERRC, + .CLOSE CLIC, + .CLOSE CLAC, + CLEARM LPTFLG + .RESET LPTC, + .CLOSE LPTC, + SETZM DDTTY + PUSHJ P,TTYRET ;GET BACK TTY IF GIVEN AWAY + SETOM DDTTY + SETOM TTYFLG + PUSHJ P,CLSU ;CLOSE DECTAPE CHANNELS + SETZM ININST + SETZM SILNT ;FLUSH TIMING ERROR + POPJ P, + +TQUIT: SKIPN UUNAME(U) + SETZB U,HIGH + MOVE D,[[SIXBIT /QUIT/],,101] + JRST UUOH2 + +SILNCE: .RESET TYOC, + SETOM SILNT + SKIPN LPTFLG + SETOM PFLUSH + POPJ P, + +LPTSTP: SETZM LPTFLG + SKIPE SILNT + SETOM PFLUSH + SKIPN TTYFLG + SETOM PFLUSH + POPJ P, + +TSIN3: MOVE I3,UUNAME(I2) + MOVEM I3,TUNAME + MOVE I3,UJNAME(I2) + MOVEM I3,TJNAME + MOVEI I3,2 + HRLM I3,TSUSRF + .OPEN USRI,TSUSRF + JRST TSIN22 + MOVEI I3,3 + HRLM I3,TSUSRF + .OPEN USRO,TSUSRF + JRST TSIN22 + .USET USRI,[.RPIRQC,,I3] + MOVEM I3,UPIRQ(I2) ;USER PIR => UPIRQ + .USET USRI,[.RMASK,,W3] + ANDCM I3,W3 + ANDI I3,267666 ;AND WITH BAD BITS + .USET USRI,[.SAPIRQ,,I3] + .USET USRI,[.RUPC,,I3] + TLZ I3,OIPBIT + MOVEM I3,IPC + MOVEM I3,PPC(I2) ;USER PC => PPC + MOVE I3,UPIRQ(I2) + TRNE I3,2 ;^Z BIT + JRST TSIN44 + TRNN I3,BRKBIT + JRST TSIN44 ;NOT A .BREAK + .USET USRI,[.RSV40,,I40] +TSIN3A: LDB I3,[270400,,I40] + SETZM NBPTB(I2) + JRST @TSDISP(I3) ;DISPATCH ON AC FIELD OF .BREAK + +SYSDED: JSR %SAVE + 7TYPE [ASCIZ / +ITS GOING DOWN IN /] + .DIETIM D, + IDIVI D,30. + PUSHJ P,TMPT + PUSHJ P,CRF +%UNSAVE: POP P,UUOH + POP P,40 + POP P,W1 + POP P,TEM + POP P,D + POP P,C + POP P,DDTTY + SKIPN DDTTY + .ATTY USRI, + JFCL + POPJ P, + +SYSDBG: JSR %SAVE + 7TYPE [ASCIZ / +ITS BEING DEBUGGED! +/] + JRST %UNSAVE + +.ZZ5==. +LOC .ZZ4 + +%SAVE: 0 + PUSH P,DDTTY + PUSHJ P,TTYRET + PUSH P,C + PUSH P,D + PUSH P,TEM + PUSH P,W1 + PUSH P,VLRTSL + PUSH P,UUOH + JRST @%SAVE + +.ZZ6==. +LOC .ZZ5 + +IOCOPN: CAIE I3,TYIC + CAIN I3,TYOC + JRST .+2 + JRST IOCER2 + TSOPEN TYOC,TYOF + TSOPEN TYIC,TYIF + SETZM GETTY + .STATUS TYOC,I4 + ANDI I4,77 + CAIN I4,SYSGE + SETOM GETTY + POPJ P, + +CLIBRK: JSR %SAVE +CLIBR2: .OPEN CLAC,CLAFNB + JRST %UNSAVE + MOVE I3,[-CLABL,,CLABUF] + .IOT CLAC,I3 + .CLOSE CLAC, + MOVEI I4,0 + MOVE I3,CLABUF + CAMN I3,RUNAME + ADDI I4,2 + MOVE I3,CLABUF+1 + CAME I3,[SIXBIT /HACTRN/] + ADDI I4,1 + DPB I4,[360600,,CLABRP] + LDB I4,CLABRP + JUMPE I4,CLIBR2 + 7TYPE [ASCIZ / +MESSAGE FROM /] + MOVE D,CLABUF + PUSHJ P,SIXTYP + CTYPE 40 + MOVE D,CLABUF+1 + PUSHJ P,SIXTYP + CTYPE 40 + PUSHJ P,CRF + 7TYPE CLABUF+2 + PUSHJ P,CRF + JRST CLIBR2 + +TMPT: MOVEI C,0 + JUMPE D,CPOPJ + CAMGE D,TMT1(C) + AOJA C,.-1 +TMP3: IDIV D,TMT1(C) + CTYPE "0(D) + MOVE D,W1 + TRNN C,1 + AOJA C,TMP3 + CAIL C,5 + POPJ P, + CTYPE ": + AOJA C,TMP3 + +TMT1: 36000. + 3600. + 600. + 60. + 10. + 1 + + +COMPLN: PUSHJ P,ERTTY + MOVEI D,8 + MOVEM D,ODF ;SET CURRENT RADIX TO OCTAL +CMPLN2: PUSHJ P,TSPC + XCT @(P) + PUSHJ P,TOC + AOS (P) + MOVEI D,", + PUSHJ P,TOUT ;DON'T CHANGE TO A UUO, WILL CLOBBER 40, UUOH, ETC. + JRST CMPLN2 + +ERTTY: PUSHJ P,TTYRET + MOVNI A,1 + AOSG STYSW ;IF TTYFLG NOT ALREADY SAVED, + EXCH A,TTYFLG ;THEN SAVE IT + MOVEM A,STYFLG + POPJ P, + +TSIN44: TRNN I3,VALBIT + JRST TSIN4A + SKIPL PERMIT(I2) + JRST TSIN4 + .USET USRI,[.RSV40,,I3] + TRNE I3,-1 + MOVEM I3,VALCOM(I2) +PROCX: +TSIN4: SETOM I3 +TSIN5: MOVEM I3,UINT(I2) +TSIN6: MOVEM I2,INTUSR + SKIPN DDTTY + JRST TSIN7 + SKIPE GETTY ;HAS TTY, TYPE BELL + .IOT TYOC,["^] + .IOT TYOC,[^G] ;DING +TSIN7: SETOM DGO + JRST TSIN22 ;LOOP BACK FOR MORE LOSERS + +TSIN4A: TRNN I3,OIPINT + JRST TSIN4 + HRRZ D,IPC + CAIE D,32 + CAIN D,33 + AOS INCNT(I2) + MOVSI D,OIPBIT + SOSG INCNT(I2) + JRST TSIN4 + IORM D,IPC ;MAKE SURE ONEPROC BIT ON IN PC FOR PROCEDE + JRST GO + +TSDISP: TSIN4 ;RANDOM INST., INTERRUPT DDT + REPEAT NBP,TSIN9 ;REGULAR BPT + REPEAT 12-NBP,TSIN4 ;RANDOM + TSBPC1 + TSBPC2 + TSIN8 ;PROCEED INS POINTER + REPEAT 2,TSIN5 ;$X RETURN 1,2 + +TSIN9: MOVEM I3,UINT(I2) + IMULI I3,BPL + ADDI I3,-BPL(I2) + SOSG B1CNT(I3) + JRST TSIN6 ;COUNT RAN OUT,BREAK TO DDT + SKIPE D,BPCON(I3) + JRST TSBPC + MOVE W3,B1INS(I3) + HRR W3,I40 + TLZ W3,37 + JRST PROC ;PROCEED AND INTERPRET BPT INS + +TSIN8: HRRZ I3,IPC + CAIE I3,$X+1 + JRST TSIN4 ;AT A RANDOM PLACE + MOVE I3,OPC(I2) + MOVEM I3,IPC + MOVEM I3,PPC(I2) ;FAKE OUT PC DEPENDANT PROCEED + MOVE W3,BPLOC(I2) + LDB I3,[2200,,I40] + DPB I3,[2700,,W3] + JRST PROC ;INTERPRET INS @ LOC PROCEEDED FROM(POINTED TO BY .BREAK 15, IN $X) + +TSBPC: HRRZ I3,UINT(I2) + MOVEM I3,CBPPS(I2) + MOVE A,I40 + HRLM A,CBPPS(I2) + MOVEI A,CBPB + PUSHJ P,DEP + MOVSI D,(.BREAK 13,) + MOVEI A,CBPB+1 + PUSHJ P,DEP + MOVSI D,(.BREAK 14,) + MOVEI A,CBPB+2 + PUSHJ P,DEP + MOVEI D,CBPB + MOVEM D,PPC(I2) + EXCH D,IPC + MOVEM D,BPCPC(I2) + .USET USRI,[.SUPC,,IPC] + .USET USRI,[.SUSTP,,[0]] + SETZM UINT(I2) + JRST TSIN22 + +TSBPC1: MOVE D,BPCPC(I2) + MOVEM D,IPC + MOVEM D,PPC(I2) + HRRZ D,CBPPS(I2) + IMULI D,BPL + ADDI D,-BPL(I2) + MOVE W3,B1INS(D) + HLR W3,CBPPS(I2) + TLZ W3,37 + JRST PROC + +TSBPC2: MOVE D,BPCPC(I2) + MOVEM D,IPC + MOVEM D,PPC(I2) + HRRZ I3,CBPPS(I2) + SETOM NBPTB(I2) + JRST TSIN5 + +UVLOOK: .CLOSE COMC, + SETZB A,ININST + TROA A,2 +UBREAK: MOVEI A,0 + PUSHJ P,TTYRET + SKIPA +ALTJ9: MOVEI A,1 + MOVEI P,PS + SETZM DDINT + MOVEM U,CU + SKIPN U + MOVEI U,USRS + SETOM THFLAG +UBRK2: SKIPE D,UINT(U) + JRST OPUSR1 ;JOB$J THEN JRST UBRK1 + ;OPUSR1 CLOBBERS A TO 4 IF VALRET WITH ININST .NE. 0 AND DOES JRST UBRK9 +UBRK9: ADDI U,USRLNG + CAIGE U,USREND + JRST UBRK2 + MOVEI U,USRS + AOSN THFLAG + JRST UBRK2 + MOVE U,CU + TRZE A,6 + JRST DD1B + SKIPN A + JRST ALTL2 + SOS D,NJ2 + MOVEM D,JTIME(U) + JRST FNJOB + +UBRK0: PUSHJ P,CRF +UBRK1: JSR SAVE + PUSHJ P,REMOVB + MOVEI D,0 + EXCH D,UINT(U) + MOVEM D,UINTWD(U) + AOJE D,UBRK3 ;RANDOM INS LOSSAGE (MPV ETC) + CAIG D,16 + JRST UBRK4 ;BPT + MOVE A,XECPC(U) + MOVEM A,PPC(U) + MOVE A,XINTWD(U) + MOVEM A,UINTWD(U) + CAIN D,20 ;$X RETURN + PUSHJ P,CRF + JRST ALTL5 + +UBRK3: MOVE D,UPIRQ(U) + TDNE D,[200,,63644] + SOS PPC(U) + TRNE D,2 ;SKIP IF NOT CONTROL Z INTERRUPT + PUSHJ P,CRF + PUSHJ P,PCPNT + HRRZ A,TEM3 + PUSHJ P,FETCH + JRST ERR + PUSHJ P,CONSYM + HRRZ D,UPIRQ(U) + TRNE D,VALBIT+40000 + AOS PPC(U) ;CAUSE PROCEDE FROM VALDD1 TO PROCEDE + TRNE D,40000 + .USET USRI,[.SMARA,,MARCON] + JRST RET + + +PCPNT: MOVE D,UPIRQ(U) + TLNE D,200 + STRT [SIXBIT /PURPG./] + TRNE D,40000 + STRT [SIXBIT /MAR./] + TRNE D,20000 + STRT [SIXBIT /MPV./] + TRNE D,1000 + STRT [SIXBIT /ILUAD./] + TRNE D,400 + STRT [SIXBIT /IOC./] + TRNE D,40 + STRT [SIXBIT /ILOPR./] + TRNE D,20 + STRT [SIXBIT /DPY./] + TRNE D,4 + STRT [SIXBIT /BADPI./] + SKIPGE VALCOM(U) + JRST PCPNT4 ;VALUE RETURN + HRRZ D,PPC(U) + CAIE D,31 + JRST PCPNT1 + MOVEI A,32 + PUSHJ P,FETCH + JFCL + MOVEI D,-1(D) +PCPNT1: MOVEM D,TEM3 + PUSHJ P,PADSO + MOVEI D,2 + TDNE D,UPIRQ(U) + JRST PCPNT2 + MOVEI D,"> + SKIPL NBPTB(U) + PUSHJ P,TOUT + JRST TOUT + +PCPNT2: MOVEI D,") + PUSHJ P,TOUT + JRST LCT + +PCPNT4: SETZM VALCOM(U) + AOS PPC(U) ;CAUSE VALRET NOT TO UNSKIP + JRST ALTL2 + +UBRK4: IMULI D,BPL ;BREAK POINT (D IS UINT+1) + ADDI D,B1ADR-2*BPL+770000(U) + PUSHJ P,PCPNT1 + SOS D,PPC(U) + MOVEM D,OPC(U) + AOS OPC(U) + PUSHJ P,PAD + MOVE A,TEM3 ;@ PCPNT1 + HRRZ D,-770000(A) + MOVEM D,BPLOC(U) + HLRZ D,-770000(A) + JUMPE D,UBRK5 + PUSHJ P,LCT + HLRZ D,-770000(A) + PUSHJ P,PLOC + PUSHJ P,LI1 +UBRK5: MOVE A,UINTWD(U) + MOVEI B,1 + LSH B,-1(A) + TDNN B,AUTOPI + JRST RET + PUSHJ P,LISTN + JRST PROCD1 + JRST RET + +RUBLK1: .ACCESS USRI,[0] + SETZM TEM1 + POPJ P, + +RUBLK: MOVE A,HIGH + MOVEI D,BUFL + CAMG A,TEM1 + POPJ P, + ADDM D,TEM1 + MOVE D,[-BUFL,,USRBF] + .IOT USRI,D + JRST CPOPJ1 +BPBLK=31 +CBPB==26 + +PROC: MOVEI B,100 +PROC1: SOJLE B,PROCX + LDB W2,[270400,,W3] + LDB D,[331100,,W3] + CAIN D,260 + JRST IPUSHJ + CAIN D,264 + JRST IJSR + CAIN D,265 + JRST IJSP + CAIN D,266 + JRST IJSA + CAIN D,256 + JRST IXCT + TRNN D,700 + JRST IUUO +PROCR: MOVE D,W3 ;PUT INS IN 31,JRST INS+1 IN 32,JRST INS+2 IN 33 + MOVEI A,BPBLK + PUSHJ P,DEP + MOVE D,IPC + HRRM A,IPC + HRLI D,(JRST) + MOVEI A,BPBLK+1 + PUSHJ P,DEP + MOVEI A,BPBLK+2 + AOS D + PUSHJ P,DEP + MOVSI D,OIPBIT + SKIPLE INCNT(I2) + IORM D,IPC +GO: .USET USRI,[.SUPC,,IPC] ;START LOSER BACK UP + .USET USRI,[.SUSTP,,[0]] + SETZM UINT(I2) + JRST TSIN22 ;BACK FOR MORE LOSERS + +IJSP: TLCA W3,(MOVE#JSP) +IPUSHJ: TLC W3,(PUSH#PUSHJ) + MOVE D,IPC ;? + HRRM W3,IPC + HRRI W3,BPBLK-1 + MOVEI A,BPBLK-1 + PUSHJ P,DEP + JRST PROCR + + +IJSR: MOVE D,IPC + HRRZ A,W3 +IJSR1: PUSHJ P,DEP + HRLI W3,(JRST) + AOJA W3,PROCR + +IJSA: HRRZ A,W2 + PUSHJ P,FETCH + JRST PROCX + HRRZ A,W3 + CAILE A,HIGH + JRST PROCX + PUSHJ P,DEP + HRRZ A,W2 + HRR D,IPC + HRL D,W3 + JRST IJSR1 + +IXCT: HRRZ A,W3 +IXCT1: PUSHJ P,FETCH + JRST PROCX + MOVE W3,D + MOVEI A,100 + MOVEM A,TEM2 +IXCT3: LDB A,[220400,,D] + JUMPE A,IXCT2 + PUSHJ P,FETCH + JRST PROCX + ADDI W3,(D) +IXCT2: TLNE W3,20 + JRST IXCTIN + TLZ W3,37 + JRST PROC1 + +IXCTIN: SOSGE TEM2 + JRST PROCX + HRRZ A,W3 + PUSHJ P,FETCH + JRST PROCX + DPB D,[2700,,W3] + MOVE D,W3 + JRST IXCT3 + +IUUO: CAIN D,45 + JRST IBPT + CAIGE D,47 + CAIGE D,40 + JRST .+2 ;USER UUO + JRST PROCR + MOVE D,W3 + MOVEI A,40 + PUSHJ P,DEPî + MOVEI A,41 + JRST IXCT1 +IBPT: MOVEM W3,I40 + JRST TSIN3A + +ADUMP: TLNN F,FAF ;IF "<" NOT TYPED, + PUSHJ P,DCKSYS ;AND C(34) .NE. 0 AND TRYING TO DUMP ONTO SYS THEN BARF + SKIPL F + .FDELE IFILE + JFCL + MOVEI A,3 + HRLM A,IFILE + TSOPEN UTOC,IFILE + PUSHJ P,ADMP + .CLOSE UTOC, + POPJ P, + +DCKSYS: HRRZ A,IFILE ;GET DEVICE NAME + CAIE A,(SIXBIT /SYS/) ;IF NOT TRYING TO DUMP OUT ON SYS DEVICE (DON'T WORRY ABOUT SYS NAME), + POPJ P, ;THEN OK + MOVEI A,$X ;WANTS TO DUMP OUT IN SYS + PUSHJ P,FETCH ;GET JOB'S LOCATION 34 + JFCL ;(SHOULD SKIP) + JUMPE D,CPOPJ ;IF CONTENTS WERE ZERO THEN ALL RIGHT + + ;JOB'S LOC. 34 NON-ZERO WHILE TRYING TO DUMP OUT ON SYS DEVICE + + PUSHJ P,ERTTY ;CAUSE TYPEOUT TO EXIST + STRT [SIXBIT /JOB HAS BEEN RUN./] ;OVERRIDABLE WITH 1<$Y + JRST ERR5 + +ADMP: MOVE C,[JRST 1] + PUSHJ P,COUT + PUSHJ P,RUBLK1 +ADMP1: PUSHJ P,RUBLK + JRST ADMPS ;IF NO SKIP, TIME TO WRITE OUT JMP BLK AND SYMS + MOVSI A,-BUFL ;INDEX INTO USRBF +ADMP7: SKIPN USRBF(A) + AOBJN A,.-1 + JUMPGE A,ADMP1 ;READ NEXT BLOCK OF CORE + MOVEM A,W1 ;FOUND SOME NON-ZERO CORE, DUMP IT + SKIPE USRBF(A) ;LOOK FOR END OF NON-ZERO BLOCK +ADMP3: AOBJN A,.-1 + JUMPGE A,ADMP2 ;CALL IT A BLOCK + SKIPE USRBF+1(A) ;HA HA + JRST ADMP3 +ADMP2: MOVEM A,W2 ;SAVE FOR END TEST + SUBM W1,A + MOVEI C,-BUFL(W1) ;LEFT OF W1 IS BUFL TOO SMALL + ADD C,TEM1 ;TEM1 IS BUFL TOO LARGE + HRL C,A + MOVE A,C + PUSHJ P,COUT + ADDI W1,UBUF + HRR A,W1 + .IOT UTOC,A + HLL W1,C + +ADMP6: ROT C,1 + ADD C,(W1) + AOBJN W1,ADMP6 + PUSHJ P,COUT + MOVE A,W2 + JRST ADMP7 + +ADMPS: PUSHJ P,DJBLK + SKIPL C,JOBSYM(U) + JRST DJBLK + HLLZS C + PUSHJ P,COUT + MOVE B,JOBSYM(U) + PUSHJ P,ALDRD1 ;CKSUM IN C + .IOT UTOC,B + PUSHJ P,COUT +DJBLK: MOVE C,STARTA(U) + HRLI C,(JUMPA) +COUT: HRROI D,C + .IOT UTOC,D + POPJ P, + +ALD: MOVEI W1,0 ;ONLY LOADS SYMBOLS IF +ALD0: PUSHJ P,GTWD ;MIDAS FILE (PAPERTPAPE LOADER BEFORE FIRST JRST) + JFCL + CAME B,[JRST 1] ;DDT FILE (JUMPA OR JUMP BLOCK + AOJA W1,ALD0 + ;NOT MACDMP FILES (NO LOADER, JRST) +ALD1: PUSHJ P,GTWD + JUMPGE B,ALDJ + MOVE C,B +ALD2: MOVE D,B + CAMGE B,[-BUFL,,] + HRLI B,-BUFL + HRRI B,UBUF + PUSHJ P,ALDRD + MOVEI A,(D) + .ACCESS USRO,A + MOVE A,B + .IOT USRO,A + HLRS B + HRLI B,-1(B) + SUBM D,B + JUMPL B,ALD2 + PUSHJ P,GTWD + CAME C,B + JRST CKSER + JRST ALD1 +ALDJ: HRRZM B,PPC(U) + MOVEM B,STARTA(U) + TLNN F,CF + POPJ P, +CSMIF: JUMPN W1,ALDS + TLC B,(JUMPA) + TLNN B,777000 + JRST ALDSS + POPJ P, + +NLOAD: SETZM NCVARB + .CALL NLOADB + OPNER + JRST ALD1 + +NLOADB: SETZ + SIXBIT /LOAD/ + [USRI] + [UTIC] + 400000,,[-4,,NCVARB] + +GTWD: HRROI A,B +GTWD1: .IOT UTIC,A + JUMPL A,EOF + POPJ P, + +ALDSS: ;LOAD SYMBOLS +ALDS: PUSHJ P,GTWD + JUMPGE B,CPOPJ + MOVE A,B + PUSH P,B + PUSHJ P,HOLE + HRR B,C + POP P,C + PUSHJ P,ALDRD + PUSHJ P,GTWD + CAME C,B + JRST CKSER + JRST ALDS + + +ALDRD: MOVE A,B + PUSHJ P,GTWD1 +ALDRD1: MOVE A,B + ROT C,1 + ADD C,(A) + AOBJN A,.-2 + POPJ P, + +ALOAD: JUMPL F,ALOAD2 + .RESET USRI, + .USET USRO,[.SSNAM,,MSNAM] ;SET SYSTEM NAME TO MASTER SYSTEM NAME + MOVEI D,21 + MOVEM D,UINTWD(U) + PUSHJ P,ELECTRON +ALOAD2: PUSHJ P,ALD + .USET USRI,[.RMEMT,,HIGH] +CLSU: .CLOSE UTOC, + .CLOSE UTIC, + POPJ P, + +CKSER: PUSHJ P,CLSU + TERR (SIXBIT /CKS/) + +EOF: PUSHJ P,CLSU + TERR (SIXBIT /EOF/) + + +KILL: JUMPE U,ERR + TLNN F,LTF ;DELETE SYMBOLS + JRST,KILLA + PUSHJ P,EVAL + JRST KILL1 + MOVEI D,DELO_-16. ;DELETE OUTPUT + TLNE F,CCF + MOVEI D,DELI_-16. ;NO INPUT OR OUTPUT + DPB D,[(420200+A)] +KILRET: JRST,RET + +KILLA: TLNN F,QF + TLNN F,CCF + JRST ERR + PUSHJ P,ELECTRON + JRST ALTL2 + +KILL1: MOVE A,ESTU ;REMOVE UNDEFINED SYMS + JUMPGE A,UNDEF +KILL2: PUSHJ P,EVAL0 + JRST RET + PUSHJ P,REMUN + JRST KILL2 + +REMUN: MOVE B,[(2)2] ;REMOVE ONE UNDEFINED SYM + ADDB B,ESTU + MOVE C,-2(B) + MOVEM C,(A) + MOVE C,-1(B) + MOVEM C,1(A) + POPJ P, + +DS: MOVE A,DSSAV ;$$^C + MOVEI D,DELO_-16. + DPB D,[420200,,(A)] + MOVE D,1(A) + PUSHJ P,LOOK + JRST RET + JRST RET + +ELECTRON: PUSH P,W2 + HLRE D,JOBSYM(U) + HRRZ W2,JOBSYM(U) + HRLS W2 + SUB W2,D + MOVSS W2 ;JOBSYM+NSYMS,,JOBSYM + ADD D,SYMTOP + BLT W2,-1(D) ;MOVE EVERTHING DOWN + HLRE W1,JOBSYM(U) + HRRZS A,JOBSYM(U) ;REDUCE LENGTH TO ZERO +RELOC: MOVE D,[-NINFP,,USRS] ;A HAS POINT WHERE MOVE OCCURED, W1 # REGS +REL1: HRRZ W2,JOBSYM(D) + CAIE U,(D) + CAMGE W2,A + JRST .+2 + ADD W2,W1 + HRRM W2,JOBSYM(D) + ADDI D,USRLNG-1 + AOBJN D,REL1 + ADD W1,SYMTOP + HRRZM W1,SYMTOP + HRRZS W1 + LSH W1,-10. + .CORE 1(W1) + JFCL + MOVE D,JOBSYM(U) + MOVEM D,PRGM + POP P,W2 + POPJ P, + +HOLE: PUSH P,W2 ;CALLED WITH -#REGS,,0 IN A + HLRE C,JOBSYM(U) ;GOBBLE SYMS + MOVNS C ;NO. OF SYMS CURRENTLY THERE + ADD C,JOBSYM(U) + PUSH P,A ;TOP OF CURRENT SYM TABLE + HLRES A + MOVNS A + HRRZ D,SYMTOP ;NUMBER ADDITIONAL WANTED + ADD D,A + HRRZS D + LSH D,-10. + .CORE 1(D) ;MAKE ROOM (ALSO HACKED AT RELOC) + JRST HOLE2 + POP P,W1 + HLLZS W1 + ADDM W1,JOBSYM(U) +HOLE1: HRRZ D,SYMTOP + SOS D + HRRM A,HOLPPX ;+#REGS NEW + MOVEI W1,(SETZ D) ;400000+SYMTOP-1 (AVOID PDL OV) + SUB W1,C + HRL D,W1 ;400000+#REGS TO MOVE-1,,SYMTOP-1 + SKIPGE D +HOLPOP: XCT HOLPPX ;MOVE TOP OF SYM TAB UP BY LH(A) + JUMPL D,.-1 + MOVE W1,A + HRRZ A,JOBSYM(U) + JRST RELOC + +HOLE2: PUSHJ P,CLSU ;CLOSE INPUT CHANNELS + 7TYPE [ASCIZ /NO CORE FOR SYMBOLS/] + JRST ERR + +TAG: TLNN F,LTF + JRST NCOM ;:SYM COMMAND FORMMAT + TLNE F,CF ;DEFINE SYMBOL AS OPEN REGISTER + JRST SETNAM ;SYM $: SET PRGM NAME + MOVE C,LLOCO + TLNN F,FAF ;DEFINE SYM AS VALUE< + HRRZM C,DEFV +ADEFIN: JUMPE U,JERR + PUSHJ P,EVAL + JRST DEF1 + JRST DEF2 ;REDEFINE +DEF1: MOVSI A,-2 + PUSHJ P,HOLE + MOVE A,C +DEF2: MOVE D,DEFV + MOVEM D,1(A) + MOVSI D,GLOBAL + IORB D,SYM + MOVEM D,(A) + MOVE A,ESTU + +DEF3: JUMPGE A,RET ;PATCH IN UNDEFINED SYM + MOVE D,SYM + CAME D,(A) + JRST DEF4 + MOVE B,DEFV + SKIPGE 1(A) + MOVNS B + PUSH P,A + HRRZ A,1(A) + PUSHJ P,FETCH + JRST ERR + ADD B,D + HRRM B,D + PUSHJ P,DEP + POP P,A + PUSHJ P,REMUN +DEF4: ADD A,[(2)2] + JRST DEF3 + +CSMI: JUMPE U,JERR ;LOAD SYMS FROM FILE + PUSHJ P,RRFLB + MOVEI A,6 + HRLM A,IFILE + TLNN F,CCF + PUSHJ P,ELECTRON + TSOPEN UTIC,IFILE +CSMI1: MOVEI W1,0 ;CLEAR COUNT + PUSHJ P,GTWD + CAME B,[JRST 1] + AOJA W1,.-2 +CSMI3: PUSHJ P,GTWD + JUMPGE B,CSMIF1 +CSMI2: MOVE D,B + CAMGE B,[-BUFL,,] + HRLI B,-BUFL + HRRI B,UBUF + MOVE A,B + .IOT UTIC,A + JUMPL A,EOF + HLRS B + HRLI B,-1(B) + SUBM D,B + JUMPL B,CSMI2 + PUSHJ P,GTWD + JRST CSMI3 + +CSMIF1: PUSHJ P,CSMIF + JRST ALTL2 + +HWRDS: MOVEI A,HLFW-TFLOT ;H +SFLOT: ADDI A,TFLOT-SATP ;F +RATP: ADDI A,SATP-ITEXO ;T +TEXSET: ADDI A,ITEXO-PIN ;" +SYMBOL: ADDI A,PIN-FTOC ;S +CON: ADDI A,FTOC ;C +SET0: MOVEI C,0 + JRST SET + + ;ALTMODE S + +ALTS: TRNN F,Q2F ;IF NUMBER NOT TYPED AFTER ALTMODE, + JRST SYMBOL ;THEN SET TYPEOUT TO SYMBOLIC + MOVEI A,SQOZO + TLNN F,QF ;IF NO ARG TYPED, + JRST SET0 ;THEN SET TYPEOUT MODE TO SQUOZE + ;NAME$NS <=> SQUOZE N,NAME + LDB D,[20400,,WRDO2] ;GET FLAGS (INTERPRETED IN OCTAL) + ROT D,-4 ;ROTATE INTO FLAGS FIELD + ADD D,SYM ;ADD IN THE ACTUAL SQUOZE + JRST MASK2 + +RELA: TLNE F,QF ;R + JRST,BASECH + MOVEI A,PADSO-TOC +ABSA: ADDI A,TOC ;A + JRST SET1 + +SDEC: ADDI A,2 ;D +SOCT: ADDI A,10 ;O + SKIPA C,[2] +SET1: MOVEI C,1 +SET: HRRZM A,SCH(C) + HRRZM A,SCHMM(C) + MOVEI D,1 + MOVEM D,FRASE1 + JUMPGE F,QUAN3 ;FLUSH CF,CCF,AND WRD2 + HRRZM A,SCHM(C) + JRST RET + +SETNAM: JUMPE U,JERR + MOVE A,JOBSYM(U) +SET2: JUMPGE A,UNDEF + MOVE D,(A) + ADD A,[(2)2] + CAME D,SYM + JRST SET2 + MOVEM A,PRGM + JRST RET + +MULT: TLOA F,PTF+MLF ;* +DIVD: TLO F,DVF+PTF ;SINGLE QUOTE + JRST L1 + +ASSEM: JRST PLUS ;# +MINUS: TLO F,MF +PLUS: TLO F,PTF + JRST LIS2 + +LPRN: CAML P,[(LPDL-32)] + JRST,ERR + PUSH P,F ;RECURSE FOR OPEN PAREN + PUSH P,WRD + PUSH P,FRASE + PUSH P,FRASE1 + AOS,PRNC + JRST,LISA + +INDIRECT: MOVSI C,(@) + IORB C,WRD + TLO F,QF + JRST,LIS2 + +ACCF: TLNN F,COMF + HRRM D,COMWDX ;COMMA + MOVE A,D + HLLZS D + LDB W1,[(410300)WRD] + IDIVI W1,7 + LSH A,27(W1) + ADD D,A + ADD D,WRD + TLOE F,COMF +COMWD: XCT COMWDX ;FOR THE SAKE OF PURITY + MOVEM D,WRD + JRST SPACE+1 + +SPACE: TLNE F,QF + TLO F,TIF +SPAC1: TLZ F,MF+PTF + JRST,LIS1 + +OCON: TLZE F,CF ;] + JRST ISTRIN + TROA F,LF1+CF1 ;OPEN AS CONSTANT +OSYM2: TRZ F,CF1 ;OPEN SYMBOLICALLY + TROA F,LF1 +SUPTYO: TLOA F,STF ;SUPPRESS TYPEOUT +SLASH: TLZ F,STF ;TYPE OUT REGISTER + SKIPE PRNC + JRST ERR + PUSH P,KILRET + TLNE F,QF + PUSHJ P,PLOC ;QUANTITY TYPED + HLRZM D,LLOCO + TLZN F,CF +SLAS1: HRRZM D,LLOCO + JRST LI2 + +OSYM: TLZN F,CF + JRST OSYM2 + PUSHJ P,SETISB +JSTR1: PUSHJ P,IIN + CAIL D,40 + CAILE D,140 + JRST ISTR2 + PUSHJ P,SASEM + JRST JSTR1 + + +RPRN: MOVS D,WRD ;) + SOSGE,PRNC + JRST,ERR + POP P,FRASE1 + POP P,FRASE + POP P,WRD + POP P,F + TLO F,QF + TLNE F,PTF + TLOE F,SF + JRST,RPRN1 + MOVEM D,SYL + JRST,L1RPR +RPRN1: ADDB D,WRD + JRST,L1RPR-1 + +ICON: TLZE F,CF + JRST IKON + PUSHJ P,DEPRA ;\ + JRST SLAS1 + +PLOC: CAMN D,LLOC + POPJ P, + AOS A,PLCR ;ADVANCE RING POINTER + CAIL A,NLEVS + SETZB A,PLCR + EXCH D,LLOC + MOVEM D,LOCBF(A) + MOVE D,LLOC + HRRZS LLOC + POPJ P, + +TAB: JUMPL F,OEFADR ;OPEN EFFECTIVE ADDRESS + TLZE F,CF + MOVSS D + PUSHJ P,PLOC + JRST LI1B + +VARRW: SOS LLOC ;^ +LI1B: SOS LLOC + +LINEF: PUSHJ P,DEPRA ;NEXT REGISTER + TLZN F,CF + JRST LI0 +LI1A: MOVE A,PLCR ;MOVE BACK IN RING BUFFER + MOVE D,LOCBF(A) + SOSGE A + MOVEI A,NLEVS-1 + MOVEM A,PLCR + HRRZM D,LLOC + JRST (C) +LI0: PUSHJ P,CRF +LI1C: AOS D,LLOC +LI1: HRRZM D,LLOC + HRRZM D,LLOCO + PUSHJ P,PAD + MOVEI D,"/ ;SLASH + TLNE F,STF + MOVEI D,"! ;EXCLAMATION MARK + PUSHJ P,TOUT +LI2: TLZ F,ROF + PUSHJ P,LCT + MOVE A,LLOCO + PUSHJ P,FETCH + JRST ERR + TLO F,ROF + TLNE F,STF + JRST DD2 + JRST CONSYM + +CARR: PUSHJ P,DEPRA + MOVEI C,LI1B + TLZE F,CF + JRST LI1A + JRST DD1 + +DEPRA: TLNE F,ROF ;IF REGISTER IS BEING CHANGED + TLNN F,QF ;REMOVE ALL PREVIOUS UNDEFINED + JRST DEPRS ;SYMBOL REFERENCES TO IT + MOVE A,ESTU + MOVEM W1,ESTU +DEPRA2: JUMPGE A,DEPRS + HRRZ C,1(A) + CAMN C,LLOCO + PUSHJ P,REMUN + ADD A,[(2)2] + JRST DEPRA2 + +RETYP: JUMPL F,RETY1 + TLNE F,CF + JRST RETY2 + IRPS A,,SCH AR ODF + PUSH P,A + TERMIN +RETY2: MOVE A,[SCHMM,,SCH] + BLT A,ODF + PUSHJ P,CONSYM + TLNE F,CF+CCF + POPJ P, + IRPS A,,ODF AR SCH + POP P,A + TERMIN + POPJ P, + +RETY1: MOVE A,[SCHMM,,SCHM] + BLT A,ODFM + JRST RETY2 + +EQUAL: TROA F,LF1+CF1 ;= +PSYM: TRZ F,CF1 ;@ + TRO F,LF1 + JRST CONSYM + +SQOZO: +R50PNT: MOVEM D,LWT ;AMPERSANT + LSH D,-36 + TRZ D,3 + PUSHJ P,TOC + PUSHJ P,TSPC + MOVEI W1,LWT + JRST SPT + +BASECH: MOVEI C,BASC1 + JRST L211 ;EVAL ARG + +BASC1: SOJLE D,ERR + MOVEI A,1(D) + HRRZM A,ODF + HRRZM A,ODFMM + JUMPGE F,LISA + HRRZM A,ODFM + JRST RET + +AAGO: TLO F,QF\CCF + SKIPE TOKTRM + JRST AGO2 ;NO ARG + PUSHJ P,RONUM + JRST AGO2 + MOVE D,B +AGO: HRLI D,(JRST) + TLC F,QF+CCF + TLCN F,QF+CCF + MOVEM D,STARTA(U) + TLOE F,QF + JRST HGO +AGO2: SKIPE D,STARTA(U) +XEC: TLNN F,QF ;X + JRST ,ERR +HGO: MOVEM D,34SAV + PUSHJ P,QJERR + MOVEI A,0 + EXCH A,UINTWD(U) + JUMPE A,ERR ;PROG RUNNING + MOVEM A,XINTWD(U) + TLZ F,LTF + MOVE D,PPC(U) + MOVEM D,XECPC(U) + AOS XCRFSW +XEC1B: MOVEI D,34 + HRRM D,PPC(U) +XEC1A: AOS D,XCRFSW + CAIE D,1 ;IF SWITCH WASN'T SET, + PUSHJ P,CRF ;THEN TYPE CRLF + PUSHJ P,INSRTB + TLNE F,LTF + JRST PROCE2 ;^P + PUSHJ P,TTYLEV + JRST RESTORE ;$X,$P OR ANY RANDOM INT PROCEED + +CTLP: TLOA F,LTF +PROCED: TLZ F,LTF + MOVE A,UINTWD(U) + SOS A + PUSHJ P,AUTOP1 + TLNN F,QF +PROCD1: MOVEI D,1 + AOS XCRFSW ;INCREMENT CRF SWITCH IN CASE OF ERROR + PUSHJ P,QJERR + MOVEI A,0 + EXCH A,UINTWD(U) + TLNE F,LTF + JUMPE A,PROCD2 ;^P ON RUNNING PROGRAM + JUMPE A,PRUN ;RUNNING, GIVE IT TTY + MOVSI B,OIPBIT + SKIPLE INCNT(U) + IORM B,PPC(U) + JUMPL A,XEC1A ;STOPPED BY RANDOM INT, START IT BACK UP + CAIN A,21 + JRST PROCD2 ;NOT PROCEEDABLE + IMULI A,BPL + ADDI A,-BPL(U) + MOVEM D,B1CNT(A) + MOVE A,BPLOC(U) + PUSHJ P,FETCH + JRST ERR + MOVEM D,BPLOC(U) + MOVSI A,(.BREAK 15,) + TLZ D,777740 + IOR D,A + MOVEM D,34SAV + JRST XEC1B + +ONEPRO: JUMPL F,ERR + TLZN F,QF + MOVEI D,1 + SKIPL D + MOVEM D,INCNT(U) + MOVSI D,400 ;MAR INT BIT + IORM D,PPC(U) ;PUT IT IN + TLNN F,CF + JRST PROCED + JRST CTLP ;NO TTY + +PROCE2: .ACCESS USRO,[34] + MOVE D,[-3,,34SAV] + .IOT USRO,D + MOVE D,PPC(U) + .USET USRI,[.SUPC,,D] + .USET USRI,[.SUSTP,,[0]] + JRST DD1 + +PROCD2: EXCH A,UINTWD(U) + JRST ERR + +PRUN: SKIPE FURN(U) + JRST PROCD2 + PUSHJ P,CRF + PUSHJ P,TTYLEV + SETZM SARS + JRST SLP + +TEXO: TLNE F,CF + JRST TEXO2 + MOVEM D,LWT ;DOUBLE QUOTE +ITEXO: SETZM TEMT + MOVE W1,D + TDNE W1,[-1,,777400] + JRST TEXO1 + SKIPN TEXOF + LSH W1,1 +TEXO1: MOVEI D,0 +TEXO10: JUMPE W1,CPOPJ +TEXO11: XCT TEXCT2 +TEXO12: SKIPN TEMT + JUMPE D,TEXO1 + SETOM TEMT + ADD D,TEXOF + PUSHJ P,TOUT + JRST TEXO1 + + +ASLASH: TLZE F,CF + JRST INFO + TLNN F,QF + JRST QUESTN + CTYPE "/ + JRST SLASH + +INFO: MOVE A,[SIXBIT /INFO/] + MOVEM A,SYSN2 + JRST CCTLH + +IKON: MOVEM D,LWT + PUSHJ P,EASETU ;SET UP AC'S FOR EFF ADR SEARCH + PUSHJ P,EFFEC0 + JRST ERR + MOVE A,D + PUSHJ P,FETCH + JRST ERR + JRST OVRD2 + +OEFADR: PUSHJ P,EASETU ;$$\ + PUSHJ P,EFFEC0 + JRST ERR + PUSHJ P,PLOC + JRST LI1B + +;INSERT BREAKPOINTS + +INSRTB: MOVEI B,B1ADR(U) + MOVE W1,[.BREAK 1,] +INSRT1: SKIPE A,(B) + PUSHJ P,FETCH + JRST INSRT2 + MOVEM D,B1INS-B1ADR(B) + TLZ D,777740 + IOR D,W1 + PUSHJ P,DEPCLA +INSRT2: ADD W1,[0 1,] + ADDI B,BPL + CAIE B,BPEND(U) + JRST INSRT1 + POPJ P, + +;REMOVE BREAKPOINTS + +REMOVB: MOVEI B,B1ADR(U) +REMOV1: SKIPE A,(B) + PUSHJ P,FETCH + JRST REMOV2 + LDB W1,[271500,,B1INS-B1ADR(B)] + DPB W1,[271500,,D] + PUSHJ P,DEPCLA +REMOV2: ADDI B,BPL + CAIE B,BPEND(U) + JRST REMOV1 + POPJ P, + +BPS: PUSHJ P,QJERR + TLZE F,QF + JRST,BPS1 + TRZE F,Q2F + JRST,BPS2 + JUMPGE F,BPS6 + MOVEI D,B1ADR+1(U) + HRLI D,-1(D) + SETZM B1ADR(U) + BLT D,BPEND-1(U) + JRST DD1 + +BPS6: MOVE D,UINTWD(U) + CAIL D,1 + CAILE D,10 + JRST ERR + MOVEI A,0 + TRO F,BPLF + JRST BPS7 + +BPS1: TRZN F,Q2F + JRST,BPS3 + MOVE A,D + TRO F,BPLF +BPS2: MOVE D,WRD2 + CAIL D,1 + CAILE D,11 ;ALLOW $9B FOR HACKS IN USER AREA + JRST,ERR +BPS7: IMULI D,BPL + ADDI D,B1ADR-BPL+770000(U) + TRZN F,BPLF + JRST,MASK2 + SUBI D,770000 + EXCH A,D + JRST BPS5 +BPS3: MOVEI A,B1ADR(U) +BPS4: HRRZ C,(A) + CAIE C,(D) + SKIPN C + JRST,BPS5 + ADDI A,BPL + CAIGE A,BPEND(U) + JRST,BPS4 + JRST,ERR + +BPS5: SKIPN FURN(U) + SKIPN UINTWD(U) + JRST ERR ;DON'T INSERT BPTS WHEN RUNNING + MOVEM D,(A) + SETZM,1(A) + SETZM,2(A) +AUTOP: SUBI A,B1ADR(U) + IDIVI A,BPL +AUTOP1: MOVEI B,1 + LSH B,(A) + ANDCAM B,AUTOPI + TLNE F,CCF + IORM B,AUTOPI + POPJ P, + + + +DEPRS: MOVEM D,LWT +DEPR: MOVE A,LLOCO ;QUAN TYPED IN REGIS EXAM + TLZE F,ROF + TLNN F,QF + POPJ P,0 +DEPCLA: TLZ A,-1 ;LH (A) MUST BE CLEAR, THIS IS ENTRY TO DO IT +DEP: SKIPE SYSSW + JRST DEP0 + TRC A,760000 + TRCN A,760000 + JRST DEP1 + SKIPE DDTSW + JRST DEP4 + PUSHJ P,QIJERR + .ACCESS USRO,A + HRROI W4,D + .IOT USRO,W4 + POPJ P, + +DEP0: SKIPL SYSDPS + JRST ERR + MOVSI W4,D + HRR W4,A + .SETLOC W4, + POPJ P, + +DEP4: CAML A,HIGH + JRST ERR + MOVEM D,(A) + POPJ P, + +DEP1: TRC A,10000 + TRCE A,10000 + JRST DEP2 + MOVEM D,-770000(A) + POPJ P, + +DEP2: PUSHJ P,QIJERR + ANDI A,177 + CAMLE A,MAXUSET + JRST ERR + DPB A,[220700,,DEP3] + .USET USRI,DEP3 + POPJ P, +DEP3: SETZ F,D + +FETCH: HRRZ D,A + SKIPE SYSSW + JRST FETCHA + CAIL D,760000 + JRST FETCH1 + SKIPE DDTSW + JRST FETCHB + CAML D,HIGH + JRST FETCH2 +FTCH2A: .ACCESS USRI,D + HRROI W4,D + .IOT USRI,W4 + JRST CPOPJ1 + +FETCH2: SKIPE UCHNLO + .USET USRI,[.RMEMT,,HIGH] + CAML D,HIGH + POPJ P, + JRST FTCH2A + +FETCH1: TRC A,10000 + TRCE A,10000 + JRST FETCH3 + MOVE D,-770000(A) + JRST CPOPJ1 + +FETCH3: ANDI A,177 + CAIL A,100 + CAILE A,157 + CAMG A,MAXUSET +FETCH6: SKIPN UCHNLO + POPJ P, + DPB A,[220700,,FETCH4] + .USET USRI,FETCH4 + JRST CPOPJ1 + + +FETCHA: MOVS D,A + HRRI D,D + .GETLOC D, + JRST CPOPJ1 + +FETCHB: CAML A,HIGH + JRST ERR + MOVE D,(A) + JRST CPOPJ1 + +FIRARG: MOVEM D,DEFV + TLO F,FAF + JRST,ULIM1 +ULIM: TLO F,SAF + HRRZM D,ULIMIT +ULIM1: TLNE F,CF + JRST OVRD + TLNN F,QF + JRST,ERR + JRST,LISB + +LOOK: SETZB W1,B + JUMPE U,LOOK1 + MOVSI W1,DELI+DELO + MOVE A,PRGM + MOVSI W2,PNAME + SKIPGE D + MOVSI B,400000 + MOVE C,[444400,,ENDT] + MOVEM C,TEM +LEND1A: ILDB C,TEM + MOVEM C,LLUP1 + JRST LLUP+1 + +ENDT: SKIPL A ;LOOK AT REST OF SYM TABLE + MOVE A,JOBSYM(U) ;THEN LOOK THRU BOTTOM + + CAMN A,PRGM ;UP TO CURRENT PRGM + MOVE A,ISYMP ;THEN THRU INITAL SYMS + + CAMN A,ISYME ;STOP AT END OF INITIAL SYMS + TLZA W1,-1 ;EXIT, SIGNAL NOT FOUND ANYTHING + +LLUP: ADD A,[2,,2] + XCT LLUP1 ;END TEST + JRST LEND1 + CAML D,1(A) + CAML B,1(A) + JRST LLUP + HLLZ C,W1 + TDNN W2,(A) ;PRGM NAME + TLOA W1,LOCAL ;STOP LOOKING FOR LOCALS + TDNE C,(A) ;SKIP ON BAD BITS SET (DELO,DELI, MAYBE LOCAL) + JRST LLUP ;WRONG FLAVOR SYM + HRR W1,A + CAMN D,1(A) + JRST SPT ;EXACT MATCH + MOVE B,1(A) ;NEW BEST SO FAR + JRST LLUP +LEND1: AOS C,TEM + XCT (C) + JRST LEND1A +LOOK1: MOVEM D,TEM + TRNE W1,-1 + SUB D,B ;SUBTRACT TO FIND REMAINDER OF SYMBOLIC QUAN + JRST CPOPJ1 + +MARSET: PUSHJ P,QJERR + TLNN F,FAF + JRST .+3 + MOVSS D + HRR D,DEFV + TLNN D,7 + HRLI D,6 + TLNN F,QF+FAF + JRST MARS1 + HRRZ A,D + CAML A,HIGH + JRST ERR + MOVEM D,MARCON + .USET USRI,[.SMARA,,MARCON] + JRST ALTL2 + +MARS1: SETZM MARCON + .USET USRI,[.SMARA,,MARCON] + JRST ALTL2 + + +CONSYM: MOVEM D,LWT +CONSM: TRNN F,LF1 +CONS1: JRST @SCH + TRNE F,CF1 + JRST, FTOC + ;VALUE TO BE TYPED IN D + +PIN: TRZ F,NAF+OPERF1+OPERF2 + TLC D,700000 + TLCN D,700000 + JRST INOUT + PUSHJ P,OPTYPE + MOVSI D,777000 + AND D,LWT + CAMN D,[.CALL] + JRST PCALL + CAMN D,[.OPER] + JRST POPER + JUMPE D,PI3+1 + TRNN F,1RF +PI3.05: PUSHJ P,LOOK +PI3.1: TROA F,NAF + JRST HLFW +PI3: PUSHJ P,TSPC + LDB D,[(270400)LWT] ;AC + JUMPE D,PI4 + PUSHJ P,PAD +PI3A: XCT ",,CRF +PI4: TRNE F,OPERF2 + POPJ P, +PI4A: MOVE W1,LWT + MOVEI D,"@ ;AT SIGN + TLNE W1,20 ;CHECK FOR INDIRECT BIT + PUSHJ P,TOUT +PI5: HRRZ D,LWT + LDB W1,[(331100)LWT] + CAIL W1,240 + CAILE W1,247 + PUSHJ P,SPAD + PUSHJ P,PADS3A +PI7: TRZ F,NAF + LDB A,[(220400)LWT] ;INDEX REGISTER CHECK + JUMPE A,PADS1 +PI7.1: XCT "(,CRF + move d,a + PUSHJ P,PAD + MOVEI D,") + JRST TOUT ;EXIT + +POPER: HRLOI D,777037 + TROA F,OPERF1 +PCALL: MOVSI D,777740 + AND D,LWT + PUSHJ P,LOOK + JRST PI4.1 + MOVSI D,777000 + AND D,LWT + JRST PI3.05 +PI4.1: TROE F,OPERF1+OPERF2 + JRST PI3 + PUSHJ P,TSPC + JRST PI4A + +HLFW: TRO F,NAF + HLRZ D,LWT + PUSHJ P,PAD + XCT ",,CRF + XCT ",,CRF + SKIPA D,LWT +SPAD: AOS (P) +PAD: ANDI D,777777 ;PRINT ADDRESS + JRST @AR ;PADSO OR PAD1 +PADSO: JUMPE D,TOC2+1 + PUSHJ P,LOOK +PADS1: POPJ P,0 + MOVE W2,1(W1) + CAIGE D,100 + CAIGE W2,60 + JRST,PADS3 + MOVEM D,TEM + JUMPE W1,PAD1 + PUSHJ P,SPT +PADS3D: XCT "+,CRF +PADS2: HRRZ D,TEM +PAD1: JRST TOC ;EXIT + +PADS3: MOVE D,TEM +PADS3A: TRNE F,NAF + CAIGE D,776000 + JRST PADS3C +PADS3B: MOVNM D,TEM +PADS4: XCT "-,CRF + JRST PADS2 + +INOUT: TDC D,[(,-1)400000] + TDCN D,[(,-1)400000] + JRST PADS3B + HLRZ A,D + CAILE A,(CONO 774,@) + JRST HLFW + AND D,[(700340)] + PUSHJ P,LOOK + JRST,.+2 + JRST,HLFW + PUSHJ P,TSPC + MOVE D,LWT + AND D,[(77400)] +INOUT1: JUMPE D,PI4 ;USED BY "WORD" + PUSHJ P,LOOK ;LOOK FOR DEVICE NUMBER + JRST,PI3A + MOVE D,TEM + LSH D,-30 + PUSHJ P,TOC + JRST,PI3A +PADS3C: CAIL D,B1ADR+770000(U) + CAIL D,BPEND+770000(U) + JRST TOC + SUBI D,B1ADR+770000(U) + IDIVI D,BPL + PUSH P,D + XCT "$,CRF + POP P,D + ADDI D,"1 + PUSHJ P,TOUT + MOVEM W1,TEM + MOVEI D,"B + PUSHJ P,TOUT + JUMPE W1,CPOPJ + JRST PADS3D + +MASK: TLNE F,QF + JRST MASK1 + MOVEI D,MSK+770000 +MASK2: MOVEI C,1 + MOVEM C,FRASE1 + JRST QUAN1 + +MASK1: MOVEM D,MSK + JRST RET + +EASETU: .ACCESS USRI,[0] + MOVE A,[-20,,AC0] + .IOT USRI,A + POPJ P, + +EFFEC: JUMPE U,JERR + TLO F,LTF + SKIPN SYSSW + SKIPE DDTSW + JRST AWORD + PUSHJ P,EASETU + HRRZ D,D +AWORD: SKIPA C,INOUT1 ;JUMPE D, +NWORD: MOVSI C,(JUMPN D,) + HLLM C,SEAR2 +SEARC: JUMPE U,JERR + TLZN F,QF + JRST ERR + SETOM BADR + SETCAM D,WRD + MOVE D,ULIMIT + TLNE F,SAF + TLO F,QF + PUSHJ P,SETUP1 + PUSHJ P,CRF + PUSHJ P,MORFIN +SEAR1: HRRZ D,BADR + XORI D,(A) + TRNN D,777600 + JRST SEAR1A + SKIPN SYSSW + JRST SEAR1C + MOVS D,A + HRRI D,D + .GETLOC D, + JRST SEAR1D + +SEAR1C: SKIPE DDTSW + JRST SEAR1E + PUSH P,A + ANDI A,<-1>#177 + HRRZM A,BADR + .ACCESS USRI,A + MOVE D,[-BUFL,,UBUF] + .IOT USRI,D + POP P,A + JRST SEAR1 + +SEAR1A: SKIPA D,UBUF(D) +SEAR1E: MOVE D,(A) +SEAR1D: TLNE F,LTF ;CHECK FOR EFFECTIVE ADDRESS SEARCH + JRST SEAR2B +SEAR1B: EQV D,WRD + AND D,MSK +SEAR2: JUMPE D,SEAR3 + TRNN A,77 +SEAR2A: PUSHJ P,LISTN + AOBJN A,SEAR1 + JRST ALTL4 + +SEAR2B: PUSHJ P,EFFEC0 + JRST SEAR4 + EQV D,WRD + ANDI D,777777 + JRST SEAR2 + +SEAR3: PUSHJ P,FETCH + JRST ERR + MOVEM D,LWT ;SET $Q FROM CONTENTS OF LOCATION + MOVEM A,TEM2 + MOVEM A,D + HRRZM A,LLOCO ;UPDATE CURRENT LOCATION + PUSHJ P,PLOC ;ADVANCE RING POINTER + PUSHJ P,PAD ;PRINT ADDRESS + XCT "/,CRF + PUSHJ P,LCT + MOVE D,LWT ;GET $Q AS STORED ABOVE + PUSHJ P,CONSYM + PUSHJ P,CRF + PUSHJ P,MORFLS + JRST ALTL2 +SEAR4: MOVE A,TEM2 + JRST, SEAR2A + +EFFEC0: MOVEM A,TEM2 ;CALLED BY SEARCH AND $\ + SKIPN SYSSW + SKIPE DDTSW + JRST EFFEC3 + MOVEI C,100 + MOVEM C,TEM +EFFEC1: MOVE C,D + LDB A,[(220400)D] + JUMPE A,EFFEC2 + HRRZ D,AC0(A) + ADD D,C +EFFEC2: HRR A,D + TLNN C,20 ;INDIRECT BIT CHECK + JRST EFFEC3 + SOSE TEM + PUSHJ P,FETCH + JRST EFFEC4 + JRST EFFEC1 + +EFFEC3: AOS (P) +EFFEC4: MOVE A,TEM2 + POPJ P, + +SETUP: TLO F,LTF ;ZERO +SETUP1: MOVEI D,1(D) + TLNN F,QF +SETUP2: JRST SETUP3 +SETUP4: HRRM D,ULIMIT + HRRZ A,DEFV + TLNN F,FAF + MOVEI A,0 + SKIPE HIGH + CAMG D,HIGH + CAML A,ULIMIT + JRST ERR + MOVEM A,DEFV + MOVE C,A + SUB C,ULIMIT + HRLM C,A + POPJ P,0 + +SETUP3: SKIPE UCHNLO + .USET USRI,[.RMEMT,,HIGH] + HRRZ D,HIGH + SKIPE SYSSW + MOVEI D,60000 + JRST SETUP4 + +ZERO: PUSHJ P,QJERR + SKIPE FURN(U) + JRST JERR + JUMPGE F,ERR + SETZM UBUF + MOVE C,[UBUF,,UBUF+1 + BLT C,UBUF+BUFL-1 + PUSHJ P,SETUP + TLZ A,-1 + .ACCESS USRO,A +ZERO1: HRRI D,UBUF + HRL D,C + CAMGE C,[-BUFL + HRLI D,-BUFL + .IOT USRO,D + ADDI C,BUFL + JUMPL C,ZERO1 + JRST DD1 + +FTOC: +TOC: HRRZ W1,ODF + CAIN W1,12 + JRST, TOC4 +TOCA: LSHC D,-43 + LSH W1,-1 ;W1=D+1 +TOC1: DIVI D,@ODF + HRLM W1,0(P) +TOC3: JUMPE D,TOC2 + PUSHJ P,TOCA +TOC2: HLRZ D,0(P) + ADDI D,"0 +CJTOUT: JRST TOUT ;DOES POPJ TO TOC2 OR EXIT + +TOC4: MOVM W1,D + JUMPGE D,TOC5 + XCT "-,CRF +TOC5: MOVEI D,0 + PUSHJ P,TOC1 +TPER: MOVEI D,". + JRST TOUT + +SPT: MOVE D,CJTOUT +.SPT: MOVEM D,SPTS + MOVE D,0(W1) ;SYMBOL PRINT + MOVEM W1,DSSAV + TLZ D,740000 +SPT1: IDIV D,[50*50*50*50*50] + PUSHJ P,SPT2 + MOVE D,W1 + IMULI D,50 + JUMPN D,SPT1 + POPJ P, + +SPT2: ADDI D,260-1 + CAILE D,271 + ADDI D,301-272 + CAILE D,332 + SUBI D,334-244 + CAIN D,243 + MOVEI D,256 + XCT SPTS + POPJ P, + +TTYRET: SKIPN DDTTY + .DTTY USRI, + POPJ P, + .RESET TYIC, + SETOM DDTTY + POPJ P, + +TTYLEV: MOVEM U,TTYUSR + SETZM DDTTY + .ATTY USRI, + TERR (SIXBIT /CFT/) + POPJ P, + +CPATCH: TLNN F,ROF + JRST ERR + MOVE D,WRD + MOVE A,LLOCO + TLNE F,QF + PUSHJ P,DEPRA + MOVE D,[SQUOZE 0,PATCH + PUSHJ P,SYME1 + JRST CPTCH2 +CPTCH3: MOVEM D,PATCHL(U) +CPTCH1: PUSHJ P,CRF + TRO F,PF + MOVE A,LLOCO + MOVEM A,CPTCHL + MOVEM A,CPTCHM + PUSHJ P,FETCH + JRST PERR + PUSH P,D + MOVE D,PATCHL(U) + PUSHJ P,LI1 + PUSHJ P,LCT + POP P,D + TLO F,QF+ROF + MOVEM D,WRD + PUSHJ P,CONSYM + JRST LIS1 + +CPTCH2: MOVE D,[SQUOZE 0,PAT + PUSHJ P,SYME1 + MOVEI D,50 + JRST CPTCH3 + +SYME1: MOVEM D,SYM + JRST EVAL + +PERR: TRZA F,PF +CEOP: TRZN F,PF + JRST ERR + PUSHJ P,CRF + TLNE F,ROF + JRST CEOP2 +CEOP3: MOVE A,CPTCHL + PUSHJ P,ERF + TLNE F,CF + PUSHJ P,FDEP + TLO F,LTF +CEOP1: AOS D,CPTCHL + HRLI D,(JUMPA 1,) + PUSHJ P,FDEP + TLZE F,LTF + JRST CEOP1 + SOS D,CPTCHM + EXCH D,LLOC + AOS D + EXCH D,PATCHL(U) + HRLI D,(JUMPA 3,) + TLNE F,CF + HRLI D,(JUMPA 2,) + PUSHJ P,FDEP + MOVE D,[SQUOZE 0,PATCH + MOVEM D,SYM + PUSHJ P,EVAL + JRST CPND + JRST CPD +CPND: MOVSI A,-2 + PUSHJ P,HOLE + MOVE A,C +CPD: MOVE D,PATCHL(U) + MOVEM D,1(A) + MOVSI D,GLOBAL + IOR D,SYM + MOVEM D,(A) + JRST DD1 + +CEOP2: MOVE D,WRD + MOVE A,LLOCO + TLNE F,QF + PUSHJ P,DEPRA ;WILL CLEAR ROF + TLNE F,ROF + SOS LLOC + JRST CEOP3 + +FDEP: PUSH P,D + PUSHJ P,LI1C + PUSHJ P,LCT + MOVE D,(P) + PUSHJ P,CONSYM + PUSHJ P,CRF + POP P,D + MOVE A,LLOC + TLO F,QF+ROF + MOVE W1,ESTU + JRST DEPRA + +UNPATCH: TLNN F,ROF + JRST ERR + MOVE A,LLOCO + PUSHJ P,ERF + MOVE A,D + TLC D,(JUMPA 2,) + TLNN D,-1 + JRST UNPA1 +UNPA2: PUSHJ P,ERF + PUSH P,D + PUSHJ P,CONSYM + POP P,D + TLO F,QF + JRST CARR +UNPA1: MOVEI W1,100. +UNPA3: PUSHJ P,ERF + TLC D,(JUMPA 1,) + TLNN D,-1 + SOJA A,UNPA2 + SOJL W1,ERR + AOJA A,UNPA3 + +ERF: PUSHJ P,FETCH + JRST ERR + POPJ P, + +PURIFY: MOVEI A,MINPUR+MINPUR_9+400000 + .CBLK A, + .VALUE [ASCIZ /:PURIFY LOST/] + ADDI A,1001 + CAIE A,400000+NPUR_9+NPUR + JRST PURIFY+1 + .VALUE [ASCIZ /:PURIFIED/] + JRST DDT + +INITF: SIXBIT / DSK/ + SIXBIT /.DDT./ + SIXBIT /(INIT)/ + +TYIF: 30,,(SIXBIT /TTY/) + SIXBIT /.DDT. TYI/ + +TYOF: 1,,(SIXBIT /TTY/) + SIXBIT /.DDT. TYO/ + +.ZZ7==. +LOC .ZZ6 + +SAVE: 0 + SETOM SARS + MOVEI P,PS + MOVE F,[SCHM,,SCH] + BLT F,ODF + SETZB F,F + JRST @SAVE + +.ZZ8==. +LOC .ZZ7 + +RESTORE: +RESTR1: .ACCESS USRO,[34] + MOVE D,[-3,,34SAV] + .IOT USRO,D + MOVE D,PPC(U) + .USET USRI,[.SUPC,,D] +RESTR2: SETZM SARS + .USET USRI,[.SUSTP,,[0]] +SLP: PUSHJ P,RTYIC ;GET CHAR FROM VALRET OR FILE + JRST SLP2 ;NONE AVAILABLE + CAIE D,^V ;IF NEXT CHARACTER CONTROL V, + JRST SLP2 ;... + PUSHJ P,IN ;THEN GOBBLE DOWN CHARACTER, + SETOM TTYFLG ;AND TURN ON TYPEON NOW +SLP2: SKIPE DDINT + JRST UBREAK + MOVSI D,200000 + .SLEEP D, ;YAWN + +CRF: JSR I4,TYOI + +LF: MOVEI D,12 ;LINE FEED + JRST TOUT + +TATP: CAIG D,44 + SKIPG D + JRST ERR + MOVEI C,36. + DPB D,[300600,,SATPP] + IDIV C,D + MOVEM C,SATPC + JRST RATP + +SATP: MOVEI C,44 + DPB C,[360600,,SATPP] + MOVE C,SATPC + MOVEM D,SATPT +SATPL: ILDB D,SATPP + PUSHJ P,TOC + PUSHJ P,TSPC + SOJG C,SATPL + POPJ P, + +CTLX: TLNE F,CF + JRST MURDER + PUSHJ P,QJERR ;DOES NOT ALLOW SYS + SKIPE UINTWD(U) + JRST ERR + .USET USRI,[.SUSTP,,[-1]] + .USET USRI,[.SIPIRQ,,[2]] + JRST RESTR2 + +MURDER: SKIPL F + JUMPE U,JERR ;ALLOW SYS + PUSHJ P,IIN + CAIE D,". + JRST ERR + JUMPL F,MASACR +JKILL2: PUSHJ P,MRDR +FNJOB: MOVEI U,USRS + SETOM TEM +FNJOB4: SKIPN UUNAME(U) + JRST FNJOB5 + MOVE A,JTIME(U) + CAMG A,TEM + JRST FNJOB5 + MOVEM A,TEM + MOVEM U,TEM1 +FNJOB5: ADDI U,USRLNG + CAIGE U,USREND + JRST FNJOB4 + SKIPGE TEM + JRST MASAC4 + MOVE U,TEM1 + PUSHJ P,TSPC + PUSHJ P,NJTYP + PUSHJ P,OPUSRN + JRST ALTL2 + +MRDR: MOVE D,UJNAME(U) + CAMN D,[SIXBIT /SYS/] + JRST MRDR3 + SETZM UCHNLO + .UCLOSE USRI, +MRDR2: SETZM UUNAME(U);(FOR TRANDL) ;CALLED BY OPUSRT + .TRANDL UUNAME(U) ;FLUSH ALL TRAN ENTRIES FOR THIS JOB + JFCL +MRDR3: SETZM UUNAME(U) + SETZM SYSSW + SETZM DDTSW + HRRI D,UUNAME(U) + HRLS D + AOS D + BLT D,USRLNG-2(U) ;DON'D WIPE OUT JOBSYM + JRST ELECTRON + +MASACR: PUSHJ P,MASAC1 +MASAC4: SETZB U,HIGH + JRST ALTL2 + +MASAC1: MOVEI U,USRS +MASAC2: SKIPN D,UJNAME(U) + JRST MASAC3 + MOVEI A,2 + HRLM A,UFUSR(U) ;MAKE SURE INPUT MODE, WIN FOR FOREIGN USERS + CAME D,[SIXBIT /SYS/] + .OPEN USRI,UFUSR(U) + JFCL + PUSHJ P,MRDR +MASAC3: ADDI U,USRLNG + CAIGE U,USREND + JRST MASAC2 + POPJ P, + +DISOWN: PUSHJ P,QIJERR ;REALLY $$^H OR :DISOWN + SETZM UCHNLO + .DISOWN USRI, + TERR (SIXBIT /DSN/) + PUSHJ P,MRDR2 + JRST FNJOB + +CTLD1: SKIPN GETTY + CTYPE "^ + SKIPE GETTY + CTYPE "_ + JUMPGE F,CTLD4 + SKIPN SUSMNG + SKIPN SYSSW + JRST CTLD3 + CTYPE "D + SETOM SYSDPS + CTYPE "? + JRST RET + +CTLD2: SETOM SUSMNG + SETZM SYSDPS + JRST ERR + +CTLD3: CTYPE "D + JRST ERR + +CTLD4: CTYPE "R + JRST ERR + +CTLY: PUSHJ P,QJERR + TLNE F,CCF ;"$$" TYPED? + JRST ALTCY ;GO MOVE SYMBOLS INTO USER'S CORE + PUSH P,D + TLNE F,CF + PUSHJ P,ELECTRON + HLLZ A,(P) + JUMPE A,ALTL2 + HLRE B,A + MOVNS B + ADD B,(P) + HRRZS B + CAML B,HIGH + JRST ERR + PUSHJ P,HOLE + HRRZ A,(P) ;GET ADDRESS OF BEGINNING OF AREA + .ACCESS USRI,A + POP P,A ;RESTORE WHOLE AOBJN POINTER + HRR A,C + .IOT USRI,A + JRST ALTL2 + +ALTCY: .ACCESS USRI,D ;ACCESS AOBJN POINTER + PUSH P,D ;STACK ACCESS POINTER + HRROI A,D ;SET UP IOT + .IOT USRI,A ;GET AOBJN POINTER + JUMPGE D,YERR1 ;OBVIOUSLY NOT AOBJN POINTER + PUSH P,D ;STACK AOBJN POINTER + HRRZ A,D ;GET LOW ADDRESS + HLRE D,D ;GET COUNT + MOVM D,D ;GET COUNT MAGNITUDE + ADD A,D ;GET THEORETIC HIGH ADDRESS + .USET USRI,[.RMEMT,,D] ;GET TOP OF WORLD + CAML A,D ;ADDRESS TOO HIGH? + JRST YERR2 ;YES + HLRE A,JOBSYM(U) ;ENOUGH ROOM FOR ADDITIONAL SYMBOLS? + HRRZ D,(P) + ADD D,A + JUMPL D,YERR2 ;NO + .ACCESS USRO,D ;AND TRANSFER THE SYMBOLS + MOVE D,JOBSYM(U) + .IOT USRO,D + HLRE A,JOBSYM(U) ;GET NEW SYMBOL COUNT + HLRE D,(P) + ADD D,A + HRLZ D,D ;TRUNCATE COUNT + HRR D,(P) ;GET NEW LOW ADDRESS + ADDI A,(D) + HRR D,A + .ACCESS USRO,-1(P) + HRROI A,D + .IOT USRO,A ;AND SAVE IT + SUBI P,2 ;UNWIND THE STACK + JRST ALTL2 + +YERR2: SOS P +YERR1: SOS P + TERR + + +DISP: ERR,,CTLA + L2,,DS + CTLD2,,L2 + CTLF,,L2 + ACTRLH,,TAB + LINEF,,ACTRLH + L2,,CARR + ONEPRO,,CTLO + CTLP,,VARRW ;CTL Q IS BLACK UP ARROW BUTTON + CTLD1,,CTLS + CTLT,,CTLU + TTYON,,L2 + CTLX,,CTLY + ERR,,CONTROL + CPATCH,,CEOP + ERR,,UNPATCH + SPACE,,SUPTYO + TEXO,,ASSEM + DOLLAR,,PERC + R50PNT,,DIVD + LPRN,,RPRN ;ALL DISPATCHES AFTER RPRN HAVE ARG EVALUATED + MULT,,PLUS + ACCF,,MINUS + PERIOD,,SLASH + NUM,,NUM + NUM,,NUM + NUM,,NUM + NUM,,NUM + NUM,,NUM + TAG,,RETYP + FIRARG,,EQUAL + ULIM,,ASLASH + INDIRECT,,ABSA + BPS,,CON + SDEC,,EFFEC + SFLOT,,AGO + HWRDS,,MARSET + ALTJ,,KILL + ALTL,,MASK + NWORD,,SOCT + PROCEDE,,QUAN + RELA,,ALTS + TATP,,ALTU + ALTV,,AWORD + XEC,,ALTY + ZERO,,OCON + ICON,,OSYM + VARRW,,PSYM + ERR,,ERR + ERR,,ERR + ERR,,ERR + ERR,,ERR + ERR,,ERR + ERR,,ERR + ERR,,ERR + ERR,,ERR + ERR,,ERR + ERR,,ERR + ERR,,ERR + ERR,,ERR + ERR,,ERR + ERR,,ERR + ERR,,ERR + ERR,,ERR + CONTROL,,CONTROL + ERR,,ERR + +NPUR==<.+1>/2000 ;PURE PAGE HACK + +INFORM [TOP OF PURE]\.-1 + +DDTEND: +IISYM: +IRP A,,[CLEARM,CLEARB,CONSZ,CONSO,DATAI,DATAO,BLKI,BLKO,CONI,CONO,$X] + SQUOZE 4,A + A +TERMIN + SQUOZE 4,.FILE + .FILE+770000 + +INISYE: INFORM [HIGHEST USED]\.-1 + +.ZZ9==. +LOC .ZZ8 + +CONSTANTS +VARIABLES + +.ZZ10==. +LOC .ZZ9 + +END DDT diff --git a/lars/ddt.218bin b/lars/ddt.218bin new file mode 100644 index 00000000..413e94db Binary files /dev/null and b/lars/ddt.218bin differ diff --git a/lars/ddt218.patch b/lars/ddt218.patch new file mode 100644 index 00000000..92638a9d --- /dev/null +++ b/lars/ddt218.patch @@ -0,0 +1,8 @@ +:job ddt218 +:load ddt 218bin +ald/jrst patch +patch/movei w1,0 pushj p,gtwd jumpe b,nload jrst ald0+2 +ddt/jrst patch+5 +patch+5/.close 1, movei u,0 jrst ddt+1 +y ddt 218bin +:kill