mirror of
https://github.com/PDP-10/its.git
synced 2026-02-15 04:16:21 +00:00
This version is dated 1972-12-21 in a comment, and works on current ITS without modification.
1144 lines
28 KiB
Plaintext
1144 lines
28 KiB
Plaintext
TITLE MONIT 200 for paging ai sys, 12/21/72 mb
|
||
|
||
SHARE==0 ; 0 for 1 segment monit, 1 for 2 segment shareable monit
|
||
|
||
; ACCUMULATOR DEFS
|
||
|
||
FF==0 ; FLAG AC
|
||
A=1
|
||
B=2
|
||
C=3
|
||
D=4
|
||
COMPTR=5 ; COMMAND BYTE POINTER
|
||
USRF=6 ; FILE NAME FOR USR DEVICE
|
||
USRN1=USRF+1
|
||
USRN2=USRF+2
|
||
PRTF=11 ; PRINT FILE NAMES
|
||
PRTN1=PRTF+1 ; NAME 1
|
||
PRTN2=PRTF+2
|
||
COMSAV=15 ; AC TO HOLD SAVED COMPTR FOR INFERIOR START (GOES TO A)
|
||
XCTINS=16 ; AC TO XCT AN INSTR, FOR PURITY
|
||
P=17 ; PUSH DOWN POINTER
|
||
|
||
; FLAG DEFINITIONS
|
||
|
||
; FLAGS FOR FF REG
|
||
USRUN==1 ; INFERIOR EXISTS
|
||
; FATAL==2
|
||
LOGFLG==2 ; FLAG DURING LOGOUT, LOGOUT IF NO CORE
|
||
; NEG==4
|
||
VALCOM==10 ; LOOKING AT .VALUE FROM INFERIOR
|
||
LOGF==20 ; DOING 'LOGIN COMMAND'
|
||
CRLF==40 ; CR WAS LAST CHARACTER OUTPUT TO TTY
|
||
; JOBF==100
|
||
; RDF==200 ; READING COMMANDS FROM FILE
|
||
ECHF==400 ; ECHO TYPING
|
||
TTYGON==1000 ; TTY GIVEN AWAY
|
||
SILENC==2000 ; PRINTING BEING FLUSHED
|
||
; NVALUE==4000 ; 0=DO NOT INTERPRET VALRET STRING
|
||
RUNF==10000 ; 1=START UP INFERIOR
|
||
; MTTYF==20000 ; 1=KEEP TTY FROM INFERIOR
|
||
WASGON==40000 ; TTY WAS SNATCHED FROM INFERIOR (MONIT INTERRUPT)
|
||
SRCHF==100000 ; 1=DO SEARCH WHEN LOADING, SET BY FOO FOR TS FOO
|
||
IMLACF==200000 ; DEVICE TTY IS AN IMLAC
|
||
|
||
BRKFLG==400000 ; DOING MULTIPLE .BREAK 12,
|
||
|
||
; CHANNELS FOR I/O
|
||
|
||
TYIC==1 ; TTY INPUT
|
||
TYOC==2 ; TTY OUTPUT
|
||
SYSI==3 ; INPUT FROM SYS: OR USR:
|
||
USRO==4 ; OUTPUT TO INFERIOR
|
||
PRTC==5 ; PRINT AND LISTF INPUT ANDERROR DEVICE
|
||
|
||
LOC 20
|
||
PDLLNG==20 ; FROM 20 TO 37
|
||
PDL: BLOCK PDLLNG
|
||
|
||
LOC 40
|
||
0 ; UUO DEPOSITED HERE BY HARDWRE
|
||
JSR UUOH ; HANDLER FOR UUOS
|
||
JSR TSINT ; HANDLER FOR TS INTERRUPTS
|
||
0 ; STRING PASS PNTR FOR INFERIOR
|
||
|
||
DEFINE FATAL MESS
|
||
JSP A,XFATAL
|
||
INFORM \.,ERROR MESS
|
||
TERMIN
|
||
|
||
DEFINE INFORM N,MESS
|
||
IF1,[PRINTC /N MESSî/] TERMIN
|
||
|
||
PURITY==0
|
||
%HI==400000
|
||
|
||
DEFINE PURE
|
||
IFN PURITY,INFORM \.,EXTRA PURE
|
||
IFN SHARE,[IFE PURITY,[%LO==.
|
||
LOC %HI
|
||
]] PURITY==1
|
||
TERMIN
|
||
|
||
DEFINE IMPURE
|
||
IFE PURITY,INFORM \.,EXTRA IMPURE
|
||
IFN SHARE,[IFN PURITY,[%HI==.
|
||
LOC %LO
|
||
]] PURITY==0
|
||
TERMIN
|
||
; BEG. MAIN COMMAND SCAN LOOP
|
||
|
||
PURE
|
||
BEG: TLNE FF,VALCOM ; VALRET IN PROGRESS?
|
||
|
||
JRST BEGS ; YES, GO AHEAD
|
||
|
||
TLZ FF,SILENC ; UNSILENCE TTY
|
||
|
||
PASCI ^M ; CLEAR LINE
|
||
|
||
JRST BEGS ; GET COMMAND LINE AND PROCESS
|
||
|
||
|
||
BEGFND: MOVE B,(A) ; EXPAND ABREV TO ACTUAL
|
||
|
||
MOVEM B,SYSF+2
|
||
|
||
MOVEM B,USRF+2
|
||
|
||
HRRZ A,1(A) ; GET LOCAL COMMAND ADDRESS FROM BEGLOP
|
||
|
||
JRST (A) ; DISPATCH TO COMMAND
|
||
|
||
|
||
CANNOT: PSIX [SIXBIT / CAN'T/]
|
||
|
||
|
||
QBEG: PASCR [ASCIZ /?/]
|
||
|
||
.CLOSE SYSI,
|
||
|
||
TLZ FF,VALCOM ; RESET READING FROM VALRET STRING
|
||
|
||
|
||
; FALL THROUGH TO BEGS
|
||
|
||
|
||
BEGS: .SUSET [.SPICL,,[-1]] ; MAKE ME INTERUPT-PRONE
|
||
MOVE P,[-PDLLNG,,PDL-1] ; FLUSH OUT PDL
|
||
BEGR: TLNN FF,VALCOM ; VALRETED FROM PREV
|
||
PUSHJ P,RCMD ; READ STRING IN
|
||
PUSHJ P,SCMD ; SCAN COMMAND
|
||
JUMPE B,BEG ; COMMAND BLANK, TRY AGAIN
|
||
TLZA FF,LOGF+SRCHF+LOGFLG ; RESET LOGIN, KILL SEARCH
|
||
BEGA: SKIPA b,sysf+2 ; USE LAST COMMAND AGAIN
|
||
movem b,sysf+2
|
||
movem b,usrf+2
|
||
MOVE A,[-NUMCOM,,MYCOM]
|
||
|
||
BEGLOP: HLLZ C,1(A) ; FETCH ABBREV
|
||
CAME B,(A) ; CHECK FOR LOCAL COMMANDS
|
||
CAMN B,C ; ABBREV?
|
||
JRST BEGFND ; FOUND
|
||
AOS A
|
||
AOBJN A,BEGLOP ; GET ANOTHER
|
||
PUSHJ P,CKLOG ; MUST BE LOGGED IN HERE
|
||
TLO FF,RUNF+SRCHF ; SET TO RUN PROG AND SEARCH USER
|
||
SYSLG2: MOVEI A,SYSF ; SET FOR SYS FILES
|
||
; UOPEN. LOAD INFERIOR AND GO
|
||
|
||
UOPEN: PASCI ^M ; CLEAR LINE FOR LOSER
|
||
PUSHJ P,ALD ; LOAD THE FILE
|
||
TLNN FF,RUNF
|
||
JRST BEG ; WAIT IF NOT TO RUN
|
||
|
||
USTART: PUSHJ P,ATTY ; GIVE HIM THE CONSOLE
|
||
.USET USRO,[.SUSTP,,[0]] ; START INF
|
||
MOVSI D,200000
|
||
.SLEEP D, ; RIP VAN WINKLE
|
||
;****** JRST .-2 ; IN CASE 40 YRS PASS
|
||
; SCMD - SCAN COMMAND LINE FOR SOMETHING TO DO
|
||
|
||
SCMDL: IBP COMPTR ; SKIP OVER LEADING JUNK
|
||
SCMD: MOVE A,COMPTR ; ENTRY: LOOK AHEAD
|
||
ILDB A,A ; GET NEXT CHAR
|
||
;****** CAIE A,11 ; TAB IN LEAD IS IGNORED
|
||
;****** CAIN A,40 ; DITTO FOR SPACES
|
||
;****** JRST SCMDL ; PEEEL IT OFF
|
||
CAIE A,^J ; LINE FEEDS CHUCKED TOO
|
||
CAIN A,": ; STRIP LEADING COLONS
|
||
JRST SCMDL ; IGNORE LOSER
|
||
;****** CAIE A,^V ; VIEW?
|
||
;****** JRST .+3 ; NO, SKIP
|
||
;****** TLZ FF,SILENC ; YES, UNSILENCE
|
||
;****** JRST SCMDL ; IGNORE
|
||
CAIE A,^W ; WIPE?
|
||
JRST .+3 ; NO, SKIP
|
||
TLO FF,SILENC ; YES, SILENCE
|
||
JRST SCMDL ; IGNORE NOW
|
||
|
||
MOVEM COMPTR,43 ;SAVE FOR OLD STYLE LEECH
|
||
PUSHJ P,GETSYL ;GET COMMAND ARG
|
||
SKIPE A ;SKIP IF COMMAND TERMINATES WITH SPACE
|
||
TDZA COMSAV,COMSAV ;SET TO 0
|
||
MOVEM COMPTR,COMSAV ;SAVE CURRENT COMMAND LOC
|
||
POPJ P, ;RETURN FROM SCMD
|
||
; comment in valret, typed but ignored
|
||
|
||
GETCCC: PUSHJ P,GETCAT ; ECHO IF APPROPRIATE
|
||
GETCCS: ildb a,comptr ; get next command char
|
||
CAIE A,33 ; ALTMODE IS END OF COMMENT TOO
|
||
SKIPN A ; SO IS END OF VALRET
|
||
jrst getccz ; end
|
||
CAIE A,15 ; TERMINATING CR?
|
||
JRST GETCCC ; NO
|
||
PUSHJ P,GETCAT ; YES, ECHO
|
||
|
||
; GET CHAR FROM COMMAND BUFFER (FILTERING)
|
||
|
||
GETCCA: ILDB A,COMPTR ; FETCH COMM CHAR TO A
|
||
cain a,33 ; VALRET COMMENT STARTED WITH ALTMODE ":$"
|
||
jrst GETCCS ; ignore text to end-of-line
|
||
caie a,^C ; end-of-file?
|
||
skipn a ; null terminate strings
|
||
GETCCZ: TLZ FF,VALCOM+ECHF+SILENC ; END OF VALRET
|
||
caie a,^L ; flush formfeed
|
||
CAIN A,^J ; FLUSH LF
|
||
JRST GETCCA
|
||
|
||
GETCAT: TLNE FF,VALCOM+ECHF
|
||
JRST IOTA ; ECHO IF VALRET OR ECHO FLAG
|
||
POPJ P, ; ELSE JUST RETURN
|
||
; RCMD. READ COMMAND LINE INTO BUFFER
|
||
|
||
RCMD: PASCI "; ; PROMPT WITH ;
|
||
MOVE COMPTR,[440700,,COMMND] ; BEG INPUT
|
||
SETZB C,COMMND ; COUNTER AND COMMAND BUFFER
|
||
MOVE B,[COMMND,,COMMND+1]
|
||
BLT B,COMMND+COMLNG-1 ;ZERO OUT COMMAND BUFFER
|
||
MOVE B,COMPTR
|
||
|
||
RCMD1: .IOT TYIC,A ; GET CHAR
|
||
CAIN A,"?
|
||
JUMPE C,PHELP ; INIT ? MEANS HELP
|
||
CAIN A,"" ; DOUBLE QUOTE WORKS IMMEDIATE
|
||
JUMPE C,BEGA ; NOW! DO SAME COMMAND AGAIN
|
||
CAIE A,^G ; CTL G IGNORED
|
||
CAIN A,^S ; CTL S IGNORED
|
||
JRST KLINE ; YES
|
||
CAIN A,177 ; RUBOUT
|
||
JRST RUB
|
||
CAIN A,^L
|
||
PIMAGE [ASCIZ /C/] ;CLEAR SCREEN ON FF
|
||
|
||
CAIG A,^L ; SKIP IF GREATER THAN FF, NOT FUNNY CTL CHAR
|
||
JRST RCMDX ; JUMP TO END LINE ON FUNNY CTL CHAR
|
||
CAIN A,^M ; SKIP IF NOT CR
|
||
JRST RCMDY ; JUMP TO END LINE WITH CR
|
||
CAIL C,5*COMLNG-2 ; SKIP IF CHAR FITS IN BUFFER
|
||
JRST RCMD1 ; JUMP TO IGNORE OVERFLOW CHARACTER
|
||
IDPB A,B ; STORE CHAR AWAY
|
||
AOJA C,RCMD1 ; BACK FOR MORE
|
||
|
||
RCMDX: MOVEI A,^M ; CLEAR LINE WITH RETURN
|
||
PUSHJ P,IOTA
|
||
|
||
RCMDY: IDPB A,B ; STORE CHAR (CR)
|
||
MOVEI A,0 ; TERM WITH NULL FOR TYPE
|
||
IDPB A,B
|
||
TLO FF,CRLF ; MARK AS HAVING CLEARED LINE
|
||
POPJ P,
|
||
|
||
RUB: SOJL C,KLINE
|
||
LDB A,B ; GET LAST INSERTED
|
||
ADD B,[070000,,] ; BUMP CH POINTER
|
||
TLNE B,400000 ; AT WORD BOUND
|
||
ADD B,[347777777777]
|
||
tlne ff,imlacf ; imlac?
|
||
jrst rubiml ; yes
|
||
PUSHJ P,IOTA ; ECHO OUT RUBBED CHAR
|
||
JRST RCMD1
|
||
|
||
RUBIML: CAIGE A,33' ; WAS IT A CONTROL (^CHAR)
|
||
PIMAGE DELCH ;DELETE 2 IF CTL CHAR
|
||
PIMAGE DELCH ;DELETE CHAR
|
||
jrst rcmd1 ; next?
|
||
|
||
KLINE: TLZ FF,SILENC ; UNSILENCE AFTER CLEARING
|
||
tlnn ff,imlacf ; imlac?
|
||
jrst qbeg ; start over if just tty
|
||
PIMAGE DELIN ; KILL A LINE
|
||
JRST RCMD ; PROMPT WITH ";
|
||
|
||
;****** SCNAME - ROUTINE TO SCAN COMMAND LINE FROM CURRENT POSITION
|
||
;****** RETURNS A FILE NAME. A,B,C,D <= NAME1,NAME2,DEVICE,USER
|
||
;****** USING "[DEV:][USR;]NAME1 NAME2" OR "NAME1 NAME2 [DEV [USR]]"
|
||
;****** USING [USR;] WILL CAUSE DEVICE TO BE DSK.
|
||
|
||
SCNAME: SETZM SCN1 ;ZERO NAMES &C
|
||
SETZM SCN2
|
||
SKIPA C,[-4,,SCN1]
|
||
SCNDEV: MOVE C,[-2,,SCDEV]
|
||
SETZM SCDEV
|
||
SETZM SCUSR
|
||
SCNGET: PUSHJ P,GETSYL ;RET A,B <= BRKCHR,6BIT SYL
|
||
JUMPE B,SCNX ;NO MORE SYLS HERE
|
||
CAIN A,': ;CHECK WHICH BREAK
|
||
SCNPDV: MOVEM B,SCDEV ;MOVE :SYL TO DEVICE
|
||
CAIN A,'; ;MOVE SYL; TO USR
|
||
JRST SCNUSR ; SYL; BECOMES USR AND DEV DSK:
|
||
SCNCON: JUMPG A,SCNGET ;NOT SPACE, GET MORE SYL(NOT CTL EITHER)
|
||
MOVEM B,(C)
|
||
JUMPL A,SCNX ;CTL TERMINATES
|
||
AOBJN C,SCNGET ;UP PTR, GET MORE
|
||
|
||
SCNX: SKIPE SCUSR ;USR; SPECIFIED?
|
||
.SUSET [.SSNAM,,SCUSR] ;YES, SET IT
|
||
SKIPE A,SCDEV ;DEV:?
|
||
HLRZM A,PRTF ;Y, SET IT, ALSO OPEN MODE UNIT ASC@IN
|
||
TLZ PRTF,-1 ;SET TO ASCII UNIT INPUT ANYWAY
|
||
SKIPE A,SCN1
|
||
MOVEM A,PRTF+1 ;SET N1 IF GEVEN
|
||
SKIPE A,SCN2
|
||
MOVEM A,PRTF+2 ;SET N2 IF GIVYN
|
||
POPJ P,
|
||
|
||
SCNUSR: MOVEM B,SCUSR
|
||
HRLI B,(SIXBIT /DSK/) ; MAKE DEVICE DSK
|
||
SKIPN SCDEV ;DO NOT SET DEV TO DSK IF ALREADY SPECED
|
||
MOVEM B,SCDEV
|
||
JRST SCNCON ; CONTINUE SCAN
|
||
|
||
IMPURE
|
||
|
||
SCN1: 0
|
||
SCN2: 0
|
||
SCDEV: 0
|
||
SCUSR: 0
|
||
|
||
PURE
|
||
;GETSYL - ROUTINE TO GET SINGLE WORD OFF COMMAND LINE
|
||
;****** ONLY BRK CHAR ARE : ; SPACE AND CONTROLS EXCEPT ^Q WHICH
|
||
;****** QUOTES THE NEXT NON CTL CHAR (: ; SP)
|
||
|
||
GETSYL: PUSH P,[0] ;INIT SYL ON STACK
|
||
MOVE B,[440600,,0(P)] ;BYT PTR TO STACK
|
||
GETSLP: PUSHJ P,GETCCA ;GET CHAR
|
||
CAIN A,^Q ;IS IT "QUOTE"
|
||
JRST GETQOT ;YES
|
||
SUBI A,40 ;MAKE SIXBIT
|
||
JUMPL A,GETSX ;CTL=EXIT
|
||
JUMPE A,GETSP ;INIT SPACES FLUSHED
|
||
CAIE A,':
|
||
CAIN A,';
|
||
JRST GETSX ; ; OR : TERM
|
||
GETSPT: CAIL A,100 ;LC?
|
||
SUBI A,40 ;MAKE UC
|
||
TLNE B,770000 ;CHECK FIT
|
||
IDPB A,B ;STORE CHAR
|
||
JRST GETSLP
|
||
|
||
GETQOT: PUSHJ P,GETCCA ;GET CHAR TO QUOTE
|
||
SUBI A,40 ;6BIT
|
||
JUMPGE A,GETSPT ;CAN'T ^Q A CTL
|
||
JRST GETSX
|
||
|
||
GETSP: TLNE B,400000 ;IF NONE YET PUT IN
|
||
JRST GETSLP ;SPACE IGNORED
|
||
GETSX: POP P,B ;ASSEMBLED SYL TO B
|
||
POPJ P, ;BRK IS LEFT IN A
|
||
; LOAD LOSER
|
||
|
||
ALD: HRRM A,XCTINS ;STORE ADDRESS FOR LOAD OPEN
|
||
SETZM USRN1 ;WIPE ANY PREVIOUS USERNAME (FROM 'USER')
|
||
HRLI USRF,5 ;SET USER OPEN TO IMAGE UNIT OUTPUT
|
||
ALD6: TLNN FF,SRCHF ;SKIP IF SEARCH FLAG ON
|
||
JRST ALD7 ;ELSE GO LOAD REGULAR
|
||
MOVEI A,(SIXBIT /DSK/)
|
||
HRRM A,SYSF ;SET FOR USER FIRST
|
||
.SUSET [.RSNAM,,A] ;SAVE SNAME
|
||
.SUSET [.SSNAM,,DSKNAM] ;SET FOR SEARCH OF "USER" DIR
|
||
.OPEN SYSI,(XCTINS) ;MAY ACTUALLY BE SYSF
|
||
JRST .+3 ;FAIL, SET SYSF TO SYS
|
||
.SUSET [.SSNAM,,A] ;RESTORE SNAME
|
||
JRST ALD5 ;FOUND USER, LOAD IT
|
||
.SUSET [.SSNAM,,A] ;RESTORE SNAME
|
||
MOVEI A,(SIXBIT /SYS/)
|
||
HRRM A,SYSF ;FOO, SET SYS TO SYS
|
||
ALD7: .OPEN SYSI,(XCTINS) ;FILLED IN ADDRESS
|
||
JSP A,ANALER
|
||
ALD5: PUSHJ P,USRCLOSE
|
||
|
||
PUSHJ P,USROPEN ;FILE FOUND, OPEN USER INFERIOR
|
||
.RESET USRO, ; MAKE IMAGE FRESH, IF WAS REOWNED
|
||
.uset usro,[.ssnam,,dsknam] ;carry dsk to inferior
|
||
|
||
PLOAD: MOVE A,[USRO,,SYSI]
|
||
.CALL LDBLK
|
||
JRST PLOADR
|
||
.IOT SYSI,B ;READ START ADDRESS
|
||
ALDJ: HRRZM B,STARTA
|
||
.USET USRO,[.SUPC,,STARTA]
|
||
.CLOSE SYSI,
|
||
POPJ P, ;RETURN
|
||
|
||
PLOADR: PSIXI (SIXBIT /PLD/) ; ERROR ON PLOAD
|
||
.CLOSE SYSI,
|
||
PUSHJ P,USRCLOSE ;FLUSH OUT JOB
|
||
JRST QBEG ;WILL SCRATCH PDL
|
||
|
||
|
||
LDBLK: SETZ
|
||
SIXBIT /LOAD/
|
||
[USRO]
|
||
SETZ [SYSI]
|
||
; XFATAL AND ANALER ERROR HANDLERS
|
||
|
||
XFATAL: MOVE P,[-PDLLNG,,PDL-1] ; RESET PDL FOR WORKING ROOM
|
||
POCTI (A)
|
||
PASCR [ASCIZ / MONIT error/]
|
||
.VALUE
|
||
|
||
DANERR: .STATUS ERRF+2 ;GET STATUS FOR DELETE
|
||
JRST ANAL1
|
||
ANALER: HLLZ B,-2(A)
|
||
TLZ B,777037 ;SAVE ONLY AC FIELD
|
||
IOR B,DANERR ;GET .STATUS
|
||
XCT B ;DO IT,
|
||
|
||
ANAL1: TLZ FF,ECHF+VALCOM ;ERROR => NO TAPE IN OR VALRET
|
||
MOVEI A,@-2(A)
|
||
PSIX (A) ;POINTS TO OPEN BLOCK
|
||
PASCI ":
|
||
.SUSET [.RSNAM,,SCUSR] ;GET USERS SNAME
|
||
PSIX SCUSR
|
||
PASCI ";
|
||
PSIX 1(A)
|
||
PASCI " ;SPACE
|
||
PSIX 2(A) ;NAME2
|
||
PASCI 40 ;SP
|
||
|
||
.OPEN PRTC,ERRF ;OPEN ERROR COMMENT
|
||
FATAL CANT OPEN ERROR DEVICE (ANALYSE ERROR)
|
||
|
||
; (FALL THROUGH)
|
||
|
||
XPRINT: .IOT PRTC,A
|
||
TLNN A,-1 ;MAGIC EOF?
|
||
CAIN A,^C
|
||
JRST CLPRT ;YES, FINISHED
|
||
CAIE A,^L ;IGNORE FF
|
||
PUSHJ P,IOTA ;PRINT SYSTEM COMMENT
|
||
TLNN FF,SILENC
|
||
JRST XPRINT
|
||
CLPRT: .CLOSE PRTC,
|
||
JRST BEG ;KILLED BY ^S
|
||
|
||
USROPE:.OPEN USRO,USRF ;useropen (as it is affectionately called)
|
||
JSP A,ANALER ;YOU LOST
|
||
.USET USRO,[.RINTB,,A]
|
||
TLNN A,1 ;CHECK INTB IF THE RIGHT INFERIOR
|
||
FATAL OPENED SECOND INFERIOR (USEROPEN)
|
||
TLO FF,USRUN ;SET OPEN FLAG
|
||
POPJ P,
|
||
|
||
USRCLOSE: PUSHJ P,DTTY ;MAKE SURE TTY IS UP
|
||
TLNE FF,USRUN ;CHECK IF ACTUALLY OPEN
|
||
.UCLOSE USRO, ;YES, WIPE IT OUT
|
||
.CLOSE USRO,
|
||
TLZ FF,USRUN ;NOW RESET FLAG - IF KILL HANGS, IT WILL NOT BE FLAGGED YET
|
||
POPJ P,
|
||
|
||
ATTY:
|
||
;****** TLNE FF,USRUN ;CANT IF NO USR OPEN
|
||
.ATTY USRO, ;TRY TO GIVE IT UP
|
||
FATAL ATTY WITH NO INF OPEN (ATTY)
|
||
TLO FF,TTYGON ;FLAG TTY GONE
|
||
POPJ P,
|
||
|
||
DTTY: TLZ FF,WASGON ;SAVE STATE OF TTYGON HERE
|
||
TLZN FF,TTYGON ;SEE IF TTY GIVEN AWAY
|
||
POPJ P, ;I GOT IT ALREADY
|
||
.DTTY USRO, ;GOBBLE IT BACK
|
||
FATAL CAN'T GET TTY BACK FROM INF (DTTY)
|
||
TLO FF,WASGON ;MARK THAT TTY WAS GOTTEN FROM INF
|
||
POPJ P,
|
||
; LISTF PRINT RUN DELETE PCORE
|
||
|
||
SYSTAT: .OPEN PRTC,[SIXBIT / TTY.FILE.(DIR)/]
|
||
JSP A,ANALER
|
||
JRST XPRINT
|
||
|
||
LISTF: PUSHJ P,SCNDEV ;OUTPUT FILE DIRECTORY
|
||
SETOM B
|
||
LISTFM: MOVEM PRTF,LSTF
|
||
.OPEN PRTC,LSTF
|
||
JSP A,LISTFU
|
||
JRST XPRINT
|
||
|
||
LISTFU: AOJG B,ANALER ;A SET ALREADY, CHECK ONCE FLAG(B)
|
||
.SUSET [.SSNAM,,SCDEV] ;DEV NOT FOUND, SET USER TO DEV, DEV TO DSK
|
||
MOVEI PRTF,(SIXBIT /DSK/)
|
||
JRST LISTFM
|
||
|
||
PRINT: PUSHJ P,SCNAME ;GET A,B,C,D = N1,N2,DEV,USR
|
||
CAIN PRTF,(SIXBIT/TTY/) ; TTY?
|
||
MOVEI PRTF,(SIXBIT /DSK/) ; TTY GOES TO DSK
|
||
.OPEN PRTC,PRTF
|
||
JSP A,ANALER
|
||
JRST XPRINT
|
||
|
||
RUN: TLOA FF,RUNF ;SET TO RUN
|
||
LOAD: TLZ FF,RUNF ;SET TO NOT RUN
|
||
PUSHJ P,CKLOG
|
||
PUSHJ P,SCNAME ;GET FILE NAME
|
||
MOVEM PRTN1,USRF+2 ;JOBNAME=FILENAME
|
||
CAME PRTN1,SYSF+1 ;SKIP IF N1=TS
|
||
CAMN PRTN1,[SIXBIT /@/] ;SKIP IF NOT @
|
||
MOVEM PRTN2,USRF+2 ;USE JOBNAME=FILE NAME 2
|
||
CAIE PRTF,(SIXBIT /USR/) ;BAD DEVICES FOR LOADING
|
||
CAIN PRTF,(SIXBIT /TTY/)
|
||
MOVEI PRTF,(SIXBIT /DSK/) ; IF USR OR TTY MAKE DSK
|
||
HRLI PRTF,4 ;MODE IS IMAGE UNIT INPUT
|
||
MOVEI A,PRTF
|
||
TLZ FF,SRCHF ;OMIT SEARCH (REDUNDANT OPEN)
|
||
JRST UOPEN
|
||
|
||
DELETE: PUSHJ P,SCNAME ;GET FILE NAME
|
||
MOVEI PRTF+3,0 ;SET ARG FOR DELETE
|
||
.FDELE PRTF ;SYS CALL DELETE
|
||
JSP A,DANERR ;HMM ERROR
|
||
JRST BEG ;OK
|
||
|
||
; OWN. OWN A DISOWNED JOB
|
||
|
||
OWN: PUSHJ P,CKLOG ;MUST BE LOGGED IN
|
||
PUSHJ P,USRCLOSE
|
||
PUSHJ P,GETSYL ;GET FIRST NAME
|
||
JUMPE B,NLOG3 ;TYPE NAME? IF NOT GIVEN
|
||
MOVEM B,USRN2 ;STORE
|
||
PUSHJ P,GETSYL ;GET SECOND NAME IF ANY
|
||
SKIPE USRN1,B ;SKIP IF NO SECOND, MOVE TO FIRST
|
||
EXCH USRN1,USRN2 ;SWAP SECOND TO FIRST, V-V
|
||
HRLI USRF,16 ;IMAGE BLOCK INPUT, FAIL IF NOT FOUND
|
||
PUSHJ P,USROPEN
|
||
HRLI USRF,6 ;NOW SET TO IMAGE BLOCK INPUT ONLY
|
||
PUSHJ P,USROPEN ;TRY FOR REAL
|
||
.STATUS USRO,A
|
||
ANDI A,77 ;GET 'DEVICE' CODE
|
||
CAIE A,61 ;SKIP IF 'IMMEDIATE INFERIOR'
|
||
PASCR [ASCIZ /inf?/]
|
||
.USET USRO,[.RJNAM,,B] ;GET ACTUAL JNAME
|
||
CAMN B,USRN2 ;SKIP IF NAME ALTERED BY SYSTEM TO AVOID CONFLICT
|
||
JRST BEG ;NAME OK, RETURN
|
||
MOVEM B,USRN2 ;STORE NEW NAME
|
||
PSIX USRN2 ;PRINT IT
|
||
PASCR [ASCIZ / new name/]
|
||
JRST QBEG
|
||
|
||
USER: PUSHJ P,GETSYL ;GET AN ARG
|
||
MOVEM B,DSKNAM ;STORE AS DISK DIR NAME
|
||
.SUSET [.SSNAM,,DSKNAM] ; SET IT NOW
|
||
JRST BEG
|
||
LOGIN: .OPEN SYSI,SYSF ; LOOK FOR TS LOGIN
|
||
SKIPA ; OOPS, NOT FOUND
|
||
JRST SYSLG1 ; USE IT
|
||
STRLOG: PUSHJ P,GETSYL
|
||
SKIPE LOGNAM
|
||
JRST NLOG1 ;ALREADY LOGGED IN
|
||
JUMPE B,NLOG3 ;NO NAME GIVEN
|
||
.CALL LOGBLK
|
||
JRST NLOG2 ; FAIL, NAME ON ANOTHER TTY
|
||
MOVEM B,LOGNAM
|
||
MOVEM B,DSKNAM ;STORE FOR COMMAND LOAD SEARCH RULE
|
||
JRST BEG
|
||
|
||
NLOG1: PSIX LOGNAM
|
||
PASCR [ASCIZ / is here./]
|
||
JRST BEG
|
||
|
||
NLOG2: PASCR [ASCIZ /On another console./]
|
||
JRST BEG
|
||
|
||
NLOG3: PASC [ASCIZ /Name/]
|
||
JRST QBEG
|
||
|
||
LOGBLK: SETZ
|
||
SIXBIT /LOGIN/
|
||
B
|
||
SETZ [SIXBIT /MONIT/]
|
||
|
||
DISOWN: PUSHJ P,CKRUN
|
||
.DISOWN USRO,
|
||
FATAL WONT DISOWN INFERIOR (DISOWN)
|
||
.CLOSE USRO, ;FORGET, BUT DONT DESTROY
|
||
TLZ FF,USRUN
|
||
JRST BEG
|
||
; CONTIN START STOP PROCEED KILL
|
||
|
||
CONTIN: PUSHJ P,CKRUN ; RUNABLE?
|
||
JRST STARTP ; GO START IT
|
||
|
||
START: PUSHJ P,CKRUN
|
||
.USET USRO,[.SUPC,,STARTA] ; SET HIS START ADDRESS
|
||
STARTP: TLO FF,RUNF ; SET TO RUN
|
||
JRST USTART
|
||
|
||
STOP: PUSHJ P,CKRUN
|
||
.USET USRO,[.SUSTP,,[-1]]
|
||
JRST BEG
|
||
|
||
PROCEE:
|
||
PROCED: PUSHJ P,CKRUN
|
||
.USET USRO,[.SUSTP,,[0]] ; SEE HIM RUN !
|
||
JRST BEG
|
||
|
||
KILL: PUSHJ P,USRCLOSE ; FLUSH JOB IF ANY
|
||
JRST BEG
|
||
|
||
; CHECK TO SEE IF LOSER IS LOGGED IN.
|
||
|
||
CKLOG: SKIPE LOGNAM ; SKIP IF LOSER NOT LOGGED IN
|
||
POPJ P, ; RETURN, LOGGED IN, OK
|
||
PASC [ASCIZ/Login/] ; ASK FOR LOGIN
|
||
JRST QBEG
|
||
|
||
CKRUN: TLNE FF,USRUN ; CHECK IF JOB CURRENTLY EXISTS
|
||
POPJ P,
|
||
PASC [ASCIZ /No program/]
|
||
JRST QBEG
|
||
; TRANS UNTRAN
|
||
|
||
TRANS: SKIPA XCTINS,[.TRANAD TBLOCK]
|
||
UNTRAN: MOVE XCTINS,[.TRANDL TBLOCK]
|
||
PUSHJ P,CKLOG ; LOGGED IN?
|
||
MOVSI C,-8 ; COUNT OF ARGS
|
||
TARGS: PUSHJ P,GETSYL
|
||
JUMPE B,QBEG ;? IF NOT ENOUGH ARGS
|
||
MOVEM B,TBLOCK(C) ; STORE RAW ARG WORDDS
|
||
AOBJN C,TARGS
|
||
|
||
MOVE B,[440600,,TBLOCK] ; FIRST ARG, "AIO"
|
||
HLRZ C,TBLOCK+2
|
||
TMODE: ILDB A,B ; GET CHARS
|
||
CAIN A,'A ; IS IT "ATOMIC"
|
||
TLO C,400000 ; YES, SET BIT
|
||
CAIN A,'I ; IS IT INPUT
|
||
TLO C,1 ; SET INPUT BIT
|
||
CAIN A,'O ; IS IT OUTPUT
|
||
TLO C,2 ; SET OUTPUT BIT
|
||
TLNE B,770000 ; SKIP IF DONE WORD
|
||
JRST TMODE ; JUMP BACK IF NOT DONE
|
||
|
||
MOVEM C,TBLOCK+2
|
||
HLRZS TBLOCK+5
|
||
MOVE A,LOGNAM
|
||
MOVEM A,TBLOCK ; SET UNAME = MINE
|
||
XCT XCTINS
|
||
JRST CANNOT
|
||
JRST BEG
|
||
; ---------------------
|
||
; I command I
|
||
; I-------------------I
|
||
; I abbrev I ptr I
|
||
; ---------------------
|
||
|
||
DEFINE COMTAB COMMND,ABREV
|
||
SIXBIT /COMMND/
|
||
<<SIXBIT/ABREV/>&<777777000000>>+<<COMMND>&<000000777777>>
|
||
TERMIN
|
||
|
||
MYCOM: COMTAB ASSIGN,ASN
|
||
COMTAB CONTIN,CON
|
||
COMTAB DELETE,DEL
|
||
COMTAB DESIGN,DES
|
||
COMTAB DISOWN,DIS
|
||
;****** COMTAB ECHO
|
||
COMTAB FLAP
|
||
COMTAB FLUSH
|
||
COMTAB HELP,HOW
|
||
;****** COMTAB JOB
|
||
COMTAB KILL,K
|
||
COMTAB LISTF,LF
|
||
COMTAB LOAD,GET
|
||
COMTAB LOGIN,LOG
|
||
COMTAB LOGOUT,BYE
|
||
;****** COMTAB MONTTY
|
||
COMTAB OWN,JOB
|
||
COMTAB PRINT,TYP
|
||
COMTAB PROCED,P
|
||
COMTAB RUN,R
|
||
COMTAB START,GO
|
||
COMTAB STOP
|
||
COMTAB SYSTAT,WHO
|
||
COMTAB TIME,TI
|
||
COMTAB TRANS
|
||
COMTAB UINIT
|
||
COMTAB UNTRAN
|
||
COMTAB USER
|
||
;****** COMTAB VALUE
|
||
;****** COMTAB XFILE
|
||
|
||
NUMCOP==<.-MYCOM>/2 ; COUNT FOR PRINTING, FOLLOWING ARE INTERNAL
|
||
|
||
COMTAB ENDLOG
|
||
COMTAB STRLOG
|
||
|
||
NUMCOM==<.-MYCOM>/2 ;COUNT FOR TABLE USES
|
||
|
||
IFN NUMCOM*2+MYCOM-.,PRINTC / * * * COMMAND TABLE ODD
|
||
/
|
||
; HELP COMMAND
|
||
|
||
PHELP: PASCI ^M ; CLEAN LINE
|
||
|
||
HELP: PASCR [ASCIZ /Commands/]
|
||
MOVE A,[-NUMCOP,,MYCOM] ; do not give them endlog or strlog
|
||
|
||
HELPL: PSIX (A) ; TABLE ENTRY
|
||
HLLZ D,1(A) ; GET ABBREV
|
||
JUMPE D,HELPX ; JUMP IF NO ABBREV TO PRINT
|
||
PASCI ^I ; TAB FOR ABBREV
|
||
PSIX D
|
||
|
||
HELPX: PASCI ^M ; CR TO END IT
|
||
AOS A
|
||
AOBJN A,HELPL
|
||
JRST BEG
|
||
|
||
; LOGOUT DESIGN ASSIGN FLUSH ENDLOG
|
||
|
||
LOGOUT: SKIPN LOGNAM ; DONE A LOGIN?
|
||
JRST ENDLOG ; NO, JUST LOGEM OUT NOW
|
||
tlo ff,logflg ; set logout flag in case no core
|
||
.open sysi,sysf ; ts logout?
|
||
jrst endlog ; just logout
|
||
SYSLG1: TLZ FF,SRCHF ; NO SEARCH RULE
|
||
tlo ff,runf ; runit
|
||
jrst syslg2 ; runit
|
||
|
||
endlog: .LOGOUT
|
||
FLUSH: .VALUE
|
||
|
||
DESIGN: SKIPA XCTINS,[.DESIGN A,]
|
||
ASSIGN: MOVE XCTINS,[.ASSIGN A,]
|
||
PUSHJ P,CKLOG ; MUST BE LOGGED IN FOR THESE
|
||
ACOMM: PUSHJ P,GETSYL ; GET A SYL
|
||
MOVEI A,0
|
||
LSHC A,6
|
||
JUMPN B,.-2 ; GET ONLY TRAILING CHAR
|
||
SUBI A,'0 ; MAKE A DIGIT
|
||
JUMPLE A,CANNOT ; CHECK FOR VALID
|
||
CAIG A,8
|
||
XCT XCTINS ; DO IT
|
||
JRST CANNOT ; HMM!
|
||
JRST BEG
|
||
|
||
UINIT: SKIPA XCTINS,[.UINIT A,]
|
||
FLAP: MOVE XCTINS,[.UDISMT A,]
|
||
JRST ACOMM
|
||
|
||
UUOCT==0
|
||
UUOTAB: JRST ILUUO
|
||
IRPS X,,[PDEC PDECI POCT POCTI PSIX PSIXI PASC PASCI PASCR PIMAGE]
|
||
UUOCT==UUOCT+1
|
||
X=UUOCT_33
|
||
JRST U!X
|
||
TERMIN
|
||
|
||
UUOMAX==.-UUOTAB
|
||
|
||
UUOH: 0
|
||
PUSH P,A
|
||
PUSH P,B
|
||
PUSH P,C
|
||
LDB A,[270400,,40] ;GET UUO AC,
|
||
HRRZ B,40 ;AND ADR
|
||
CAIG B,C ;SKIP IF ADR > AC C
|
||
MOVEI B,-2(P) ;ALLOW ARG IN ACS (EXCEPT 0)
|
||
LDB C,[330600,,40] ;OP CODE
|
||
CAIL C,UUOMAX
|
||
MOVEI C,0 ;GRT=>ILLEGAL
|
||
JRST @UUOTAB(C) ;GO TO PROPER ROUT
|
||
|
||
ILUUO: MOVEI B,[ASCIZ /Illegal UUO/]
|
||
MOVEI A,QBEG ; RECOVER FROM ILLUUO AT QBEG
|
||
HRRM A,UUOH ; SETUP FOR UUORET
|
||
UPASC: SKIPA C,[0] ; NO RETURN
|
||
UPASCR: MOVEI C,15 ; RETURN
|
||
HRLI B,440700 ; MAKE ASCII POINTER
|
||
ILDB A,B ; GET CHAR
|
||
JUMPE A,.+3 ; FINISH?
|
||
PUSHJ P,IOTA ; TYPE "A"
|
||
JRST .-3 ; AND GET ANOTHER
|
||
SKIPE A,C ; GET SAVED CR?
|
||
PUSHJ P,IOTA
|
||
JRST UUORET
|
||
|
||
UPIMAGE: HRLI B,440700
|
||
ILDB A,B
|
||
JUMPE A,UUORET
|
||
.IOT TYOC,A
|
||
JRST .-3
|
||
|
||
UPASCI: MOVE A,B ; PRT ASCII IMMEDIATE
|
||
PUSHJ P,IOTA
|
||
UUORET: POP P,C
|
||
POP P,B
|
||
POP P,A ; RESTORE AC'S
|
||
JRST 2,@UUOH
|
||
|
||
UPSIX: SKIPA A,[440600,,0(B)] ;PRINT A SIXBIT WORD
|
||
UPSIXI: MOVE A,[220600,,40] ;PRT SIXBIT IMMEDIATE
|
||
UPSLA: ILDB C,A
|
||
ADDI C,40 ;MAKE TO ASCII(+40)
|
||
CAIE C,40 ;BUT SKIP IF SPACE
|
||
PUSHJ P,IOTC
|
||
TLNE A,770000 ;SEE IF FINISH
|
||
JRST UPSLA ;NOPE, MORE
|
||
JRST UUORET
|
||
|
||
UPDEC: SKIPA C,[10.] ;GET BASE FOR DECIMAL
|
||
UPOCT: MOVEI C,8. ;OCTAL BASE
|
||
MOVE B,(B) ;GET ACTUAL WORD TO PRT
|
||
JRST .+3 ;JOIN CODE
|
||
UPDECI: SKIPA C,[10.] ;DECIMAL
|
||
UPOCTI: MOVEI C,8.
|
||
MOVEM C,BASE'
|
||
SKIPN A
|
||
HRREI A,-1 ;A=DIGIT COUNT
|
||
PUSHJ P,UPNUM ;PRINT NUMBR
|
||
JRST UUORET
|
||
|
||
UPNUM: IDIV B,BASE
|
||
HRLM C,(P) ;SAVE DIGIT
|
||
SOJE A,UPNUM1 ;DONE IF 0
|
||
SKIPG A ;+ => MORE
|
||
SKIPE B ;- => B=0 => DONE
|
||
PUSHJ P,UPNUM ;ELSE MORE
|
||
UPNUM1: HLRZ C,(P) ;RETREIVE DIGITS
|
||
ADDI C,"0 ;MAKE TO ASCII
|
||
; CAILE C,"9 ;IS IT GOOD DIG
|
||
; ADDI C,"A-"9-1 ;MAKE HEX DIGIT
|
||
|
||
; FALL THROUGH
|
||
|
||
IOTC: EXCH A,C
|
||
PUSHJ P,IOTA
|
||
EXCH A,C
|
||
POPJ P, ;RET
|
||
; IOTA. CHAR TO TTY FROM A
|
||
|
||
IOTA: TLNE FF,SILENC ; IS SHUTUP FLAG ON?
|
||
POPJ P, ; YES, EXIT
|
||
caige a,40 ; control char?
|
||
JRST IOTAC ; PUT OUT UPARROW CHAR
|
||
IOTAA: .IOT TYOC,A ; TYPE OUT A
|
||
IOTAB: TLZ FF,CRLF ; MARK LINE UNCLEAR
|
||
IOUPAR: POPJ P,"^
|
||
|
||
IOTLF: TLZN FF,CRLF
|
||
.IOT TYOC,A
|
||
POPJ P,
|
||
|
||
IOTCR: TLON FF,CRLF ; AND FLG
|
||
.IOT TYOC,A ; OUT WITH CR
|
||
IOP: POPJ P,"P
|
||
|
||
IOTAC: CAIN A,^M ; SKIP IF NOT CARR RET
|
||
JRST IOTCR ; PUT OUT CARR RET, FLAG
|
||
CAIN A,^J ;SKIP IF NOT LF
|
||
JRST IOTLF
|
||
CAIE A,^P ; CTRL P IS MAGIC OUTPUT ESCAPE, MUST WATCH
|
||
JRST IOTAA ; NOT ^P, JUST OUTPUT
|
||
.IOT TYOC,IOUPAR ; OUTPUT UPARROW ^
|
||
.IOT TYOC,IOP ; OUTPUT LETTER P
|
||
JRST IOTAB ; EXIT FLAGGING NOISE
|
||
; TSINT - HANDLE THE INTERRUPTS
|
||
|
||
TSINT: 0 ; MASK WD HERE
|
||
0 ; RETURN LOC
|
||
EXCH A,TSINT ; SWAP AC AND FLAGS
|
||
CAIN A,200000 ; SKIP IF NOT PDL OVERFLOW
|
||
MOVE P,[-PDLLNG,,PDL-1] ; REINITIIALIZE PDL ON OVERFLOW
|
||
PUSHJ P,DTTY ; GET TTY IF GIVEN AWAY
|
||
JUMPGE A,MONINZ ; JUMP FOR OWN INTERRUPT IF 4.9 BIT OFF
|
||
.USET USRO,[.RPIRQ,,A] ; GET USER INT BITS
|
||
.USET USRO,[.SAPIRQ,,A] ; RESET THOSE READ
|
||
TRZE A,2 ; ^Z TYPED at INFERIOR
|
||
JRST CTLZEE
|
||
TRZE A,4
|
||
PSIXI (SIXBIT /B42/) ; BAD LOC 42
|
||
TRZE A,20
|
||
PSIXI (SIXBIT /DPY/) ; DISPLAY INTERRUPT
|
||
TRZE A,40 ; ILL INS
|
||
PSIXI (SIXBIT /ILL/)
|
||
TRZE A,200
|
||
.DISMISS [VALRET] ; READ HIS STRING
|
||
TRZE A,400
|
||
PSIXI (SIXBIT /IOC/) ; IOCHANNEL ERROR
|
||
TRZE A,2000 ; .BREAK
|
||
JRST BRKINT
|
||
TRZE A,20000
|
||
PSIXI (SIXBIT /MPV/)
|
||
SKIPE A
|
||
POCT A ; PRT REST OF BITS
|
||
PRTPC: PASC [ASCIZ / in /]
|
||
.USET USRO,[.RJNAME,,USRN2] ; GET INF JOB NAME
|
||
PSIX USRN2 ; PRINT IT
|
||
PASC [ASCIZ / pc=/]
|
||
.USET USRO,[.RUPC,,A] ; FETCH PC
|
||
POCTI (A)
|
||
IFLUSH: JRST FLSHI ; FLUSH INPUT AND DISMISS TO QBEG
|
||
BRKINT: .USET USRO,[.RJNAME,,USRF+2] ;GET REAL JNAME
|
||
HRLI USRF,5 ;IMAGE UNIT OUTPUT FOR USER DEV
|
||
.OPEN USRO,USRF ;OPEN FOR OUTPUT
|
||
FATAL Cant open INF output on .BREAK 12
|
||
HRLI USRF,4 ;IMAGE UNIT INPUT
|
||
.OPEN SYSI,USRF ;OPEN FOR INPUT
|
||
FATAL Cant open INF input on .BREAK 12
|
||
|
||
BRKIN1: .USET USRO,[.RSV40,,A] ;GET .BREAK INSTR
|
||
HLRZ B,A
|
||
CAIN B,(.BREAK 16,) ;SKIP IF NOT 16
|
||
JRST BRK16 ;JUMP TO HANDLE BREAK 16
|
||
CAIE B,(.BREAK 12,) ;SKIP IF .BREAK 12
|
||
JRST BRKERR ;ERROR, JUST SAY .BREAK
|
||
HRRZS A
|
||
|
||
; CHECK MEMORY ADR HERE
|
||
|
||
.ACCESS USRO,A ;FOR POSSIBLE REWRITE
|
||
.ACCESS SYSI,A ;ADDRESS THE POINTER
|
||
.IOT SYSI,A ;FETCH IT
|
||
TLNN A,200000 ;SKIP IF 4.8 ON, MAY BE AOBJN POINTER
|
||
JRST BRKONE ;ONLY ONE COMMAND, DO IT
|
||
JUMPGE A,BRKERR ;SIGN BIT NOT ON, ERROR NOT AOBJN PTR
|
||
AOBJP A,.+2 ;BUMP POINTER, SKIP IF COUNTS OUT
|
||
TRO FF,BRKFLG ;SET, IN AOBJN LOOP FOR .BREAK
|
||
.IOT USRO,A ;STORE BUMPED PTR BACK
|
||
MOVEI A,-1(A) ;GET PREVIOUS ADR
|
||
.ACCESS SYSI,A ;SET ADDRESS
|
||
.IOT SYSI,A ;FETCH COMMAND WORD
|
||
|
||
BRKONE: HRRZ B,A ;GET ADDRESS OF CMMMAND
|
||
.ACCESS SYSI,B ;INPUT ADDRESS
|
||
.ACCESS USRO,B ;OUTPUT ADDRESS SET TOO
|
||
LDB B,[222100,,A] ;GET CODE
|
||
CAIL B,NBRKS ;SKIP IF IN RANGE
|
||
MOVEI B,0 ;SET TO ERROR IF NOT
|
||
XCT BRKTBL(B) ;DO THING
|
||
|
||
BRKTBL: JRST BRKERR ;IF RETURN, IS ERROR
|
||
JRST BRKSA ;1 START ADR
|
||
JUMPGE A,BRKFN ;2 FILE NAME (READ ONLY)
|
||
JUMPGE A,BRKSMT ;3 SYMTAB PTR (READ ONLY)
|
||
JRST BRKSYM ;4 SYMBOL, READ OR WRITE
|
||
JRST BRKCOM ;5 COMMAND READ OR WRITE
|
||
NBRKS==.-BRKTBL
|
||
|
||
BRKSA: JUMPL A,BRKSAW ;WRITE IF 4.9 BIT
|
||
.IOT USRO,STARTA ;READ MY START ADR
|
||
JRST BRKXX ;OK, EXIT (OR LOOP)
|
||
BRKSAW: .IOT SYSI,STARTA ;WRITE MY START ADR
|
||
HRRZS STARTA ; FLUSH FLAG BITS
|
||
JRST BRKXX ;EXIT
|
||
|
||
BRKCOM: JUMPL A,BRKCMW ;TO FETCH COMMAND BACK FROM INF
|
||
JUMPE COMSAV,BRKNUL ;NONE TO SEND
|
||
MOVE B,[440700,,COMMND]
|
||
ILDB A,COMSAV
|
||
IDPB A,B
|
||
JUMPN A,.-2
|
||
MOVE COMSAV,[440700,,COMMND] ;REFLECT FACT THAT COMMAND MOVED
|
||
|
||
.IOT SYSI,A ;DUMMY, TO ADVANCE ACCESS FOR READ
|
||
MOVSI B,-COMLNG
|
||
.IOT USRO,COMMND(B)
|
||
.IOT SYSI,A
|
||
JUMPN A,.+3 ;END IF NEXT WORD IN INF NOT 0
|
||
SKIPE COMMND(B) ;END IF WORD JUST SENT WAS 0
|
||
AOBJN B,.-4 ;LOOP FOR NEXT WORD
|
||
|
||
BRKXX: TRZE FF,BRKFLG ;SKIP IF LOOP FLAG NOT SET
|
||
JRST BRKIN1 ;ELSE LOOP
|
||
.CLOSE SYSI,
|
||
.USET USRO,[.SUSTP,,[0]] ;ALLOW HIM TO RUN AGAIN
|
||
JRST MONO
|
||
|
||
BRKERR: PSIXI (SIXBIT /BRK/)
|
||
JRST PRTPC
|
||
|
||
BRKCMW: SETZM COMSAV ;CLEAR OUT COMMAND SAVER
|
||
BRKSYM: JUMPL A,BRKXX ;SYMBOL WRITE IS NOP
|
||
BRKSMT: ;SYMTAB, WRITE IS ERROR, READ 0
|
||
BRKFN: JUMPL A,BRKERR ;FILE NAME DITTO
|
||
BRKNUL: .IOT USRO,[0] ;SET ONE WORD OF ZERO
|
||
JRST BRKXX ;NOW RETURN
|
||
|
||
BRK16: TRNE A,-1#140000
|
||
JRST BRKERR ;ERROR IF ANY OTHER BITS
|
||
TRNN A,100000 ;BIT SAYS DONT RESET TYI
|
||
.RESET TYIC,
|
||
TRNN A,40000 ;BIT SAYS DO :KILL
|
||
.DISMISS [BEG] ;ELSE JUST RETURN TO SUP
|
||
.DISMISS [KILL]
|
||
; HANDLE INTS TO MONIT (NOT INF)
|
||
|
||
MONINT: POP P,A ; RESTORE FLAGS AFTER TYILK
|
||
MONINZ: TRZE A,1
|
||
JRST TYILK
|
||
TRZE A,100 ; FIVE MINUTES
|
||
PASCR [ASCIZ /îSystem going down./]
|
||
TRNN A,-1 ; ANY LEFT?
|
||
JRST MONO
|
||
POCTI 6,(A) ; PRINT BITS
|
||
PSIXI (SIXBIT /INT/)
|
||
MOVE A,TSINT+1
|
||
JRST XFATAL
|
||
;***** FATAL. UFO INT IN MONIT
|
||
|
||
MONO: TLNE FF,WASGON ; SKIP ATTY IF TTY WAS NOT GOBBLED FROM INF
|
||
PUSHJ P,ATTY ; GIVE TTY BACK TO INF
|
||
MOVE A,TSINT ; RESTORE AC STORED HERE
|
||
.DISMISS TSINT+1
|
||
|
||
TYILK: PUSH P,A ; STORE FLAGS
|
||
TYILK1: MOVEI A,PRTC ; CHECK CHARS FOR INPUT TTY
|
||
.ITYIC A,
|
||
SKIPA A,[TYIC]
|
||
JRST .-3
|
||
.ITYIC A,
|
||
JRST MONINT
|
||
CAIN A,^Z
|
||
JRST flshio ; cause question and command fetch
|
||
CAIE A,^G
|
||
CAIN A,^S ; ^S AND ^G THE SAME
|
||
TLOA FF,SILENC ; SET SILENCE FLAG
|
||
JRST TYILK1 ;GO BACK, SEE IF ANY MORE
|
||
.RESET TYOC, ; HERE ^S TO SHUT UP OUTPUT ONLY
|
||
JRST TYILK1
|
||
|
||
FLSHIO: .reset tyoc, ; empty output buffer
|
||
FLSHI: .reset tyic, ; likewise for input
|
||
.dismiss [qbeg] ; away from in level to reinit
|
||
|
||
; VALRET - HANDLE VALUE RETURN FROM INFEERIOR
|
||
VALRET: .USET USRO,[.RSV40,,A] ; GET ACTUAL .VALUE UUO FROM USERS 40
|
||
HRRZS A
|
||
JUMPE A,VALRE1
|
||
HRLI USRF,6 ;SET USRF FOR IMAGE BLOCK INPUT
|
||
.USET USRO,[.RJNAME,,USRF+2] ; GET LOSERS JNAME
|
||
.OPEN SYSI,USRF
|
||
FATAL VALRET OPEN OF INF FAILED (VALRET)
|
||
TLZ A,-1 ;ZERO LEFT HALF FOR ACCESSING
|
||
.ACCES SYSI,A ;SET ADDRESS TO READ VALRET STRING
|
||
.USET SYSI,[.RMEMT,,B] ; GET TOP OF INF CORE
|
||
SUB A,B ; GET -DIST FROM VAL TO TOP
|
||
CAMG A,[-COMLNG] ; KEEP LESSER OF THAT AND BUFLEN
|
||
MOVEI A,-COMLNG ; FORCE TO BUFFER SIZE
|
||
HRL B,A ; PUT IN LEFT HALF
|
||
HRRI B,COMMND ; POINT TO COMMAND BUFFER
|
||
.IOT SYSI,B ;MOVE STRING OVER
|
||
TLO FF,VALCOM ;SET TO SCAN
|
||
MOVE COMPTR,[440700,,COMMND] ;RESET COMMAND SCANNER
|
||
.CLOSE SYSI,
|
||
;****** .LISTEN TYIC, ;WAIT FOR TTY QUIET
|
||
;****** TLNN FF,RDF ;DO NOT RESET IF READING ILE
|
||
.RESET TYIC,
|
||
TLZ FF,CRLF ; MAKE NO ASSUMPTIONS
|
||
JRST BEG
|
||
|
||
VALRE1: PSIX [SIXBIT /.VALUE/]
|
||
JRST PRTPC
|
||
|
||
CTLZEE: TLZ FF,SILENC
|
||
PASC [ASCIZ / back to MONIT/]
|
||
JRST FLSHI ; FLUSH INPUT AND TYPE ?
|
||
CKDIE: .DIETIM A, ;GET TIME TIL SYS DOWN
|
||
JUMPL A,.+3 ;NO DYING NOW
|
||
pushj p,ptime ;convert and print time period
|
||
PASCR [ASCIZ / 'til sys down./]
|
||
POPJ P,
|
||
|
||
time: pasc [asciz /Today is /]
|
||
.rdate d,
|
||
psix d
|
||
pasc [asciz /îIt is now /]
|
||
.rtime d,
|
||
psix d
|
||
pasci ^M
|
||
.rdtime a,
|
||
pushj p,ptime
|
||
pascr [asciz / since sys up'd./]
|
||
pushj p,ckdie
|
||
jrst beg
|
||
ptime: IDIVI A,30.*60.*60. ;HOURS IN A
|
||
IDIVI A+1,30.*60. ;MINS IN A+1
|
||
IDIVI A+2,30. ;SEC IN A+2
|
||
PDECI (A) ;PRT HRS
|
||
PASCI ":
|
||
PDECI 2,(A+1) ;PRT MINS
|
||
PASCI ":
|
||
PDECI 2,(A+2) ;PRT SECS
|
||
popj p,
|
||
|
||
CONSTANTS
|
||
|
||
INFORM \.,TOP OF PURE
|
||
|
||
IMPURE
|
||
DELCH: ASCIZ / /
|
||
DELIN: ASCIZ /H]/
|
||
STARTA: 0
|
||
LOGNAM: 0
|
||
DSKNAM: 0 ;CURRENT USER FOR LOGIN, "USER"
|
||
SYSF: SIXBIT / $SYSTS /
|
||
LSTF: SIXBIT / DSK.FILE.(DIR) /
|
||
ERRF: SIXBIT / ERR # /
|
||
|
||
VARIABLES
|
||
|
||
COMMND: ;HERE STARTS COMMND,IO BUFFER
|
||
COMLNG==30 ;WDS FOR COMMAND
|
||
|
||
STARTU: MOVE P,[-PDLLNG,,PDL-1]
|
||
.OPEN TYOC,[SIXBIT / 1TTYMONITRTTYOUT/] ; DISPLAY, UNIT ASCII OUT
|
||
JRST ENDLOG ; NO TTY, LOGOUT IMMEDIATE
|
||
.OPEN TYIC,[SIXBIT / TTYMONITRTTYIN/]
|
||
FATAL CANT OPEN TTY INPUT (STARTUP)
|
||
MOVEI FF,0 ;RESET ALL FLAGS
|
||
.STATUS TYIC,A
|
||
TRNE A,2 ;IS IT GE-BITER ? (DISPLAY)
|
||
TLO FF,IMLACF ; SET CONSOLE AS IMLAC, FOR SEXY RUBOUT (SEE "RUB")
|
||
PASCI ^M ;CLEAR LINE
|
||
PSIX [SIXBIT /MONIT./]
|
||
PSIX [.FNAM2]
|
||
PASCI ^M ;CR
|
||
PUSHJ P,CKDIE ;CHECK IF SYS GOING DOWN
|
||
MOVEI A,221561 ;MASK WORDS FOR INTERRUPTS
|
||
;****** CHRTYP DPMPV ILLINS SYSDIE IOCHNER MPVINF MPV PDLOV + BAD42 _Z .VALUE .BREAK _N
|
||
MOVSI A+1,1 ;BIT FOR INFERIOR
|
||
.SETM2 A, ;SET MASKWDs
|
||
MOVEI USRF,(SIXBIT /USR/)
|
||
MOVEI PRTF,(SIXBIT /DSK/) ; SET UP INIT DEVICE
|
||
MOVSI PRTN1,(SIXBIT /@/)
|
||
MOVSI PRTN2,(SIXBIT /</)
|
||
.SUSET [.RUNAM,,LOGNAM] ; GET USER NAME
|
||
AOSE LOGNAM ; -1 NOT IN, SET TO ZERO
|
||
SOSA LOGNAM ; HERE IF LOGGED IN, RESTORE NAME, SKIP TO BEG
|
||
.OPEN PRTC,[SIXBIT / SYSSYSTEMMAIL/]
|
||
JRST BEG ; NO SYS MAIL
|
||
JRST XPRINT ; YES, THERE IS, PRINT IT
|
||
|
||
CONSTANTS
|
||
VARIABLES
|
||
|
||
TBLOCK=COMMND+COMLNG ; LEAVE COMMAND BUFF SEPARATE
|
||
IFL .-TBLOCK-8,LOC TBLOCK+8
|
||
|
||
|
||
INFORM \.,TOP OF IMPURE
|
||
|
||
END STARTU
|
||
|