.MCALL .MODULE .MODULE LS,RELEASE=X05,VERSION=01,COMMENT=,AUDIT=YES ;MODULE LS,RELEASE=V05,VERSION=01,COMMENT=,AUDIT=YES ; COPYRIGHT (c) 1984 BY ; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. ; ALL RIGHTS RESERVED. ; ; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED ; ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE ; INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER ; COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY ; OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY ; TRANSFERRED. ; ; THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE ; AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT ; CORPORATION. ; ; DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS ; SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL. ; Altered to remove timer support and allow full eight bit bytes to be ; transmitted. ; ; Altered the CTRL set option to transmit all control codes without ; modification. This effectively disables (or disrupts) all software emulation ; of formfeeds, tabs, etc, and also disables line counts, etc. .SBTTL MACROS AND DEFINITIONS .DSABL GBL .IIF NDF LS$PC LS$PC = 0 .IIF NDF LS$PRI LS$PRI = 4 .iif ndf ls$tim ls$tim = 0 .IIF NDF LS.CSZ LS.CSZ = 132. .IIF NDF LS.PSZ LS.PSZ = 66. .IF NE LS$PC LS$CSR = 173400 LS$VEC = 220 .ENDC .MCALL .DRDEF, .INTEN, .MTPS, .assume .assume ^/<1-ls$tim> & ls$tim/ eq 0 .assume ^/<1-tim$it> & tim$it/ eq 0 F.BADR = 2 .DRDEF LS,41,WONLY$,0,176500,300 SYSPTR = 54 CONFG2 = 370 PRO$ = 020000 PSW = 177776 RC.IE = 000100 XC.IE = 000100 IC0DR = 173200 IC0CR = IC0DR+2 C.CSIM = 030 C.CSM = 050 C.SSM = 070 C.CSI = 110 C.SSI = 130 RC.ID = 005 XC.ID = 006 LS$BUF = LS$CSR LS$STA = LS$CSR+2 LS$MOD = LS$CSR+4 LS$CMD = LS$CSR+6 ST.DSR = 200 ST.FE = 040 ST.OE = 020 ST.PE = 010 ST.RD = 002 ST.TR = 001 M1.SBM = 300 SB.1 = 100 SB.15 = 200 SB.2 = 300 M1.PT = 040 M1.PEN = 020 M1.CLM = 014 CL.5 = 000 CL.6 = 004 CL.7 = 010 CL.8 = 014 M1.REQ = 002 M2.REQ = ^B10110000 B.50 = 00 B.75 = 01 B.110 = 02 B.134 = 03 B.150 = 04 B.300 = 05 B.600 = 06 B.1200 = 07 B.1800 = 10 B.2000 = 11 B.2400 = 12 B.3600 = 13 B.4800 = 14 B.7200 = 15 B.9600 = 16 B.192K = 17 CM.OM1 = 200 CM.OM0 = 100 CM.RTS = 040 CM.RE = 020 CM.FB = 010 CM.RXE = 004 CM.DTR = 002 CM.TXE = 001 HT = 11 LF = 12 FF = 14 CR = 15 CTRLQ = 'Q-100 CTRLS = 'S-100 SPACE = 40 .SBTTL Tables for SET code .ASECT .IF NE LS$PC . = 120 SPEEDT: .WORD 50., 75., 110., 134., 150., 300. .WORD 600., 1200., 1800., 2000., 2400., 3600. .WORD 4800., 7200., 9600., 19200. .WORD 0 ISPEED: .WORD M2.REQ!B.4800 IMR1: IMR2: .WORD LS$CSR+4 ICMD: .WORD LS$CSR+6 .ENDC .IIF GE <.-176> .ERROR .SBTTL INSTALLATION CODE .ENABL LSB . = 200 NOP MOV @#SYSPTR,R0 BIT #PRO$,CONFG2(R0) .IF EQ LS$PC BNE 30$ .IFF BEQ 20$ CMP 176,#173400 BNE 30$ TST @ICMD MOVB #,@IMR1 MOVB ISPEED,@IMR2 CLR @ICMD BR 20$ .ENDC .IF NE LS$PC I.SPEE: MOV PC,R1 ADD #SPEEDT-.,R1 10$: TST (R1) BEQ 30$ CMP R0,(R1)+ BNE 10$ SUB PC,R1 SUB #,R1 ASR R1 BIS #M2.REQ,R1 TST @ICMD TST @IMR1 MOVB R1,@IMR2 MOV R1,ISPEED .ENDC 20$: TST (PC)+ 30$: SEC RTS PC .DSABL LSB I.SKIP: TST R0 BEQ 10$ INC R0 10$: MOV R0,O$SKIP CMP O$LENG,R0 RTS PC I.VEC: MOV R0,LS$VTB ADD #4,R0 MOV R0,LS$VTB+6 CMP R3,R0 RTS PC .IIF GE <.-400> .ERROR .SBTTL SET OPTION PARAMETER TABLE .DRSET CR,NOP,O.CR,NO .DRSET CSR,2,O.CSR,OCT ; .DRSET CTRL,,O.CTRL,NO .drset CTRL,,O.CTRL,NO .DRSET FORM,100000!LF,O.FF,NO .DRSET FORM0,NOP,O.FORM0,NO .IF NE .DRSET HANG,NOP,O.HANG,NO .ENDC .DRSET LC,40,O.LC,NO .DRSET LENGTH,1,O.LENG,NUM .DRSET SKIP,-1,O.SKIP,NUM .IF NE LS$PC .DRSET SPEED, NOP, O.SPEE, NUM .ENDC .DRSET TAB,,O.TAB,NO .DRSET VECTOR,477,O.VEC,OCT .DRSET WIDTH,30.,O.WIDTH,NUM .SBTTL SET OPTION PROCESSING ROUTINES .ENABL LSB O.SKIP: BR I.SKIP .IF NE LS$PC O.SPEE: BR I.SPEE .ENDC O.VEC: BR I.VEC O.CR: MOV (PC)+,R3 BEQ RSTC-O$CR+. MOV R3,O$CR RTS PC O.FORM0:MOV (PC)+,R3 BEQ BLK0-O$FORM+. MOV R3,O$FORM RTS PC O.LC: CLR R3 NOP MOV R3,O$LC RTS PC ;O.CTRL: MOV (PC)+,R3 ; BNE PRINTC-O$CTRL+. ; MOV R3,O$CTRL ; RTS PC o.ctrl: mov (pc)+,r3 br printc-o$ignore+. mov r3,o$ignore rts pc O.TAB: MOV (PC)+,R3 BEQ HDWTAB-O$TAB+. MOV R3,O$TAB RTS PC O.CSR: MOV R0,176 MOV R0,RCSR ADD R3,R0 MOV R0,RBUF ADD R3,R0 MOV R0,XCSR .IF NE LS$PC MOV R0,IMR1 .ENDC ADD R3,R0 MOV R0,XBUF .IF NE LS$PC MOV R0,ICMD .ENDC CMP R0,#160000 RTS PC O.FF: MOV (PC)+,R3 .WORD FF MOV R3,O$FF RTS PC O.LENG: MOV R0,O$LENG MOV R0,LINCTR BR 1$ O.WIDT: MOV R0,COLCNT MOV R0,O$WIDT 1$: CMP R0,R3 RTS PC .IF NE O.HANG: MOV (PC)+,R3 BR EXIT-O$HANG+. MOV R3,O$HANG RTS PC .ENDC .IIF GE <.-1000> .ERROR .DSABL LSB .SBTTL DRIVER ENTRY .ENABL LSB .DRBEG LS .IF NE LS$PC ASR #1 BCC 10$ MOV @#SYSPTR,R0 BIT #PRO$,CONFG2(R0) BEQ 10$ MOV SP,LSPCFG .ENDC 10$: MOV LSCQE,R4 ASL Q$WCNT(R4) BEQ LSDONE BCC LSERR JSR PC,ENAINI .IF NE LS$PC TST LSPCFG BEQ 15$ MOVB #,@CMD MOVB #,@#IC0CR MOVB #,@#IC0CR 15$: .ENDC TST STALLF .IF EQ BEQ 20$ .IFF BEQ O$HANG .ENDC JSR PC,ENAOUI 20$: RTS PC .DSABL LSB .SBTTL REGISTERS AND VECTOR TABLES RCSR: DBUF: .WORD LS$CSR RBUF: STAT: .WORD LS$CSR+2 XCSR: MODE: .WORD LS$CSR+4 XBUF: CMD: .WORD LS$CSR+6 .DRVTB LS,LS$VEC,LIINT .DRVTB ,LS$VEC+4,LSINT .SBTTL INPUT INTERRUPT SERVICE .ENABL LSB .DRAST LI,LS$PRI,LSABT TST LSCQE BEQ 30$ JSR PC,GETCHR BIC #^C<177>,R4 CMPB R4,#CTRLQ BNE 20$ .IF NE JSR PC,CTIMER .ENDC 10$: MOV SP,STALLF JSR PC,ENAOUI BR 30$ 20$: CMPB R4,#CTRLS BNE 30$ JSR PC,DISOUI CLR STALLF .IF NE O$HANG: BR EXIT JSR PC,TIMER .ENDC EXIT: 30$: RTS PC .DSABL LSB .SBTTL OPERATION COMPLETE .ENABL LSB LSABT: .IF NE TST TCOMPL BEQ LSDONE CALL LSCLR .CTIMIO TBLOCK CLR TCOMPL .ENDC BR LSDONE LSERR: BIS #HDERR$,@-(R4) LSDONE: CALL LSCLR .DRFIN LS LSCLR: CLR LIFBLK+F.BADR .IF NE LS$PC TST LSPCFG BEQ 10$ BIC #^C,@CMD 10$: .ENDC JSR PC,DISOUI JSR PC,DISINI RTS PC .DSABL LSB .SBTTL OUTPUT INTERRUPT SERVICE .ENABL LSB .DRAST LS,LS$PRI,LSABT JSR PC,DISOUI MOV LSCQE,R4 BEQ 20$ TST @R4 O$FORM: BEQ BLK0 TST STALLF BEQ 20$ ASLB (PC)+ TABFLG: .WORD 0 BNE TAB MOV (PC)+,R5 FFFLAG: .WORD 0 BNE DOFORM IGNORE: TST Q$WCNT(R4) BEQ LSDONE clr r5 .IF EQ MMG$T ; MOVB @Q$BUFF(R4),R5 bisb @q$buff(r4),r5 INC Q$BUFF(R4) .IFF JSR PC,@$GTBYT ; MOV (SP)+,R5 bisb (sp)+,r5 .ENDC INC Q$WCNT(R4) ; BIC #^C<177>,R5 ; BEQ IGNORE ASRB (PC)+ SKPFLG: .WORD 0 BCC 10$ CMPB R5,#FF BEQ IGNORE 10$: CMPB R5,#SPACE o$ignore: ;patch here for CTRL BLO CHRTST CMPB R5,#'A!40 BLO PCHAR CMPB R5,#'Z!40 BHI PCHAR BIC (PC)+,R5 O$LC: .WORD 0 PCHAR: DEC COLCNT BLT IGNORE ASLB (PC)+ TABCNT: .WORD 1 BEQ RSTTAB PRINTC: JSR PC,PUTCHR JSR PC,ENAOUI 20$: RTS PC CHRTST: CMPB R5,#HT O$TAB: BEQ TABSET CMPB R5,#FF BEQ SENDFF CMPB R5,#CR O$CR: BEQ RSTC CMPB R5,#LF O$CTRL: BNE PRINTC CMP LINCTR,(PC)+ O$SKIP: .WORD 0 BLE SKIPFF DOFORM: DEC LINCTR BGT RSTC NEWPAG: MOV (PC)+,(PC)+ O$LENG: .WORD LS.PSZ LINCTR: .WORD LS.PSZ CLR FFFLAG RSTC: MOV (PC)+,(PC)+ O$WIDT: .WORD LS.CSZ COLCNT: .WORD LS.CSZ CLR TABFLG RSTTAB: MOV #1,TABCNT BR PRINTC TABSET: MOV TABCNT,TABFLG TAB: MOV #SPACE,R5 BR PCHAR HDWTAB: ASLB TABCNT BEQ RSTTAB DEC COLCNT BR HDWTAB SKIPFF: INC SKPFLG BR SENDFF BLK0: INC @R4 SENDFF: MOV #CR,R5 O$FF = .+2 MOV #FF,FFFLAG BMI RSTC CLR LINCTR BR RSTC .IIF GE <-1000> .ERROR .DSABL LSB .IF NE .SBTTL TIMER SUPPORT ROUTINES TIMER: TST TCOMPL BNE 10$ MOV LSCQE,R4 MOVB Q$JNUM(R4),R4 ASR R4 ASR R4 ASR R4 BIC #^C<16>,R4 MOV R4,TJOBNM MOV PC,R4 ADD #OFFLIN-.,R4 MOV R4,TCOMPL .FORK LIFBLK .TIMIO TBLOCK,0,60.*5 10$: RTS PC CTIMER: TST TCOMPL BEQ 10$ .FORK LIFBLK .CTIMIO TBLOCK CLR TCOMPL 10$: RTS PC OFFLIN: MOV @SP,-(SP) .IF EQ MMG$T CLR 2(SP) .IFF MOV @#PSW,2(SP) .ENDC .MTPS #340 .INTEN 0,PIC CLR TCOMPL MOV LSCQE,R4 JMP LSERR .ENDC .SBTTL INTERRUPT ENABLE/DISABLE ROUTINES ENAINI: .IF NE LS$PC TST LSPCFG BNE 10$ .IFTF BIS #RC.IE,@RCSR RTS PC .IFT 10$: MOVB #,@#IC0CR RTS PC .ENDC DISINI: .IF NE LS$PC TST LSPCFG BNE 10$ .IFTF BIC #RC.IE,@RCSR RTS PC .IFT 10$: MOVB #,@#IC0CR RTS PC .ENDC ENAOUI: .IF NE LS$PC TST LSPCFG BNE 10$ .IFTF BIS #XC.IE,@XCSR RTS PC .IFT 10$: MOVB #,@#IC0CR RTS PC .ENDC DISOUI: .IF NE LS$PC TST LSPCFG BNE 10$ .IFTF BIC #XC.IE,@XCSR RTS PC .IFT 10$: MOVB #,@#IC0CR RTS PC .ENDC .SBTTL CHARACTER GET/PUT ROUTINES GETCHR: .IF NE LS$PC TST LSPCFG BNE 10$ .IFTF MOVB @RBUF,R4 RTS PC .IFT 10$: MOVB @DBUF,R4 RTS PC .ENDC PUTCHR: .IF NE LS$PC TST LSPCFG BNE 10$ .IFTF MOVB R5,@XBUF RTS PC .IFT 10$: MOVB R5,@DBUF RTS PC .ENDC .SBTTL IMPURE DATA AREAS .IF NE LS$PC LSPCFG: .WORD 0 .ENDC STALLF: .WORD XC.IE .IF NE TBLOCK: .WORD 0,0,0 TJOBNM: .WORD 0 .WORD 177000+LS$CODE .WORD -1 TCOMPL: .WORD 0 .ENDC LIFBLK: .WORD 0,0,0,0 .DREND LS .END