1
0
mirror of https://github.com/PDP-10/its.git synced 2026-03-29 19:08:01 +00:00
Files
PDP-10.its/lars/ddt.218
Lars Brinkhoff 22c0a5868d .login
2022-02-09 12:36:02 +01:00

5243 lines
88 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
TITLE DDT
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 <NBP-1>*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_<TYIC>+1_<COMC>
.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 -<NUMBER OF WORDS NEEDED>
MOVNS C,D ;NUMBER OF WORDS (STILL IN D WHEN GTSYS RETURNS)
ADDI C,(A) ;GET 1+<LAST LOCATION FOR SYMS>
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 <B&70>_-1+B&7-1
IFE <Z-40>*<Z-15>,[
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 <XCT "T, CRF>
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<FOO^H
;1 DO NOT AOS NAME, DO FOO^H
;0 AOS NAME (DECIMAL), FOO^H
;-1 AOS NAME (OCTAL), BUT PROCEED IF JOB EXISTS
EDFIL: MOVEI A,1
MOVEM A,DEFV ;ED DOES 1<TECO^H
JRST EDFIL1
CRFIL: PUSHJ P,RRFLB
PUSHJ P,CRST ;REMEMBER THESE FILE NAMES
EDFIL1: TLO F,FAF+LTF
MOVE A,[SQUOZE 0,TECO]
MOVEM A,SYM
ACTRLH: JUMPL F,DISOWN ; COMMAND -- $$ IS DISOWN
TLNE F,CF
JRST ACTLHS ;$ MEANS LOAD SYMS OF LAST 'ED PROG
TLNN F,LTF
JRST ERR ;NO ARG IS ERROR
CTLHS: MOVEI W2,SYSN2
TRZN F,SIXF
PUSHJ P,BITE ;PUT ARG IN SYSN2 IN 6BIT
CCTLH: MOVS D,SYSN2 ;ENTRY FROM $?
CAIN D,(SIXBIT /SYS/)
JRST CTLH3
CAME D,[SIXBIT /TRNHAC/]
JRST CTLH1 ;GO GET JOB&FILE
CTLH3: MOVSM D,JNAME ;LOOK AT SYSTEM OR DDT
PUSHJ P,OUSR
JRST ALTL2
HDPT: IDIVI B,10.
JUMPE B,HDPT1
HRLM C,(P)
PUSHJ P,HDPT
HLRZ C,(P)
HDPT1: ADDI C,'0
IDPB C,A
POPJ P,
CTLH1: MOVEI D,(SIXBIT /DSK/) ;TRY USER'S DISK FIRST
HRRM D,SFILE
.OPEN UTIC,SFILE
JRST .+2 ;OPEN LOST, TRY SYS
JRST CHWIN
MOVEI D,(SIXBIT /SYS/) ;DSK OPEN LOST, TRY SYS
HRRM D,SFILE
TSOPEN UTIC,SFILE ;ERROR IF THIS OPEN LOSES
CHWIN: MOVE D,SYSN2 ;GET JNAME FOR JOB
MOVEM D,JNAME
PUSHJ P,OUSR
SKIPGE UCHNLO ;IF INFERIOR OPEN,
JRST .+3 ;THEN ALL RIGHT,
.CLOSE UTIC, ;INFERIOR NOT OPEN, CLOSE INPUT FILE
JRST JERR ;COMPLAIN IN ENGLISH
SKIPGE DEFV ;LOAD NEW COPY
TLNN F,FAF
JRST CTLH2
MOVE D,UINTWD(U)
CAIE D,21
JUMPN D,HSETUP
CTLH2: MOVEI D,B1ADR+1(U)
HRLI D,-1(D)
SETZM B1ADR(U)
BLT D,BPEND-1(U)
PUSHJ P,ALOAD
MOVE D,STARTA(U)
TLNN F,FAF
JRST HGO
;SKIPPED INTO
HSETUP: SKIPLE DEFV ;AOS NAME
JRST HSET3
MOVE D,SFILN2
EXCH D,NEWFIL
MOVEM D,OLDFIL
MOVEI A,'9
SKIPGE DEFV ;-1< AOS IN OCTAL
MOVEI A,'7
MOVEM A,HSRAD
MOVEI A,0 ;-1 NO CARRY, 0 NO NUMBER, 1-6 LEFT END OF NUMERIC FIELD
MOVEI B,6 ;START AT LEFT END
HSNON: SETOM NUMSN' ;NOT PROCESSING NUMERIC FIELD
JUMPLE B,HSAS2 ;RIGHT END
HSAS1: LDB C,SIXP(B)
JUMPE C,[SOJA B,HSAS2] ;SPACE AT END OF NAME
CAIG C,'9
CAIGE C,'0
SOJA B,HSNON ;NON NUMERIC
AOSN NUMSN
MOVE A,B ;SAVE LEFT END OF NUMBER
CAMGE C,HSRAD ;LARGEST DIGIT
SETOM A ;THIS FIELD CANNOT CARRY
MOVE D,B ;SAVE CURRENT RIGHT END
SOJG B,HSAS1
HSAS2: JUMPL A,HSAOS ;NO CARRY TO OCCUR,JUST AOS
JUMPE A,HSNO1 ;NO NUMBER
CAIN D,1 ;NUMBER UP AGAINST RIGHT END
AOJA A,HSAO1 ;EXPAND LEFT
LDB C,[360600,,SIXP(A)] ;INSERT EXTRA DIGIT IN NUMBER
DPB C,[300600,,SIXP] ;PUT POS FIELD INTO SIZE FIELD, POSITION 0
MOVE C,SFILN2
ROT C,-6
DPB C,SIXP ;SHOVE EVERTHING OVER
SOS D
HSAO1: MOVEI C,'0
DPB C,SIXP(A) ;CLOBBER IN EXTRA DIGIT
HSAOS: LDB A,SIXP(D) ;AOS FIELD
CAIG A,'9
CAIGE A,'0
JRST HSET3
CAML A,HSRAD
MOVEI A,'0-1
AOS A
DPB A,SIXP(D)
CAIN A,'0
AOJA D,HSAOS
HSET3: MOVEI A,50 ;PUT FILE NAMES INTO LOCN 50,...
MOVE D,SFILN1
PUSHJ P,DEP
MOVEI A,53
MOVE D,OLDFIL
PUSHJ P,DEP
MOVEI A,51
MOVE D,NEWFIL
PUSHJ P,DEP
MOVEI A,52
MOVE D,SFILN2
PUSHJ P,DEP
MOVE D,STARTA(U)
SKIPE A,UINTWD(U)
CAIN A,21
JRST HGO
SKIPGE DEFV ;PROCEED ONLY ON -1<
JRST PROCED
JRST HGO
HSNO1: MOVEI C,'1
DPB C,SIXP+1(B) ;SMASH SPACE OR LAST CH
JRST HSET3
CRST: MOVE A,FILN1
MOVEM A,SFILN1
MOVEI A,(SIXBIT \DSK\)
MOVEM A,IFILE
MOVE A,MSNAM
.WSNAM A,
CLEARM DEFV
.OPEN UTIC,IFILE
AOS DEFV
MOVSI A,(SIXBIT \BIN\)
EXCH A,FILN2
MOVEM A,SFILN2
SETZM OLDFIL
SETZM NEWFIL
POPJ P,
STFIL: PUSHJ P,RRFLB
PUSHJ P,CRST
.CLOSE UTIC,
JRST ALTL5
ACTLHS: TLNE F,LTF
JRST CTLHS
PUSHJ P,QJERR
TSOPEN UTIC,SFILE
JRST CSMI1
OPUSR6: .STATUS USRI,D
ANDI C,77
CAIE D,SNFUSER
JRST OPUSRU
CTYPE "#
MOVEI D,-1
MOVEM D,UCHNLO
MOVEM D,FURN(U)
JRST OPUSRB
OPUSRU: MOVE D,RUNAME ;ATTACHING DISOWNED JOB
MOVEM D,UUNAME(U)
.USET USRI,[.RJNAME,,D]
CAMN D,UJNAME(U) ;NAME MAY BE CHANGED TO PROTECT THE INNOCENT
JRST OPUSRW
MOVEM D,UJNAME(U)
CTYPE 40
PUSHJ P,SIXTYP
MOVSI D,(SIXBIT /$J/)
PUSHJ P,SIXTYP
JRST OPUSRW
OPUSR5: MOVE D,RUNAME
CAME D,UUNAME(U)
JRST OPUSRT
PUSHJ P,MRDR2 ;WIPE OUT THIS USER SLOT
MOVEI U,0
OPNER USRI,[(SIXBIT /USR/)] ;COMPLAIN
OPUSRT: MOVEM D,UNAME
CTYPE 40
MOVE D,RUNAME
PUSHJ P,SIXTYP
MOVSI D,(SIXBIT /$U/)
PUSHJ P,SIXTYP
PUSHJ P,MRDR2
JRST OUSR
CTLU: SKIPA D,[.TRANDL]
CTLT: MOVSI D,(.TRANAD)
HLLM D,CTRAN
PUSHJ P,TSPC
MOVE B,[CTTABF,,TTABF]
BLT B,TTABF+5
MOVSI B,-6
CTLT2: PUSHJ P,RFILEN
JRST CTLT3
PUSHJ P,CTLTT
AOBJN B,CTLT2
CTLT3: CAMN B,[-6,,0]
JRST ERR
SKIPE A
PUSHJ P,CTLTT
PUSH P,JNAME
MOVE D,[SIXBIT /*/]
TLNE F,CF
MOVEM D,JNAME
TLNN F,LTF
JRST CTRAN2
SETZM CTEM1
MOVEI W2,CTEM
PUSHJ P,BITE
CTLT0: MOVE W2,[440600,,CTEM]
CTLT1: ILDB D,W2
JUMPE D,CTRAN1
CAIN D,'A
JRST CTATOM
CAIN D,'I
JRST CTIN
CAIN D,'O
JRST CTOUT
CTERR: POP P,JNAME
JRST ERR
CTLTT: MOVEM A,TTABF(B)
CAME B,[-6,,0]
CAMN B,[-3,,3]
HLRZM A,TTABF(B)
POPJ P,
CTATOM: MOVSI D,(SETZ)
IORM D,TTABF
JRST CTLT1
CTOUT: SKIPA D,[2,,]
CTIN: MOVSI D,1
IORM D,CTEM1
JRST CTLT1
CTRAN1: SKIPN D,CTEM1
CTRAN2: MOVSI D,3
IORM D,TTABF
CTRAN: .TRAND UNAME
JRST CTERR
POP P,JNAME
JRST ALTL2
CTLF: JUMPL F,CTLF3
TLNE F,CF
JRST LINK
PUSHJ P,GDEV
CTLF0: HRRM D,FFILE
.OPEN FDRC,FFILE
JRST ERR
CTLF4: SETZM PFLUSH
PUSHJ P,FORMF
PUSHJ P,MORFIN
CTLF1: .IOT FDRC,D
JUMPL D,CTLF2
CAIN D,14
JRST CTLF6
SKIPE PFLUSH
JRST CTLF2
CAIE D,^C
PUSHJ P,MORFLS
JRST CTLF2
PUSHJ P,TOUT
JRST CTLF1
CTLF2: TRZ F,PRINTF
.CLOSE FDRC,
JRST ALTL2
CTLF6: TRNE F,PRINTF
PUSHJ P,FFMOR
JRST CTLF2
JRST CTLF4
CTLF3: TLNN F,QF
JRST ERR
MOVE D,SYL
FFLAP2: .UDISMT D,
TERR (SIXBIT /UNF/)
JRST ALTL2
FORMF: PUSHJ P,CRF
SKIPE GETTY
CTYPE ^L
POPJ P,
MORFIN: .STATUS TYOC,D
LDB D,[150500,,D]
SUBI D,2
CAIGE D,0
ADDI D,26.
MOVEM D,MORPOS
POPJ P,
MORFLS: PUSH P,D
.STATUS TYOC,D
SKIPE TTYFLG
SKIPN GETTY
JRST MORFL4
SKIPE SILNT
JRST MORFL4
LDB D,[150500,,D]
CAMN D,MORPOS
JRST MORFL3
MORFL4: POP P,D
JRST CPOPJ1
MORFL3: 7TYPE 1,[ASCIZ /--MORE--/]
PUSHJ P,IN
CAIE D,40
JRST MORFL2
PUSHJ P,CRF
MOVEI D,24.
CAME D,MORPOS
MOVEI D,25.
SUBI D,24.-^L
PUSHJ P,TOUT+1
POP P,D
JRST CPOPJ1
MORFL2: SETOM UNRCHF
7TYPE 1,[ASCIZ /FLUSHED/]
POP P,D
POPJ P,
FFMOR: .IOT FDRC,D
JUMPL D,CTLF2
SKIPE GETTY
SKIPN TTYFLG
JRST CPOPJ1
PUSH P,D
JRST MORFL3
LINK: MOVEI A,(SIXBIT /DSK/)
HRRM A,LFILN
MOVEI A,1
PUSHJ P,TSPC
LINK1: MOVEI B,0
MOVE C,[440600,,B]
LINK2: PUSHJ P,IIN
CAIN D,":
JRST LINK7
CAIN D,";
JRST LINK4
CAIN D,^Q
JRST LINK8
SUBI D,40
JUMPL D,LINK5
CAIL A,5
JRST LINK2
JUMPG D,LINK3
JUMPE B,LINK1
PUSHJ P,LFILE
AOJA A,LINK1
LINK8: PUSHJ P,IIN
SUBI D,40
LINK3: TLNE C,770000
IDPB D,C
JRST LINK2
LINK7: CAIG A,1 ;SYS: MUST BE FIRST FOR LINKS ON SYS DEV
HLRM B,LFILN
LINK4: MOVEM B,LFILN+5
JRST LINK1
LINK5: PUSHJ P,LFILE
CAIL A,3
JRST LINK6
MOVE B,LFILN+1
MOVEM B,LFILN+3
MOVE B,LFILN+2
MOVEM B,LFILN+4
LINK6: TSOPEN FDRC,LFILN
.CLOSE FDRC,
MOVE D,LFILN
SKIPN GETTY
JRST ALTL2
JRST CTLF0
LFILE: TRNN A,1
JRST LFILE1
MOVEM B,LFILN+1(A)
POPJ P,
LFILE1: EXCH B,LFILN(A)
MOVEM B,LFILN-1(A)
POPJ P,
RRFILE: PUSHJ P,QJERR
SETZM PCROCK
RRFLA: PUSHJ P,TSPC
PUSHJ P,GDEV
RRFLB: MOVEI C,IFILE
RRFL1: PUSHJ P,RFILEN
JSP W1,RRFL2
MOVEM A,1(C)
PUSHJ P,RFILEN
JSP W1,RRFL2
MOVEM A,2(C)
PUSHJ P,RFILEN
JSP W1,RRFL2
HLRM A,(C)
MOVEI A,0
RRFL2: PUSHJ P,CRF
JUMPE A,.+2
XCT (W1)
.SUSET [.RSNAM,,LSNAM]
MOVE A,4(C)
.SUSET [.SSNAM,,A]
POPJ P,
RFILEN: MOVE W1,[440600,,A]
MOVEI A,0
RFLNL: PUSHJ P,IIN
CAIE D,33
CAIN D,15
POPJ P,
SETZM PCROCK
CAIE D,"
CAIN D,11
JRST RFLN3
CAIN D,":
JRST RFLN4
CAIN D,";
JRST RFLN5
CAIN D,^Q
PUSHJ P,IIN
SUBI D,40
TLNE W1,770000
IDPB D,W1
JRST RFLNL
RFLN3: JUMPE A,RFLNL
JRST CPOPJ1
RFLN4: JUMPE A,RFLNL
HLRM A,(C)
JRST RFILEN
RFLN5: MOVEM A,4(C)
JRST RFILEN
GDEV: TLNN F,LTF
JRST GDEV2
MOVEI W2,TEM
PUSHJ P,BITE
HLRZ D,TEM
GDEV3: HRRM D,IFILE
POPJ P,
GDEV2: TLNN F,QF
JRST GDEV4
LDB D,[300,,SYL]
ADDI D,(SIXBIT /UT0/)
JRST GDEV3
GDEV4: MOVE D,IFILE
POPJ P,
CTLO: MOVE D,RUNAME
AOJE D,LOGQ
PUSHJ P,RRFLA
MOVEI D,IFILE
SKIPE PCROCK
MOVEI D,PFILE ;LAST FILE NAME READING COMMAND WAS A :PRINT
SETZM PCROCK
.FDELE (D)
OPNER 0,(D)
MOVE D,(D)
SKIPL GETTY
JRST ALTL2
JRST CTLF0
XFILE: PUSHJ P,RRFLB
HRRZS IFILE
TSOPEN COMC,IFILE
MOVE D,[.IOT COMC,D]
MOVEM D,ININST
JRST ALTL2
PRINT: MOVEI C,PFILE
PUSHJ P,RRFL1
SETOM SRFLAG
TSOPEN FDRC,PFILE
SETOM PCROCK
SETZM SRFLAG
.SUSET [.SSNAM,,LSNAM]
TRO F,PRINTF
JRST CTLF4
.ZZ3==.
LOC .ZZ2
;INTERRUPT HANDLER
TSINT: 0
0
SKIPL I1,TSINT
JRST OTHERI
TRNE I1,1_<TYIC>
PUSHJ P,TSINTT
TRNE I1,1_<COMC>
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<45>
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