.NLIST TTM,BEX .ENABLE LC KL11=177560 ;CONSOL KVECT=60 KRCSR=KL11 KRBUF=KL11+2 KTCSR=KL11+4 KTBUF=KL11+6 DL11E=176500 ;SLAVE KB DVECT=330 DRCSR=DL11E DRBUF=DL11E+2 DTCSR=DL11E+4 DTBUF=DL11E+6 CR=15 ;CARRIAGE RETURN LF=12 ;LINE FEED DELAY=4000 ;ECHO PAUSE FACTOR CTRL.A=1 ;^A INTERRUPT CTRL.V=22. ;^V COMMANDFILE CTRL.W=23. ;^W LOGFILE CTRL.B=2 ;^B LINE BY LINE ;STANDARD CONTROLS CTRL.Q=17. ;^Q RESUME STALL ;START PRINTER CTRL.S=19. ;^S STALL ;STOP PRINTER CTRL.R=18. ;^R RESUME READ ;START PUNCH CTRL.T=20. ;^T STOP READ ;START PUNCH ERRWD=52 .MCALL .REGDEF,..V2.. .MCALL .CSISPC,.ENTER,.LOOKUP,.CLOSE .MCALL .READW,.WRITW .MCALL .EXIT .REGDEF ..V2.. GO: CLR STALLD CLR OPENO CLR OPENI CLR LINED MOV DVECT,STRAPD ;CONTROL SLAVE MOV DVECT+2,STRAPD+2 MOV #TRAPD,DVECT MOV #341,DVECT+2 ;VECTORS BIS #100,DRCSR ;ENABLE RECIEVE INTERRUPT MOV KVECT,STRAPK ;CONTROL CONSOL MOV KVECT+2,STRAPK+2 MOV #TRAPK,KVECT MOV #341,KVECT+2 ;VECTORS BIS #100,KRCSR ;ENABLE RECIEVE INTERRUPT PASS: CLR CYCLE IN0: JSR PC,TTIN0 ;ANY CONSOL INPUT BCS 10$ ;NOTHING INC CYCLE ;SOMETHING CMPB #CTRL.A,R0 ;EXIT BNE 7$ JMP ENDIT 7$: CMPB #CTRL.W,R0 ;LOG IT BNE 4$ JSR PC,OPNLOG BR 10$ 4$: CMPB #CTRL.V,R0 ;COMMAND FILE BNE 12$ JSR PC,OPNCOM BR 10$ 12$: CMPB #CTRL.B,R0 ;LINE MODE BNE 1$ JSR PC,LINCON BR 10$ 1$: JSR PC,OUT1 10$: IN1: JSR PC,TTIN1 ;ANY SLAVE INPUT BCS 1$ ;NOTHING INC CYCLE ;SOMETHING MOVB BUF1,R0 JSR PC,OUT0 ;TYPE IT TST OPENO ;LOGGING? BEQ 1$ JSR PC,WRITEO 1$: INI: ;ANY DRIVEN INPUT TST OPENI ;ANY FILE? BEQ 1$ ;NO-SKIP TST CYCLE ;QUIET YET? BNE 1$ ;NO-SKIP TST STALLD ;STALLED? BNE 1$ ;YES-SKIP TST HIT ;ECHO HAD BGT 2$ ;NO-SO WAIT JSR PC,READI BCS 1$ MOV #DELAY,HIT CMPB BUF0,#CR ;WAS THAT CR BNE 3$ MOV #1,CRFLAG 3$: JSR PC,OUT1 BR 1$ 2$: DEC HIT 1$: JMP PASS TTIN0: CMP END0,STAR0 ;ANYTHING OUTSTANDING BNE 2$ ;YES SEC BR 4$ 2$: MOV END0,R5 MOVB RING0(R5),BUF0 MOVB BUF0,R0 INC END0 CMP END0,#512. BLT 30$ CLR END0 30$: CLC 4$: RTS PC TTIN1: CMP END1,STAR1 BNE 2$ SEC BR 4$ 2$: MOV END1,R5 MOVB RING1(R5),BUF1 INC END1 CMP END1,#512. BLT 30$ CLR END1 30$: CLC 4$: RTS PC QUIT: JSR PC,PRINT ENDIT: BIC #100,KRCSR ; DEENABLE KB MOV STRAPK,KVECT MOV STRAPK+2,KVECT+2 BIC #100,DRCSR ; DEENABLE KB MOV STRAPD,DVECT MOV STRAPD+2,DVECT+2 TST OPENO BEQ 2$ JSR PC,SHUTO 2$: .CLOSE FILEI .EXIT LINCON: TST LINED BNE 1$ MOV #1,LINED BR 2$ 1$: CLR LINED 2$: RTS PC PROMI: .ASCII 'Input from '<200> .EVEN OPNCOM: ;GET A COMMAND FILE TST OPENI ;OPEN OR CLOSE BEQ 1$ JSR PC,SHUTI ;SHUT IT BR 2$ 1$: MOV #PROMI,QPRINT JSR PC,PRINT MOV COM,DEFEXT+2 JSR PC,SCAN ;OPEN A COMMAND FILE BCS 3$ .LOOKUP #AREA,FILEI,#FREE BCS 3$ MOV #1,OPENI MOV #-1,BLOCKI MOV #513.,COUNTI 2$: RTS PC 3$: MOV #ERLUK,QPRINT JSR PC,PRINT BR 2$ ERLUK: .ASCIZ 'Lookup Error' .EVEN PROMO: .ASCII 'Output Log to '<200> .EVEN OPNLOG: ;DEMAND FOR LOGFILE TST OPENO ;IS IT OPEN OR CLOSE BEQ 1$ JSR PC,SHUTO ;CLOSE IT CLR OPENO BR 2$ 1$: MOV #PROMO,QPRINT JSR PC,PRINT MOV LOG,DEFEXT+2 JSR PC,SCAN ;OPEN A LOG FILE BCS 3$ TST FREE+2 ;A REAL FILE BEQ 3$ .ENTER #AREA,FILEO,#FREE,FREE+10 BCS 3$ MOV #1,OPENO CLR COUNTO MOV #-1,BLOCKO 2$: RTS PC 3$: MOV #ERENT,QPRINT JSR PC,PRINT BR 2$ ERENT: .ASCIZ 'Enter Error' .EVEN OCLOSD: .ASCIZ 'Output closed' .EVEN SHUTO: CLRB BUF1 1$: TST COUNTO BLE 3$ JSR PC,WRITEO BR 1$ 3$: .CLOSE FILEO MOV #OCLOSD,QPRINT JSR PC,PRINT RTS PC ICLOSD: .ASCIZ 'End of Input' .EVEN SHUTI: .CLOSE FILEI CLR OPENI MOV #ICLOSD,QPRINT JSR PC,PRINT RTS PC ERR6: .ASCIZ 'I/O Channel is not Open' ERR7: .ASCIZ 'Attempt to write beyond EOF' ERR8: .ASCIZ 'DISK Error' .EVEN TRAPK: MOV R0,-(SP) MOV R5,-(SP) MOVB KRBUF,R0 BIC #177600,R0 ;LOSE PARITY AND GARBAGE BEQ 4$ ;IGNORE NULLS CMPB R0,#CTRL.R BEQ 10$ CMPB R0,#CTRL.T BEQ 11$ MOV STAR0,R5 MOVB R0,RING0(R5) INC STAR0 CMP STAR0,#512. BLT 30$ CLR STAR0 30$: CMP STAR0,END0 BEQ FULLUP 4$: MOV (SP)+,R5 MOV (SP)+,R0 RTI ;RESUME 10$: CLR STALLD ;^R RESUME READ BR 4$ 11$: MOV #-1,STALLD ;^T STOP READ BR 4$ FULLUP: MOV #FULL,QPRINT JMP QUIT FULL: .ASCIZ 'Input is too Fast' .EVEN TRAPD: MOV R0,-(SP) MOV R5,-(SP) MOVB DRBUF,R0 BIC #177600,R0 ;LOSE PARITY AND GARBAGE BEQ 4$ ;IGNORE NULLS CMPB R0,#40 ;BLANK BGE 21$ CMPB R0,#7 BLT 22$ CMPB R0,#CR BLT 21$ BEQ 27$ CMPB R0,#CTRL.Q BEQ 10$ CMPB R0,#CTRL.S BEQ 11$ 22$: MOVB #7,R0 ;BELL BR 26$ 27$: CLR CRFLAG 21$: TST CRFLAG BNE 26$ CLR HIT ;SOMETHING ACTIVATED 26$: MOV STAR1,R5 MOVB R0,RING1(R5) INC STAR1 CMP STAR1,#512. BLT 30$ CLR STAR1 30$: CMP STAR1,END1 BEQ FULLUP 4$: MOV (SP)+,R5 MOV (SP)+,R0 RTI ;RESUME 10$: CLR STALLD BR 4$ 11$: MOV #-1,STALLD BR 4$ WRITEO: MOV COUNTO,R1 MOVB BUF1,BUFO(R1) INC R1 CMP R1,#512. BLT 5$ JSR PC,STOP INC BLOCKO .WRITW #AREA,FILEO,#BUFO,#256.,BLOCKO BCS 4$ JSR PC,START CLR R1 5$: MOV R1,COUNTO RTS PC 4$: CMPB @#ERRWD,#1 BLT 1$ BEQ 2$ MOV #ERR6,QPRINT BR 3$ 1$: MOV #ERR7,QPRINT BR 3$ 2$: MOV #ERR8,QPRINT 3$: JMP QUIT STOP: MOVB #CTRL.S,BUF0 ;^S JSR PC,OUT1 RTS PC START: MOVB #CTRL.Q,BUF0 ;^Q JSR PC,OUT1 RTS PC READI: 99$: MOV COUNTI,R1 INC R1 CMP R1,#512. BLT 5$ JSR PC,STOP INC BLOCKI .READW #AREA,FILEI,#BUFI,#256.,BLOCKI BCS 4$ JSR PC,START CLR R1 5$: MOV R1,COUNTI MOVB BUFI(R1),R0 BIC #177600,R0 BEQ 99$ CMPB LASTX,#CR ;WAS LAST CR BNE 98$ CMPB R0,#LF ;IS THIS LF BNE 98$ JSR PC,SAVLAS BR 99$ 98$: JSR PC,SAVLAS MOVB R0,BUF0 CLC RTS PC 4$: CMPB @#ERRWD,#1 BLT 1$ BEQ 2$ MOV #ERR6,QPRINT BR 3$ 1$: JSR PC,SHUTI JSR PC,START SEC ;EOF RTS PC 2$: MOV #ERR8,QPRINT 3$: JMP QUIT SAVLAS: MOVB R0,LASTX CMPB #CR,R0 BNE 1$ TST LINED BEQ 1$ MOV #1,STALLD ;STOP READER 1$: RTS PC SCAN: MOV SP,SPSAVE MOV #TEXBUF,R1 2$: JSR PC,TTIN0 BCS 2$ CMPB R0,#CR ;CR BEQ 3$ MOVB R0,(R1)+ JSR PC,OUT0 BR 2$ 3$: MOVB #'=,(R1)+ CLRB (R1) JSR PC,CRLF .CSISPC #FREE,#DEFEXT,#TEXBUF BCS 4$ TST (SP) BNE 4$ CLC BR 5$ 4$: SEC 5$: MOV SPSAVE,SP RTS PC PRINT: JSR PC,CRLF MOVB #7,R0 JSR PC,OUT0 MOV QPRINT,R1 1$: MOVB (R1)+,R0 BEQ 2$ CMPB R0,#200 BEQ 3$ JSR PC,OUT0 BR 1$ 2$: JSR PC,CRLF 3$: RTS PC CRLF: MOVB #CR,R0 JSR PC,OUT0 MOVB #LF,R0 JSR PC,OUT0 RTS PC OUT1: MOVB BUF0,@#DTBUF 1$: BIT #200,@#DTCSR ;READY BEQ 1$ RTS PC OUT0: MOVB R0,@#KTBUF 1$: BIT #200,@#KTCSR ;READY BEQ 1$ RTS PC BUF0: .BYTE 0 LASTX: .BYTE 0 BUF1: .BYTE 0 .EVEN SPSAVE: .WORD 0 FILEO: .WORD 3 FILEI: .WORD 4 OPENO: .WORD 0 OPENI: .WORD 0 LOG: .RAD50 'LOG' COM: .RAD50 'COM' DEFEXT: .WORD 0 .WORD 0 .WORD 0 .WORD 0 .WORD 0 TEXBUF: .BLKB 80. COUNTI: .WORD 513. COUNTO: .WORD 0 BLOCKI: .WORD -1 BLOCKO: .WORD -1 BUFI: .BLKW 256. BUFO: .BLKW 256. CRFLAG: .WORD 0 CYCLE: .WORD 0 QPRINT: .WORD 0 HIT: .WORD 0 STRAPK: .BLKW 2 ;SAVE TRAP (RECIEVE), CONSOL STRAPD: .BLKW 2 ;SAVE TRAP(RECIEVE), SLAVE STALLD: .WORD 0 LINED: .WORD 0 STAR0: .WORD 0 END0: .WORD 0 RING0: .BLKW 256. STAR1: .WORD 0 END1: .WORD 0 RING1: .BLKW 256. AREA: .BLKW 20 FREE: .WORD 0 .END GO