Cœ7$ ?BOOT-U-No boot on volume €ß‹t˙ý€”v˙ú€˙đ˙˙˙SŽBA-P730I-BC RX2 4/7 DECRT11A „Đ%kQ„PxkQ„˜kQ„Œ¸pkQF„ô,kQ!„×F€WkQz„×Fy‹kQڏ„tT\!kQ„tT„:kQ.„—rrXkQ—„—r‚ZkQG„Ý\}kQ„J†kQJ„˜ŁƒkQ+„ŕkQ'„ŔkQ„čkQŐ9gô&BF = 1 BF = 0 BF = 1 MMG$T = 1 .MCALL .MODULE .MODULE BSTRAP,VERSION=85,COMMENT= ; COPYRIGHT (c) 1987 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. ; .MCALL ...CMV .IF NE RTE$M DEFALT $LRLPZ, 4 DEFALT $RMLPZ, 4 O$FORK == 402 .ENDC .ENABL LC .NLIST BEX .IIF NDF BF, BF=0 .IIF NDF MMG$T, MMG$T=0 PRO$S = BF&<1-RTE$M> .SBTTL ******************************************** .IF NE BF .IF NE MMG$T .SBTTL * Extended Memory Bootstrap * .IFF .IF NE RTE$M .SBTTL * RTEM Bootstrap * .IFF .SBTTL * Foreground/Background Bootstrap * .ENDC .ENDC .IFF .SBTTL * Single/Job Bootstrap * .ENDC .SBTTL ******************************************** .SBTTL Definitions ..V2.. BOTSTK = 10000 .IF NE RTE$M BOTTOP = 12000 .IFF BOTTOP = 10000 .ENDC MEDINS = 76600 CISINS = 76052 VS6.SP = 172032 MEM.PS = 172076 MEM.PE = 172136 CA.CSR = 177746 P7.LSS = 177760 CMR.UB == 1000 .IF NE PDT$OP .MACRO T11NOP .ENDM .IFF .MACRO T11NOP NOP .ENDM .ENDC .IRPC X,<012> .MACRO CK.R'X LABEL,CHANGE=+2 .IIF LT CHANGE,CK.R'X=CK.R'X''CHANGE .IIF NB LABEL, .ASSUME CK.R'X EQ LABEL .IIF GT CHANGE,CK.R'X=CK.R'X''CHANGE .ENDM .ENDR .SBTTL Start of Boot code area .ASECT .IF NE RTE$M . = 550 BPRINT: . = 570 BIOERR: . = 576 REPORT: .IFF JMPABS = 137 . = 664 BIOERR: . = 672 REPORT: .ENDC .SBTTL Memory size determination .ENABL LSB . = 1000 B$BOOT::MOV #BRTI,@#V.LTC CLR @#V.LTC+2 CLR R3 MOV @R3,DUPFLG CLR (R3)+ CLR (R3)+ MOV SP,(PC)+ STKPTR: .WORD 0 .IF NE RTE$M CMP @#$RTEID,#RTE$ID BEQ 3$ MOV #ILHOST,R0 CALL BPRINT 3$: .IFF MOV #1$,@R3 MOV @R3,@#V.TR10 MFPT CMP R0,#4 BNE 67$ INC FALCON TST @#PS T11NOP COM FALCON MOV #77600,R4 MOV R4,@R4 T11NOP NEG FALCON BR 1$ 67$: .IF NE PRO$S MOV #173700,R0 MOV @R0,R1 T11NOP COM @R0 T11NOP MOV @R0,R2 MOV R1,@R0 XOR R2,R1 CMP R1,#200 BNE 1$ MOV #PROS$,PROFLG MOV #JMPABS,BIOERR MOV #BERR05,BIOERR+2 MOV #JMPABS,REPORT MOV #BERRXX,REPORT+2 .ENDC 1$: .IF EQ MMG$T TST FALCON BMI NXM MOV #NXM,@R3 BHALT:: BR 4$ MOV @#SR,R4 CMP R4,#160000 BLO NXM 4$: CLR R4 5$: ADD #4000,R4 ..28KW == .+2 CMP R4,#170000 BEQ NXM MOV @R4,R0 COM @R4 MOV @R4,R1 COM R1 MOV R0,@R4 CMP R0,R1 BEQ 5$ NXM: .ENDC .IF NE PRO$S TST PROFLG BNE 30$ .ENDC MOV #20$,@R3 TST @#1 MOV #10$,@#V.TR10 MFPT CMPB R0,#3 BNE 10$ MOV #10$,@R3 CLR @#SR BR 30$ 20$: MOV #30$,@#V.TR10 MFPT CMPB R0,#5 BNE 30$ MOV @#177750,R0 BICB #^c<360>,R0 CMPB #40,R0 BNE 10$ BIT #CMR.UB,R0 BNE 30$ 10$: INC BUSTYP 30$: MOV #BCLR,@R3 MOV @R3,@#V.TR10 .IFT MOV #TRPERR,@R3 MOV #BCLR,@#V.TR10 MOV #BHIMEM,R2 CK.R2=BHIMEM CK.R2 BHIMEM,+2 MOV (R2)+,R4 MOV R4,R5 CLC ROR R5 .REPT 5 ASR R5 .ENDR .IFF .IF EQ MMG$T BIC #177,R4 MOV R4,R5 SWAB R5 ASL R5 ADC R5 ASL R5 .ENDC .IFTF .IF EQ MMG$T MOV R5,MEMSIZ .ENDC MOV STKPTR,SP .IFT CK.R2 BSVTK,+2 CALL @(R2)+ MOV R0,CNFMOD MOV (R2)+,$VSBRO .ENDC .DSABL LSB .SBTTL Fix bootstrap's file name FXDEVN::MOV #B$DEVN,R5 MOV @R5,R0 1$: MOV R0,R1 SUB #50,R0 BHIS 1$ SUB R1,@R5 MOV (R5)+,@R5 ADD SUFFX,-(R5) .SBTTL CONFIG bits CFIG:: MOV #TSLIST,R1 CK.R1=TSLIST MOV R1,R0 CK.R0=TSLIST .IF NE RTE$M CK.R0 BCNFG,-2 CK.R1 TSLSI,+2 BIC (R1)+,-(R0) CK.R1 TSLKC,+2 BIC (R1)+,@R0 CK.R2 BLK50$,+2 BIS (R2)+,@R0 CK.R2 BLKGRN,+2 TST (R2)+ BNE 1$ CK.R1 TSCLO,0 CLR @R1 .IFF .IF EQ MMG$T TST @#PS T11NOP .ENDC CK.R0 BCNFG,-2 CK.R1 TSLSI,+2 BIC (R1)+,-(R0) TST @#LKCS T11NOP CK.R1 TSLKC,+2 BIS (R1)+,@R0 BNE 1$ .IF NE PRO$S TST PROFLG BNE 1$ .ENDC TST @#1 T11NOP .IFTF CK.R1 TSCLO,+2 1$: BIS (R1)+,@R0 .IFT CK.R2 BSYFPU,+2 MOV (R2)+,@R1 .ENDC CFCC CK.R1 TSHWF,CHANGE=+2 BIS (R1)+,@R0 .IF NE MMG$T TST @#SR0 T11NOP CK.R1 TSKT,CHANGE=+2 BIS @R1,@R0 TST (R1)+ BNE 2$ JSR R1,@#REPORT .WORD NOMMGT 2$: .ENDC .IF NE VT11$!VS60$ TST @#VT.CSR T11NOP CK.R1 TSHWD,CHANGE=+2 BIS (R1)+,@R0 .ENDC .IF EQ RTE$M .IF EQ KW11$P TST @#172540 T11NOP CK.R1 TSKW,CHANGE=+2 BIS (R1)+,@R0 .ENDC .ENDC .IF NE VT11$!VS60$!<1-KW11$P> .IF EQ MMG$T!RTE$M TST FALCON BNE 3$ .ENDC; EQ MMG$T!RTE$M CMP @R5,#<^RPD > ..NOVT == . BNE CFIG2 3$: BIC #HWDSP$!KW11P$,@R0 .IF NE VT11$!VS60$ CK.R1 TSVS,CHANGE=0 CLR @R1 .ENDC .ENDC .SBTTL CONFG2 bits CK.R0 BCNFG2,CHANGE=-2 CFIG2:: TST -(R0) .IF NE VT11$!VS60$ CLR @#VS6.SP T11NOP CK.R1 TSVS,CHANGE=+2 BIS (R1)+,@R0 .ENDC .IF NE RTE$M CK.R1 TSCA,CHANGE=+2 BIC (R1)+,@R0 CK.R1 TS70,CHANGE=+2 BIC (R1)+,@R0 .IFF .IF NE PRO$S TST PROFLG BNE 187$ .ENDC TST FALCON BEQ 87$ BIS #LSI11$,BCNFG 187$: CMP (R1)+,(R1)+ BR 88$ 87$: .IF EQ MPT$Y BIS #1,@#CA.CSR .IFF CLR @#CA.CSR .ENDC T11NOP CK.R1 TSCA,CHANGE=+2 BIS (R1)+,@R0 TST @#P7.LSS T11NOP CK.R1 TS70,CHANGE=+2 BIS (R1)+,@R0 88$: .IFTF MOV #3,R3 MUL R3,R3 CMP #9.,R3 BEQ 1$ CLR @R1 CK.R1 TSEIS,CHANGE=+2 1$: BIS (R1)+,@R0 .IFT; NE RTE$M CK.R1 TSSWR,CHANGE=+2 BIC (R1)+,@R0 CK.R1 TSLIT,CHANGE=+2 BIC (R1)+,@R0 .IFF MOV @#SR,R2 T11NOP CK.R1 TSSWR,CHANGE=+2 BIS (R1)+,@R0 MOV #0,@#SR T11NOP CK.R1 TSLIT,CHANGE=+2 BIS (R1)+,@R0 .IF EQ MMG$T BIT #LSI11$,BCNFG BNE 2$ .ENDC .IFTF MOV R0,-(SP) MOV #2,PCFIX .WORD MEDINS,100 CLR PCFIX MOV (SP)+,R0 CK.R1 TS60,CHANGE=0 BIS @R1,@R0 CK.R1 TS60,CHANGE=+2 2$: TST (R1)+ MOV R1,-(SP) MOV R0,-(SP) MOV R4,-(SP) CLR R4 .WORD CISINS MOV (SP)+,R4 MOV (SP)+,R0 MOV (SP)+,R1 CK.R1 TSCIS,CHANGE=+2 BIS (R1)+,@R0 CK.R1 TSLD,CHANGE=+2 BIS (R1)+,@R0 .ENDC .IF NE PRO$S CK.R1 PROFLG,CHANGE=+2 BIS (R1)+,@R0 .ENDC TST BUSTYP BEQ 10$ BIS (R1)+,@R0 10$: CLR @#V.TR4 CLR @#V.TR10 .IF NE MPT$Y MOV #PARTB,R2 MOV #MEM.PS,R3 3$: ADD #2,R3 CALL T4SEC MOV #1,@R3 T11NOP CALL @(SP)+ BCS 4$ MOV R3,(R2)+ CK.R1 TSMP,CHANGE=0 BIS @R1,@R0 4$: CMP R3,#MEM.PE BLO 3$ .ENDC .SBTTL File lookup .ENABL LSB LOKFIL: CLR -(SP) CLR -(SP) MOV #1,R0 MOV #HNAMES,R3 1$: ASL R0 CMP (R0)+,(R0)+ MOV #256.*2,R1 CALL BBREAD BCS INPERR MOV #BUFFB+D.STRT,R1 MOV (R1)+,R0 .IF NE RTE$M ADD $VSBRO,R0 .ENDC .Assume D.STRT+2 EQ L.HDR 2$: MOV R1,R2 .Assume E.STAT EQ 0 BIT #PERM,(R2)+ BEQ 8$ .Assume E.STAT+2 EQ E.NAME CMP #^RSYS,E.NAME+4-2(R2) BNE 8$ .Assume E.STAT+2 EQ E.NAME MOV (R2)+,R5 CMP R5,B$FNAM BNE 3$ CMP @R2,B$FNAM+2 BNE 3$ MOV R0,@SP BR 8$ 3$: CMP R5,#^RSWA BNE 4$ CMP @R2,#<^RP > BNE 4$ MOV R0,SWPBLK MOV E.LENG(R1),SWPSIZ BR 8$ 4$: TST @R2 BNE 8$ CMP R5,B$DEVN BNE 5$ MOV R0,2(SP) BR 8$ 5$: .IF NE PRO$S SUB SUFFX,R5 CMP R5,#<^RPI > BNE 6$ MOV R0,PIBLK BR 8$ .ENDC 6$: CMP R3,#HNAMES+<40.*4> BHIS 8$ SUB SUFFX,-(R2) MOV (R2)+,R5 .IF EQ BATC$H CMP R5,#<^RBA > BEQ 8$ .ENDC 7$: SUB #50,R5 BHI 7$ BNE 8$ MOV -(R2),(R3)+ MOV R0,(R3)+ 8$: BIT #ENDBLK,@R1 BNE 9$ ADD E.LENG(R1),R0 ADD #L.ENTR,R1 ADD BUFFB+D.EXTR,R1 BR 2$ 9$: MOV BUFFB+D.NEXT,R0 BNE 1$ CLR @R3 MOV R4,MEMTOP .IF NE RTE$M MOV MEMSIZ,TOTMEM .IFF MOV @SP,R0 BEQ 11$ ADD #KT11RG/1000,R0 MOV #KT11ND-KT11RG/2,R1 CALL BBREAD BCS INPERR CALL KT11RG- .IFTF MOV (SP)+,MONBLK .IFT BEQ 11$ .IFTF MOV (SP)+,R0 BEQ NOHAND .IFT SUB $VSBRO,R0 .ENDC TST SWPBLK BNE DVREAD JSR R1,@#REPORT .WORD NSWAP 11$: JSR R1,@#REPORT .WORD NOMON .IF NE RTE$M TRPERR: JSR R1,@#REPORT .WORD UNXTRP .ENDC .ASSUME .-B$BOOT GE STRTEN-STRTOV .ASSUME .-B$BOOT GE LDTEND-LDTABL INPERR: JMP @#BIOERR B.RDER: CALL B.READ BCS INPERR RETURN NOHAND: JSR R1,@#REPORT .WORD NOHNDL .DSABL LSB .ENABL LSB LDHNDL: MOV H.SIZ(R2),R1 .IF NE RTE$M MOV R1,-(SP) ADD #3,R1 BIC #3,R1 SUB R1,@SP ADD (SP)+,SYHTOP .ENDC MOV R4,R2 SUB R1,R4 ADD #1000,R1 SUB R1,R2 BCS 4$ ROR R1 CMP R2,#BOTTOP BLO 4$ CALL B.RDER INSSWT: BR 1$ MOV TOTMEM,R1 CALL INSTAL BCC 1$ BADINS: NOP NOP JSR R1,@#REPORT .WORD CNFSGN 1$: MOV (SP)+,R1 ADD #H.GEN,R2 .Assume H.GEN-2 EQ H.DSTS MOV -(R2),-(SP) .Assume H.DSTS-2 EQ H.DVSZ MOV -(R2),-(SP) .Assume H.DVSZ-2 EQ H.SIZ MOV -(R2),-(SP) .IF NE RTE$M ADD #3,@SP BIC #3,@SP .ENDC INC R0 MOV R0,-(SP) JMP @R1 INSTAL: CALL T4SEC MOV R2,R5 ADD #H.GEN,R5 CMP @R5,SYOP SEC BNE 2$ ADD #H.ICSR-H.GEN,R5 TST @(R5)+ T11NOP BCS 2$ .Assume H.ICSR+2 EQ H.DKCD .Assume H.ICSR+4 EQ H.SYCD NONSYS: TST (R5)+ BEQ 2$ CALL SAVRG1 2$: RETURN .IF NE PRO$S GTPIHD: TST #PI.NUM BEQ NOHAND MOV (PC)+,R0 PIBLK: .WORD 0 BEQ NOHAND CALL BBRD1 BCS INPERR RETURN .ENDC .SBTTL Read handler and monitor into memory DVREAD: MOV R0,R5 MOV (PC)+,R3 G$VEC: .WORD BADINS .IF NE PRO$S TST PROFLG BEQ 3$ CALL GTPIHD CALL LDHNDL MOV R4,R3 ADD #14.,R3 MOV R3,G$VEC 3$: .ENDC TST (R3)+ MOV #NOP,INSSWT MOV R4,SYHTOP MOV R5,R0 CALL BBRD1 BCS INPERR CALL LDHNDL MOV R4,R5 MOV (PC)+,R0 MONBLK: .WORD 0 .IF NE RTE$M SUB $VSBRO,R0 .ENDC ADD #RELLST/1000,R0 MOV #RELEND-RELLST/2,R1 CALL BBREAD BCS INPERR ADD #BOOTSZ-,R0 MOV R0,R3 ADD #KMONSZ,R3 .IF NE RTE$M ADD $VSBRO,R3 .ENDC MOV $RMSIZ,R1 SUB R1,R4 BLO 4$ ROR R1 MOV R4,R2 CMP R2,#BOTTOP BHIS 5$ .IF EQ BF CMP R2,#1000 BLO 4$ SUB #KMLEN,R1 MOV R3,R0 ADD #KMSIZE,R2 CMP R2,#BOTTOP BHIS 5$ .ENDC 4$: JSR R1,@#REPORT .WORD NOCORE+ 5$: CALL B.RDER SUB #KMON,R4 .IF NE RTE$M TST (PC)+ CNFMOD: .WORD 0 BPL 6$ BIS #,DLTCB(R4) BIC #,DLTCB(R4) 6$: BIS #,SYSGEN(R4) BIT #1,CNFMOD BEQ 66$ BIS #,CLIFLG-$RMON(R4) 66$: .ENDC MOV R0,-(SP) MOV MONBLK,R0 .IF NE RTE$M SUB $VSBRO,R0 .ENDC ADD #LDTABL/1000,R0 MOV #LDTEND-LDTABL/2,R1 MOV #B$BOOT,R2 CALL B.RDER ADD #6,R5 MOV R5,SYENTR(R4) MOV R5,$ENTRY+2(R4) .IF NE RTE$M MOV #$RTELK,R1 CALL PROTEC .ENDC CALL LDTABL+ 14$: CALL @(SP)+ .DSABL LSB .ENABL LSB RLMON2: .IF NE MMG$T CALL @#XMREL+ MOV MEMSIZ,-(R1) SUB #LOWCOR,@R1 BHIS 1$ CLR @R1 1$: ADD #,R1 MOV R1,SP PUT #BOTSTK,SP .ENDC .IF NE RTE$M MOV #$LINKB+2+,R0 2$: ADD @#$RTELK,@R0 ADD R4,-(R0) MOV (R0)+,@(R0)+ TST (R0)+ BNE 2$ .ENDC MOV #0,$MEMSZ(R4) MEMSIZ == .-4 MOV #0,$RAMSZ(R4) TOTMEM == .-4 BIS BCNFG,CONFIG(R4) BIS BCNFG2,CONFG2(R4) .IF NE MPT$Y MVPTBL: MOV #PARTBL,R3 ADD R4,R3 MOV #PARTB,R1 3$: MOV (R1)+,(R3)+ CMP R1,#PARTBE BLO 3$ .ENDC .IF NE KW11$P BISB PROBTS+<<104/4>&3>,LOWMAP+<104/20>(R4) .ENDC .IF NE PRO$S TST PROFLG BEQ 33$ MOV G$VEC,GETVEC(R4) BIC #CLK50$,CONFIG(R4) 33$: .ENDC .IF EQ RTE$M .IF NE BF+TIME$R HRTZ50::BIT #CLK50$,CONFIG(R4) BEQ 4$ MOV #101,GTM.HI(R4) MOV #165400,GTM.LO(R4) 4$: .ENDC .ENDC TST DUPFLG BNE 7$ MOV #BTIME,R3 MOV (R3)+,$TIME(R4) MOV (R3)+,$TIME+2(R4) MOV @R3,$DATE(R4) 7$: .IF NE MMG$T BISB PROBTS+<&3>,LOWMAP+(R4) .ENDC .DSABL LSB CALL SETSIO+ MOV MONBLK,R0 ADD #STRTOV/1000,R0 MOV #STRTEN-STRTOV/2,R1 MOV #B$BOOT,R2 CALL B.RDER CALL CLNUP+ .BR GTHNDL .SBTTL Install handlers .ENABL LSB GTHNDL: .RCTRLO 1$: CLR LDFLG MOV #HNAMES-2,R3 2$: TST (R3)+ MOV #$ENTRY,R1 ADD R4,R1 MOV (R3)+,R2 BEQ 14$ CLR R5 3$: CMP (R1)+,#-1 BEQ 8$ MOV $PNAME-<$ENTRY+2>(R1),R0 BNE 5$ TST R5 BNE 5$ ..INSA == . 4$: MOV R1,R5 5$: CMP B$DEVS,R0 BNE 6$ TST -2(R1) BNE 6$ CLR $PNAME-<$ENTRY+2>(R1) CLR R0 BR 4$ 6$: CMP R2,R0 BNE 3$ MOV -(R1),R2 BIS $DVREC-$ENTRY(R1),R2 BNE 2$ BR 9$ 7$: MOVB #177,FRSLFL BR 2$ 8$: MOV R5,R1 BEQ 7$ TST -(R1) 9$: MOV @R3,R0 MOV R1,-(SP) CALL BBRD1 MOV (SP)+,R1 BCS 13$ MOV (PC)+,@(PC)+ TST @R5 .WORD NONSYS CALL INSTAL BCS 12$ INC @R3 MOV @R3,$DVREC-$ENTRY(R1) MOV #BUFFB+H.SIZ,R2 MOV (R2)+,$HSIZE-$ENTRY(R1) .Assume H.SIZ+2 EQ H.DVSZ MOV (R2)+,$DVSIZ-$ENTRY(R1) .Assume H.DVSZ+2 EQ H.DSTS MOV (R2)+,$STAT-$ENTRY(R1) MOV -2(R3),$PNAME-$ENTRY(R1) BR 2$ 12$: CMP $PNAME-$ENTRY(R1),#<^RBA > BEQ 2$ CLR $PNAME-$ENTRY(R1) BR 2$ 13$: .PRINT #ERRHND BR 2$ 14$: MOV R1,-(SP) 15$: MOV (R1)+,R0 BNE 18$ 16$: TST $DVREC-<$ENTRY+2>(R1) BEQ 17$ CMP $PNAME-<$ENTRY+2>(R1),#<^RLD > BNE 15$ INCB (PC)+ LDFLG: .BYTE 0 FRSLFL: .BYTE 0 BR 15$ 17$: .IF NE BATC$H CMP $PNAME-<$ENTRY+2>(R1),#<^RBA > BEQ 15$ .ENDC CLR $PNAME-<$ENTRY+2>(R1) INCB FRSLFL BR 15$ 18$: INC R0 BNE 15$ MOV (SP)+,R1 TSTB FRSLFL BMI 1$ 19$: MOV (R1)+,R0 BEQ 19$ CMP R0,#-1 BEQ 20$ CMP R0,$ENTRY+2(R4) BHIS 19$ ADD R4,-2(R1) BR 19$ 20$: JMP STRTUP+ .DSABL LSB .SBTTL Trap to 4 interceptors BCLR: CLR @R1 ADD (PC)+,@SP PCFIX: .WORD 0 BRTI: RTI BSEC: BIS #1,2(SP) RTI .IF NE PRO$S .ENABL LSB BERR05: MOV #5,R1 BR 1$ BERRXX: MOV @R1,R0 CLR R1 BISB -(R0),R1 1$: MOV #51124,R0 JMP @#167730 .DSABL LSB .ENDC .SBTTL Protect vector(s) PROTEC: JSR R5,SAVREG ASR R1 ASR R1 MOV R1,R2 BIC #^C<3>,R1 ASR R2 ASR R2 ADD R4,R2 BISB PROBTS(R1),LOWMAP(R2) 2$: RETURN .DSABL LSB PROBTS: .BYTE ^B11000000,^B00110000,^B00001100,^B00000011 .SBTTL Utility subroutines - SAVREG, Readers SAVRG1: MOV R5,-(SP) SAVREG: MOV R4,-(SP) MOV R3,-(SP) MOV R2,-(SP) MOV R1,-(SP) MOV R0,-(SP) MOV R5,-(SP) MOV 12.(SP),R5 CALL @(SP)+ MOV (SP)+,R0 MOV (SP)+,R1 MOV (SP)+,R2 MOV (SP)+,R3 MOV (SP)+,R4 MOV (SP)+,R5 RETURN BREAD1::MOV R0,AREA+2 .READW #AREA,#0,R2,R1 RETURN BBRD1: MOV #256.,R1 BBREAD: MOV #BUFFB,R2 B.READ: JSR R5,SAVREG CALLR @B$READ T4SEC: MOV @#V.TR4,1$ MOV #BSEC,@#V.TR4 MOV @#V.TR10,2$ MOV #BSEC,@#V.TR10 CALL @(SP)+ MOV (PC)+,@(PC)+ 1$: .WORD 0,V.TR4 MOV (PC)+,@(PC)+ 2$: .WORD 0,V.TR10 RETURN .SBTTL Configuration bits BCNFG2::.WORD 0 BCNFG:: .WORD LSI11$ TSLIST:: TSLSI: .WORD LSI11$ TSLKC: .WORD LKCS$ TSCLO: .WORD CLOCK$ TSHWF: .WORD HWFPU$ .IF NE MMG$T TSKT: .WORD KT11$ .ENDC .IF NE VT11$!VS60$ TSHWD: .WORD HWDSP$ .ENDC .IF EQ RTE$M .IF EQ KW11$P TSKW: .WORD KW11P$ .ENDC .ENDC .IF NE VT11$!VS60$ TSVS: .WORD VS6$0 .ENDC TSCA: .WORD CACHE$ TS70: .WORD PDP70$ TSEIS: .WORD EIS$ TSSWR: .WORD SWREG$ TSLIT: .WORD LIGHT$ TS60: .WORD PDP60$ TSCIS: .WORD CIS$ TSLD: .WORD LDREL$ .IF NE PRO$S PROFLG: .WORD 0 .ENDC .IF NE MPT$Y TSMP: .WORD MPTY$ .ENDC TSBUS: .WORD BUS$ .SBTTL Bootstrap impure data area .IF EQ RTE$M FALCON: .WORD 0 .ENDC BUSTYP: .WORD 0 MEMTOP: .WORD 0 SWPSIZ::.WORD -1 SWPBLK::.WORD 0 AREA:: .BLKW 5 .IF NE MPT$Y PARTB:: .REPT 16. .WORD 0 .ENDR PARTBE: .ENDC .IF NE RTE$M $VSBRO: .WORD 0 .ENDC .SBTTL Error message text .IF EQ BF TTMSG: .ASCIZ "?BOOT-W-Invalid or missing TT.SYS" .ENDC .IF NE MMG$T .BYTE 7 NOMMGT: .ASCIZ "No KT11" .ENDC .BYTE 11 NSWAP: .ASCIZ "SWAP.SYS not found" .BYTE 3 NOHNDL: .ASCIZ "Handler file not found" .BYTE 10 SPTSML: .ASCIZ "Swap file too small" ERRHND: .ASCIZ "?BOOT-W-Error reading handler" .BYTE 6 NOMON: .ASCIZ "Monitor file not found" .BYTE 2 CNFSGN: .ASCIZ "Conflicting SYSGEN options" .IF NE RTE$M UNXTRP: .ASCIZ "Unexpected trap" ILHOST: .ASCII <0><0><0><0> .ASCII "?BOOT-U-Host system incorrect for RTEM"<200> .IFTF .EVEN .IFT .SBTTL Fixed storage locations for RTEM-11 (MONITOR I/O CHECK) .ASSUME . LE 4714 . = 4714 RTEVER::.WORD RTS$ID .ENDC .ASSUME . LE 4716 .SBTTL Fixed storage locations for primary boot and DUP . = 4716 B$DEVN::.WORD 0 B$DEVS::.WORD 0 .IF EQ RTE$M B$DEVU::.WORD <^RBOT> .IFF B$DEVU::.WORD <^RRTE> .ENDC B$FNAM::.WORD 0 .WORD 0 B$READ::.WORD 0 SYHTOP::.WORD 0 DUPFLG::.WORD 0 $RMSIZ::.WORD $RMEND-KMON .SBTTL Boot message .ASSUME . EQ 4740 BSTRNG:: .ASCII "-"" " .IF DF SYSG$N .ASCII "(S)" .ENDC .ASCII " " ...CMV PART=PREFIX,TYPE=I ...CMV PART=RELEASE,TYPE=I .ASCII "." ...CMV PART=VERSION,TYPE=I .ASCII " " ..PLVL == . ...CMV PART=SUFFIX,TYPE=Z .EVEN .ASSUME . LE 4774 . = 4774 ..SUFF == . SUFFX:: ASCR50 040,040,SUFX$H .WORD ...V2 SYOP: .WORD +++ BTIME = . BDATE = BTIME + 4 BUFFB = BDATE + 2 HNAMES = BUFFB + 2000 .IF NE RTE$M BHIMEM = BUFFB BSVTK = BHIMEM+2 BLK50$ = BSVTK+2 BLKGRN = BLK50$+2 BSYFPU = BLKGRN+2 .ENDC .SBTTL Relocation list .ASSUME .&777 EQ 0 RELLST:: .WORD USRLOC .WORD $USRLC .WORD QCOMP .WORD $KMLOC .WORD SYSLOW .WORD CORPTR+2 .WORD SYNCH .WORD $TCFIG .WORD $INDDV .WORD GETVEC .IF NE BF! .WORD TTIBUF .WORD TTIBUF+2 .WORD TTIBUF+6 .WORD TTIBUF+10 .WORD TTOBUF .WORD TTOBUF+4 .WORD TTOBUF+6 .ENDC .IF NE HSR$B .WORD PHSRRT .WORD HSRB .WORD HSRBEP .WORD HSRBRP .WORD HSRBGP .IF NE ! .WORD PHSRRB .ENDC .ENDC .IF NE MTT$Y .IF NE HSR$O .IF GT DL11$N-1 .WORD PHSRBO .WORD HSROPP .WORD HSROEP .WORD HSRORP .WORD HSROGP .ENDC .ENDC .ENDC .IF NE & ^CMTT$Y .WORD SCLNK2 .ENDC .IF NE BF .WORD IMPLOC .WORD $NULJB .WORD TTIUSR .WORD TTOUSR .WORD FUDGE1 .WORD FUDGE2 .WORD BKGND1 .WORD BKGND2 .WORD BKGND3 .WORD CNTXT .WORD BCNTXT .WORD PBSYCH .WORD SWIPTR .WORD SWOPTR .WORD .$CRTN .IF NE MTT$Y .WORD BKCNSL .ENDC .IF EQ MMG$T .WORD RMONSP .IFF .WORD P1EXT .WORD BGWPTR .WORD $TRPLS .WORD TRPLST+4 .WORD TRPLST+10 .WORD TRPLST+14 .IF NE FPU$11 .WORD BGFPPT .ENDC .ENDC .ENDC .IF NE MTT$Y .WORD TTITPT .WORD TTOTPT .IF GT DL11$N-1 .IIF EQ HSR$B, .WORD PDLTB0 .WORD PDLTB1 .ENDC .IF NE DL11$M .WORD DLCRP1 .WORD DLCRP2 .ENDC .IF NE MTI$M .WORD PDLCS1 .WORD DLTMCP .ENDC .IF GT DZ11$N-1 .WORD PDZTB0 .WORD PDZCS0 .WORD PDZTB1 .WORD PDZCS1 .ENDC .IF NE DZ11$N .WORD PBMSK1 .WORD PBMSK2 .WORD PBMSK3 .IF NE DZ11$M .WORD PBMSK4 .WORD PBMSK5 .WORD PDZCS2 .WORD PDZTB2 .WORD DZTMCP .ENDC .ENDC .ENDC .IF EQ BF .WORD TRPSET .WORD TRAPLC .WORD TRAPER .WORD MONLOC .WORD I.CSW .WORD AVAIL .WORD PAVAIL .WORD PMONLC .WORD P$SYSC .WORD PQCNT .WORD PI.CSW .WORD P$SWPB .IF NE FPU$11 .WORD FPPADD .WORD FPPIGN .ENDC .IF EQ MTT$Y .WORD PTIBF4 .WORD PTTPRE .WORD PTOBF2 .WORD PTOBF4 .WORD PTIBF6 .IFF .WORD PMTCBB .WORD PBCTCB .WORD I.CNSL .ENDC .IF NE PANI$C .WORD PSPTR .ENDC .IF NE TIME$R .WORD FUDGE1 .WORD FUDGE2 .WORD FUDGE3 .WORD PLKQUE .WORD P$TIM2 .WORD PLKQU2 .IF EQ MTT$Y .WORD PTBCNT .ENDC .ENDC .ENDC .IF NE MMG$T .WORD TRPLST .ENDC .WORD 0 ...REL =: 1 VECLST:: .WORD 0 BIC R0,R0 .IF EQ MMG$T .EXIT .IFF .ASTX .ENDC .WORD V.TR4!...REL, TRAP4, PR7 .WORD V.TR10!...REL, TRAP10, PR7+1 .IF NE MMG$T .WORD V.BPT!...REL, TRAPBP, PR7 .WORD V.IOT!...REL, TRAPIO, PR7 .ENDC .IF EQ PWF$L .WORD V.PWFL, V.PWFL+2,0 .IFF .WORD V.PWFL!...REL, TRAPPF, PR7 .ENDC .WORD V.EMT!...REL, EMTPRO, PR0 .IF NE MMG$T .WORD V.TRAP!...REL, TRAPTR, PR7 .ENDC .WORD JSW, 100000, 0 ..TFIL == .+4 .WORD SYSPTR!...REL, $RMON, 0 .WORD V..TKB!...REL, TTIINT, PR7 .IF NE BF!MTT$Y .WORD V..TPS!...REL, TTOINT, PR7 .IFF .WORD V..TPS!...REL, TTOINT, PR4 .ENDC .IF NE KW11$P .WORD V.LTC, V.LTC+2,RTI .ENDC .WORD LKVEC!...REL, LKINT, PR7+1 .IF EQ MPT$Y .WORD V.MPTY, V.MPTY+2,0 .IFF .WORD V.MPTY!...REL, TRAPMP, PR7 .ENDC .WORD 0 VECHI: .WORD V.TKB!...REL, TTIINT, PR7 .IF NE BF!MTT$Y .WORD V.TPS!...REL, TTOINT, PR7 .IFF .WORD V.TPS!...REL, TTOINT, PR4 .ENDC .IF EQ FPU$11 .WORD V.FPP, V.FPP+2, 0 .IFF .WORD V.FPP!...REL, FPPINT, PR7 .ENDC .IF NE MMG$T .WORD V.MMU!...REL, TRAPMM, PR7 .ENDC .WORD 0 .BR LDSTRT LDSTRT: .ASCIZ "!RUN SY:LD" ..BLDS==. .ASCII ".SYS /C:-1" .BYTE 0 .BR ATFILE ATFILE: .IF NE STAR$T .ASCIZ "@START" .ENDC .EVEN .IF EQ RTE$M LSIMOD: .IF NE BF .WORD ^B<11011010> .WORD M$SV11 MSV11:: .WORD 160000 .IFF .WORD ^B<1101101> .ENDC .WORD GETPSW MFPS -(SP) NOP .WORD PUTPSW MTPS 2(SP) NOP .IF EQ BF .IF EQ TIME$R .WORD $INTEN+2 .IFF .WORD $INTEN+6 .ENDC .IFF .WORD RMONPS .ENDC MFPS R4 BIC (R5)+,R4 MTPS R4 .ENDC .IF NE RTE$M RTEMOD: .WORD ^B<0101001010101001> .WORD $RMON CALLR @(PC)+ .WORD .$INTN .WORD GTVECT .WORD 0 .WORD GETPSW CALLR @(PC)+ .WORD .$GTPS .WORD PUTPSW CALLR @(PC)+ .WORD .$PTPS .WORD DRINTN .WORD 0 P$FORQ: .WORD .$FORQ .WORD DRINTN-2 .WORD 0 P$INTN: .WORD .$INTN .ASSUM P$INTN EQ P$FORQ+6 .ASSUM TIM$IT!ERL$G!MMG$T EQ 0 .WORD BCNTXT+4+<..SDTM*2> .WORD *2+1 .WORD FATAL JSR R1,@(PC)+ .WORD .$FATA .WORD RTICML CALLR @(PC)+ .WORD .$RTIC .WORD ^B<0101101011010101> .WORD D$ATE CALL @(PC)+ .WORD .$GTDA .WORD EXIHOK CALL @(PC)+ .WORD .$DARL .WORD EXRDKM CALL @(PC)+ .WORD .$RDKM .WORD GTIHOK CALL @(PC)+ .WORD .$GTTI RETURN .WORD ENSHOK CALLR @(PC)+ .WORD .$GETE .WORD RMONPS CALL @(PC)+ .WORD .$SPL0 TST (R5)+ .WORD RTICMN CALLR @(PC)+ .WORD .$RTIC .WORD ^B<010101001> .WORD FPSHOK CALL @(PC)+ .WORD .$FPST .WORD SCNALL MOVB (PC)+,-(SP) .WORD SCNALL+4 CALLR @(PC)+ .WORD .$IDLP .WORD CRRHOK CALLR @(PC)+ .WORD .$CRTI .WORD $RQSIG CALLR @(PC)+ .WORD .$RQSG .WORD ^B<01> .WORD DLIHOK JSR R5,@(PC)+ .WORD .$INTN .IF EQ HSR$B .IF EQ HSR$O .WORD ^B<110> .IFF .ERROR .ENDC .IFF .IF EQ HSR$O .ERROR .IFF .WORD ^B<11001> .ENDC .ENDC .IF NE HSR$B .WORD FRQHOK JSR R5,@(PC)+ .WORD .$FORQ .ENDC .IF EQ HSR$O .WORD DLOHOK BR .+12 .IFF .WORD DLOHOK BR .+14 .ENDC .WORD TTOENB CALL @(PC)+ .WORD .$RSTT NOP .WORD ^B<0101010101001001> .WORD MTTGET CALL @(PC)+ .WORD .$GETP .WORD MTTGET+12 .WORD NOP .WORD MTTHOK CALL @(PC)+ .WORD .$PTPS .WORD ERRHOK BR .+14 .WORD TTPS .WORD 0 .WORD .$TPB .WORD TTKB .WORD 0 .WORD .$TPS .WORD TTKS .WORD 0 .WORD .$TKB .WORD SCROLL .WORD 0 .WORD .$TKS .WORD RCTHOK CALL @(PC)+ .WORD .$RSCT .IF GT,DL11$N-1 .WORD ^B<01010000> .IFF; GT,DL11$N-1 .WORD ^B<101> .IFT; GT,DL11$N-1 .WORD TTIINT NOP .WORD TTIINT+2 NOP .WORD DLOINT NOP .WORD DLOINT+2 NOP .ENDC; GT,DL11$N-1 .WORD TIMIO CALL @(PC)+ .WORD .$MRKT .WORD CMTHOK CALL @(PC)+ .WORD .$CMKT .WORD 0 RTEMP:: .BLKW $LRLPZ * 4 .WORD 0 .ENDC .SBTTL PSW Reference List .IF EQ RTE$M MOVB (SP)+,@(PC)+ MOV @(PC)+,-(SP) CLRB @(PC)+ PSWPDP: MOVB (PC)+,@(PC)+ .WORD PS .WORD PS .WORD PS PSWPD2: .WORD PS MTPS (SP)+ MFPS -(SP) MTPS (PC)+ PSWLSI: MTPS (PC)+ NOP NOP .WORD 0 NOP .IFF CALL @(PC)+ CALL @(PC)+ CALL @(PC)+ PSWRTE: CALL @(PC)+ .$PTPS .$GETP .$SPL0 PSWVR2: .$SPL7 PSWNOP: NOP .ENDC .SBTTL System handler relocation table .IF EQ RTE$M HNDLST::.WORD $FORK .WORD $INTEN .IF NE TIM$IT .WORD $TIMIO .ENDC .IF NE ERL$G .WORD $ERLOG .ENDC .IF NE MMG$T .WORD $PUTWR .WORD $PUTBY .WORD $GETBY .WORD $MPPHY .WORD $RELOC .ENDC .WORD 0 .ENDC .IF NE RTE$M .SBTTL Table of monitor addresses for RTEM linkage $LINKB:: .WORD EXUSER, .EXUSE .WORD FPPFLG, .FPPFL .WORD INTACT, .INTAC .WORD INTLVL, .INTLV .WORD LKQUE, .LKQUE .WORD PSCLOK, .PSCLO .WORD RMONSP, .RMONS .WORD SAVE30, .SAVE3 .WORD $SYS, .SYS .WORD TASKSP, .TASKS .WORD TIKCTR, .TIKCT .WORD TTRSET, .TTRSE .WORD $ENSYS, .$ENSY .WORD $FORK, .$FORK .WORD $INTEN, .$INTE N = 0 .REPT $RMLPZ .IRP K \N .WORD $RMON, .$RMP'K .ENDR N=N+1 .ENDR .WORD 0 .ENDC .SBTTL Fix references to the PS FIXPSW: .ENABL LSB .IF EQ RTE$M MOV #PSWPDP+,R3 BIT #LSI11$,@#BCNFG BEQ 4$ MOV #PSWLSI+,R3 MOV #LSIMOD+,R0 .IFF MOV #RTEMOD+,R0 MOV #PSWRTE+,R3 .IFTF MOV (R0)+,R2 .IFT .IF NE BF CMP @#MEMTOP,#160000 BLOS 1$ MOV @#MEMTOP,MSV11 .ENDC .IFTF 1$: MOV (R0)+,R1 ADD R4,R1 2$: MOV (R0)+,(R1)+ ASR R2 .IFF BCC 3$ ADD @#$RTELK,(R0) MOV @(R0)+,(R1)+ ASR R2 3$: .IFTF BCS 2$ BNE 1$ .IFF MOV (R0)+,R2 BNE 1$ MOV #DRINTN+4,R0 MOV SYHTOP-,R1 MOV #$RMON,R2 ADD R4,R2 ADD R4,R0 MOV -(R0),-(R1) SUB R2,@R0 MOV @R0,O$FORK(R2) MOV -(R0),-(R1) SUB R2,@R0 .ENDC 4$: .IF NE MTT$Y .IF GT DL11$N-1 MOV #PSWMTI,R0 .IFF .IF GT DZ11$N-1 MOV #PSWMTI,R0 .IFF MOV #PSWLST,R0 .ENDC .ENDC .IFF MOV #PSWLST,R0 .ENDC 5$: ADD R4,R0 MOV (R0)+,R2 MOV @R0,R1 .IF NE RTE$M BLT 6$ CLR R1 MOV PSWNOP,2(R0) 6$: ADD R3,R1 MOV PSWVR2-PSWRTE(R1),@R0 ADD @#$RTELK,@R0 MOV @(R0)+,-(R0) MOV @R1,-(R0) .IFF BGT 7$ ADD R3,R1 MOV PSWPD2-PSWPDP(R1),@R0 MOV @R1,-(R0) BR 8$ 7$: MOV PSWPD2-PSWPDP(R3),2(R0) MOV @R3,-(R0) .ENDC 8$: MOV R2,R0 BNE 5$ RELMON: MOV #RELLST+,R0 MOV (R0)+,R1 9$: ADD R4,R1 ADD R4,@R1 MOV (R0)+,R1 BNE 9$ RELVEC: 10$: MOV (R0)+,R1 11$: MOV (R0)+,-(SP) ROR R1 BCC 1111$ ADD R4,@SP 1111$: ASL R1 MOV (SP)+,(R1)+ MOV (R0)+,(R1)+ MOV (R0)+,R1 BNE 11$ RETURN CORUPT: MOV #VECHI+,R0 CALL RELVEC MOV #CHAINA+2,R1 MOV R1,R2 12$: MOVB (R0)+,(R1)+ BNE 12$ DEC R1 CMPB #SPACE,(R0) BNE 1213$ INC R0 1213$: MOVB (R0)+,(R1)+ BNE 1213$ DEC R1 13$: TST (PC)+ ..NIND == . START$: .WORD STAR$T BEQ 15$ 14$: MOVB (R0)+,(R1)+ BNE 14$ 15$: SUB R2,R1 MOV R1,-(R2) RETURN .DSABL LSB .IF NE MMG$T XMREL:: MOV #$XMPTR,R1 ADD R4,R1 RETURN .ENDC .SBTTL Miscellaneous overlaid data .BYTE 4 NOCORE: .ASCIZ "Insufficient memory" .EVEN RELEND:: .ASSUME RELEND-RELLST LE 2000 . = . + 777 / 1000 * 1000 .IF EQ RTE$M .SBTTL KT11 registers and enable memory mapping .ENABL LSB .ASSUME .&777 EQ 0 KT11RG::CALL @#T4SEC CLC MOV @#MEMSIZ,@#TOTMEM TST @#SR0 T11NOP BCS 9$ BIS #20,@#SR3 .IF NE PRO$S TST @#PROFLG BEQ 1$ CLR R0 BISB @#173050,R0 SWAB R0 ASL R0 SUB #40,R0 MOV R0,CHKLIM .ENDC 1$: MOV #PMODE+PR7,@#PS MOV #KISAR0,R3 MOV #KISDR0,R1 MOV #UISAR0,R2 MOV #UISDR0,R0 MOV R4,-(SP) MOV #8.,R4 CLR R5 2$: MOV R5,(R3)+ MOV R5,(R2)+ MOV #AP$ACF,@R1 MOV (R1)+,(R0)+ ADD #200,R5 SOB R4,2$ MOV #177600,-(R3) MOV @R3,-(R2) INC @#SR0 MOV #V.MPTY,R0 MOV @R0,-(SP) MOV #MPERR+,(R0)+ MOV @R0,-(SP) MOV #PR7,(R0)+ MOV #140000,R0 CLR -(R3) BR 4$ 3$: MOV #140000,R0 MOV @#0,-(SP) COM @R0 MOV @#0,-(SP) COM @R0 CMP (SP)+,(SP)+ BNE 5$ CLC 4$: MOV @R0,R4 MOV R4,(R0)+ BCS 5$ CMP #144000,R0 BHI 4$ ADD #40,@R3 CMP @R3,(PC)+ CHKLIM: .WORD 177600 BLO 3$ 5$: MOV #V.MPTY+2,R0 MOV (SP)+,@R0 MOV (SP)+,-(R0) MOV (SP)+,R4 MOV @R3,R2 MOV R2,@#TOTMEM MOV #1400,@R3 .IF NE MMG$T MOV #LOWCOR,R4 CMP R2,R4 BHIS 6$ MOV R2,R4 6$: MOV R2,@#MEMSIZ ASR R4 ASR R4 SWAB R4 MOV R4,@#MEMTOP .IFTF .IF NE PRO$S TST @#PROFLG BEQ 8$ CLR R0 BISB @#173050,R0 SWAB R0 ASL R0 SUB #200,R0 MOV R0,@#KISAR1 MOV #CTI+PROCFG,R0 MOV #-1,-(R4) .ASSUME SLOT0 EQ CTI-4 MOV @R0,R1 MOV R1,R3 ASL R3 ASL R3 SUB R3,R0 7$: MOV (R0)+,-(R4) TST (R0)+ SOB R1,7$ MOV #200,@#KISAR1 8$: .ENDC .IFF CLR @#SR0 CLR @#SR3 .IFTF 9$: RETURN .ENDC MPERR: RTI .DSABL LSB KT11ND:: .ASSUME KT11ND-KT11RG LE 2000 . = . + 777 / 1000 * 1000 .ENDC .ASSUME .&777 EQ 0 .ENABL LSB .SBTTL Start the system STRTOV: STRTUP: CLR R0 .SETTOP CMP SWPSIZ+,#SWAPSZ BLO NOSWAP TSTB LDFLG+ BEQ 15$ MOVB #,@#CHAINA+2 15$: BIS #CHNIF$,@#JSW TST (PC)+ ..SLNT == . SILNT$:: .WORD SILN$T BNE 16$ .PRINT #BSTRNG 16$: .IF EQ BF!MTT$Y TST $DVREC(R4) BNE 17$ .PRINT #TTMSG .ENDC 17$: TST (PC)+ ..TTQU == . .WORD SILN$T!CONT$N BEQ 18$ BIS #IFEKO$,STATWD(R4) 18$: TST (PC)+ ..INDR == . .WORD IND$ON BEQ 19$ BIS #IFIND,STATWD(R4) 19$: .IF NE MTT$Y .IF NE DZ11$M!MTI$M TST (PC)+ ..DZOD == . MTODT:: .WORD 0 BNE 20$ .IF NE DZ11$M CALL DZMCTL(R4) .ENDC .IF NE MTI$M CALL DLMPOL(R4) .ENDC .ENDC .ENDC 20$: CLR R0 .EXIT NOSWAP: JSR R1,@#REPORT .WORD SPTSML CLNUP: .IF NE MTT$Y .SBTTL Relocate TCB pointers RELTCB: MOV #TCBPEN-TCBLST/2,R5 MOV #TCBLST,R0 ADD R4,R0 1$: TST (R0)+ BEQ 2$ ADD R4,-2(R0) 2$: SOB R5,1$ .IF NE RTE$M MOV @#$RTELK,R1 MOV .$TKS(R1),-(SP) .IFTF MOV #TCBMAX,-(SP) ADD #DLTCB-TCBPEN,R0 3$: .IFT MOV 2(SP),T.CSR(R0) .IFTF MOV T.VEC(R0),R1 MOV T.CSR(R0),R2 .IFF BEQ 9$ CMP R2,MEMTOP+ BLO 4$ CALL T4SEC+ TST @R2 T11NOP CALL @(SP)+ BCC 5$ 4$: CLR T.CSR(R0) .IF NE DZ11$N BIT #DZ11$,T.STAT(R0) BEQ 9$ MOV T.PRI(R0),R1 BIC #^C<3>,R1 ASL R1 ADD R4,R1 CLR DZCSR(R1) .ENDC BR 9$ .IFTF 5$: MOV R0,R3 ADD #T.IRNG,R3 ADD R4,(R3)+ ADD R4,(R3)+ TST (R3)+ ADD R4,(R3)+ ADD R4,(R3)+ ADD #TTYIN,R3 ADD R4,(R3)+ TST (R3)+ ADD R4,(R3)+ ADD R4,(R3)+ .IF NE DZ11$N TSTB T.PUN(R0) BNE 6$ .ENDC CALL PROTEC+ MOV @#V.TKB,(R1)+ MOV R1,R5 MOV T.PRI(R0),(R1)+ CALL PROTEC+ MOV @#V.TPS,(R1)+ MOV @R5,@R1 .IF NE DZ11$N BIT #DZ11$,T.STAT(R0) BEQ 7$ ADD #DZIINT-TTIINT,-(R5) ADD #DZOINT-TTOINT,-(R1) MOV #DZMSE$+DZRCV$+DZTIE$,@R2 6$: MOV @R0,R1 BIC #^C,R1 BISB T.CNF2(R0),R1 ASLB R1 ASLB R1 ASLB R1 BISB T.PUN(R0),R1 BIS #DZRCO$,R1 MOV R1,DZ.LPR(R2) BR 9$ .ENDC 7$: .IFT TST R2 BEQ 9$ CLR 2(SP) .ENDC .IF NE PRO$S TST PROFLG+ BNE 8$ .ENDC MOV #IENABL,@R2 8$: .IF NE DL11$M BIT #REMOT$,@R0 BEQ 9$ BIS #DL.DIE,@R2 .ENDC 9$: ADD #TCBSZ,R0 DEC @SP BNE 3$ .IF NE RTE$M BIT (SP)+,(SP)+ .IFF MOV (SP)+,R0 .ENDC .ENDC .IF EQ RTE$M TST FALCON+ BEQ 10$ MOV #V.SBRK+4,R1 MOV #PR7,-(R1) MOV #170000,-(R1) CALL PROTEC+ 10$: .ENDC .IF NE PRO$S TST PROFLG+ BEQ 13$ MOV MONBLK+,R0 ADD #BSTTBL/1000,R0 MOV #BTBLEN-BSTTBL/2,R1 MOV #BUFFB+1400,R2 CALL B.RDER+ CALL GTPIHD+ MOV $ENTRY+PI.NUM(R4),R3 MOV #BUFFB+202,R5 CALL SAVRG1+ BCC 12$ JMP BADINS+ 12$: CALL PROTEC+ ADD #4,R1 CALL PROTEC+ MOV #200,R1 CALL PROTEC+ MOV #204,R1 CALL PROTEC+ MOV #230,R1 CALL PROTEC+ BR 14$ .ENDC 13$: MOV #,R1 BIC BCNFG+,R1 BNE 14$ MOV #1,@#LKPB MOV #LKSTAT,@#LKCS 14$: RETURN STRTEN: .DSABL LSB .ASSUME STRTEN-STRTOV LE 2000 . = . + 777 / 1000 * 1000 .SBTTL Load monitor tables overlay .ASSUME .&777 EQ 0 .ENABL LSB LDTABL: MOV (SP)+,(PC)+ SAVRET: .WORD 0 MOV (SP)+,R0 MOV (SP)+,$DVREC+2(R4) MOV (SP)+,$HSIZE+2(R4) MOV @#B$DEVS,$PNAME+2(R4) MOV @#SUFFX,HSUFFX(R4) .IF NE MMG$T MOV @SP,$SYSCH+4(R4) .ENDC MOV @SP,$DVSIZ+2(R4) MOV (SP)+,SYDVSZ(R4) MOV (SP)+,$STAT+2(R4) .IF NE PRO$S TST @#PROFLG BEQ 2$ MOV @#G$VEC,R1 SUB #8.,R1 MOV R1,$ENTRY+PI.NUM(R4) SUB #6.,R1 MOV (SP)+,$DVREC+PI.NUM(R4) ADD @SP,R1 MOV (SP)+,$HSIZE+PI.NUM(R4) MOV (SP)+,$DVSIZ+PI.NUM(R4) MOV (SP)+,$STAT+PI.NUM(R4) MOV #PILST+,R5 1$: MOV (R5)+,-(R1) ADD R4,@R1 TST @R5 BNE 1$ BR 3$ 2$: TST #PI.NUM BEQ 3$ CLR $PNAME+PI.NUM(R4) 3$: .ENDC MOV #LOCATE,-(SP) .IF EQ BF CMP R0,R3 BNE 4$ CLR KMLOC(R4) CLR KMONIN(R4) MOV #LOCAT1,@SP 4$: .ENDC ADD R4,@SP MOV @#SWPBLK,$SWPBL(R4) MOV R3,$MONBL(R4) MOV #PR7,-(SP) CALL BRTI+ CALL @#FIXPSW+ JMP @SAVRET .IF NE PRO$S PILST: .WORD $FORK .WORD $INTEN .IF NE MMG$T .WORD $PUTWR .WORD $PUTBY .WORD $GETBY .WORD $MPPHY .WORD $RELOC .ENDC .WORD 0 .ENDC .DSABL LSB .SBTTL Set up the system handler, switch to monitor calls for I/O .ENABL LSB SETSIO: MOV #B$DEVU,R0 BIC #^C<7>,@R0 MOVB @R0,SYUNIT+1(R4) .IF NE MMG$T MOVB @R0,$SYSCH+11(R4) .ENDC MOV @#B$DEVS,R1 ADD (R0)+,R1 ADD #36,R1 MOV R1,DKASSG(R4) MOV R1,SYASSG(R4) MOV (R0)+,MONAME(R4) MOV (R0)+,MONAME+2(R4) .IF EQ RTE$M TST (R0)+ MOV (R0)+,R1 MOV #HNDLST+,R3 1$: MOV (R3)+,-(R1) ADD R4,@R1 TST @R3 BNE 1$ .ENDC MOV #$CSW,R0 ADD R4,R0 MOV #ACTIV$!2,(R0)+ CLR (R0)+ MOV #-1,(R0)+ CLR (R0)+ CLRB (R0)+ MOVB @#B$DEVU,@R0 MOV R4,R3 ADD #$ENTRY+2,R3 MOV #B.RDER,R0 MOV #12,R1 MOV @#G$VEC,R5 CALL DRCALL(R4) MOV @R3,R2 SUB #6.,R2 CLR R3 MOV (R2)+,R1 BPL 9$ ASL R1 ADD R1,R2 MOV (R2)+,R1 BPL 8$ MOV (R2)+,-(SP) CALL @R5 MOV (SP)+,R3 BCC 7$ JMP @#BADINS 7$: MOV (R2)+,R1 8$: ADD R3,R1 9$: BLE 10$ CALL @#PROTEC MOV R2,@R1 ADD (R2)+,(R1)+ MOV (R2)+,@R1 BR 7$ 10$: CALL @#CORUPT+ CLR -(SP) CALL @#BRTI MOV #BREAD1,@#B$READ RETURN .DSABL LSB LDTEND: .ASSUME LDTEND-LDTABL LE 2000 . = . + 777 / 1000 * 1000 .ASSUME .&777 EQ 0 BSTTBL:: .IF NE PRO$S .BYTE 3. .BYTE 1. .WORD ^B010 .WORD LKVEC .WORD TTKB .WORD 204 .BYTE 3. .BYTE 200+2. .WORD ^B111 .WORD LKINT .WORD TTIIN2 .WORD SAVE30 .IF NE MTT$Y .BYTE 10. .BYTE 3. .WORD ^B1111111111 .WORD HKPC03 .WORD HKPC03+2 .WORD HKPC04 .WORD HKPC04+2 .WORD HKPC05 .WORD HKPC05+2 .WORD HKPC07 .WORD HKPC07+2 .WORD TTIINT .WORD TTIINT+2 .IF NE HSR$B .BYTE 2. .BYTE 4. .WORD ^B11 .WORD HKPC09 .WORD HKPC09+2 .IFF .BYTE 2. .BYTE 5. .WORD ^B11 .WORD HKPC08 .WORD HKPC08+2 .ENDC .IF NE MTI$M .BYTE 4. .BYTE 6. .WORD ^B1111 .WORD HKPC01 .WORD HKPC01+2 .WORD HKPC02 .WORD HKPC02+2 .ENDC .IFF .BYTE 14. .BYTE 7. .WORD ^B11111111111111 .WORD HKPC06 .WORD HKPC06+2 .WORD TTIINT .WORD TTIINT+2 .WORD HKPC10 .WORD HKPC10+2 .WORD TTOENB .WORD TTOENB+2 .WORD HKPC12 .WORD HKPC12+2 .WORD NULHOK .WORD NULHOK+2 .WORD PC1HOK .WORD PC1HOK+2 .ENDC .WORD 0. .ENDC BTBLEN = . .ASSUME BTBLEN-BSTTBL LE 400 . = . + 777 / 1000 * 1000 .SBTTL End of boot clean up BOOTSZ == . + 777 / 1000 . = BOOTSZ * 1000 .END .MCALL .MODULE .MODULE EDTGBL,VERSION=62,COMMENT= ; COPYRIGHT (c) 1984, 1985, 1986 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. .IIF DF NLEDTG, .NLIST .IIF NDF BF, BF = 0 .IIF NDF MMG$T, MMG$T = 0 .ENABL LC .SBTTL ***************************** .SBTTL * SYSTEM DEFINITIONS * .SBTTL ***************************** .SBTTL MACROS .MCALL ...CM3, ..V1.., ..V2.., .CHAIN, .CLOSE, .CRRG, .DSTATU .MCALL .ENTER, .EXIT, .FETCH, .HERR, .HRESET,.LOCK, .LOOKUP .MCALL .PRINT, .PURGE, .RCTRLO,.READW, .RELEAS,.REOPEN,.SAVEST .MCALL .SDTTM, .SERR, .SETTOP,.SRESET,.TRPSET,.TTYIN, .TTYOUT .MCALL .UNLOCK, .UNPROT, .WAIT, .WRITW, .TTINR .MCALL .ADDR .BR .ASSUME ..V1.. .SBTTL MACRO DEFINITIONS .MACRO DSECT N=0,GLOBAL=YES ..TEMP = N ..GLBL = 0 .IIF IDN ,, ..GLBL = 1 .ENDM DSECT .MACRO DS NAME,SIZE=1,UNIT,GLOBAL .IF NB NAME .IF B .IIF NE ..GLBL, .GLOBL NAME .ENDC .IRP N,<\..TEMP> NAME = N .ENDR .ENDC .IF NB UNIT ..TEMP = ..TEMP + SIZE .IFF ..TEMP = ..TEMP + <2*> .ENDC .ENDM DS .MACRO ADDR ADR,REG,PUSH .IF IDN REG,SP MOV PC,-(SP) ADD #ADR-.,@SP .IFF .IF B PUSH MOV PC,REG .IFF .IF IDN PUSH, ADD PC,REG .IFF JSR REG,@PC .ENDC .ENDC ADD #ADR-.,REG .ENDC .ENDM ADDR .MACRO BSS COUNT,VAL=0 .REPT COUNT .WORD VAL .ENDR .ENDM BSS .IF EQ BF .MACRO MONERR CODE,LEVEL,FTL EMT 376 .BYTE LEVEL .IF IDN , .BYTE ^C .IFF .BYTE CODE .ENDC .ENDM MONERR .IFF .MACRO MONERR CODE,LEVEL,FTL EMT 376 .BYTE LEVEL .IF IDN , .BYTE ^C .IFF .BYTE CODE'.E .ENDC .ENDM MONERR .ENDC .MACRO CSIERR TEXT,CODE JSR R0,MSG .BYTE CODE .ASCIZ "TEXT" .EVEN .ENDM CSIERR .MACRO SPL PRIO .IF EQ MMG$T .IF NE PRIO MOV #PRIO*40,-(SP) .IFF CLR -(SP) .ENDC JSR PC,$MTPS .IFF .IF NE PRIO MOVB #PRIO*40,@#PS .IFF CLRB @#PS .ENDC .ENDC .ENDM SPL .IF NE MMG$T .MACRO .ASTX EMT ^O356 .ENDM .ASTX .ENDC .MACRO ASCR50 CHAR1,CHAR2,CHAR3 ...V2=0 .IRP X, ...V3=-1 .IIF EQ X-040,...V3=0 .IF GE X-'A .IIF LE X-'Z,...V3=1+X-'A .ENDC .IIF EQ X-'$,...V3=33 .IIF EQ X-'.,...V3=34 .IIF EQ X-'*,...V3=35 .IF GE X-'0 .IIF LE X-'9,...V3=36+X-'0 .ENDC .IIF EQ ...V3+1 .ERROR X; invalid RAD50 value; ...V2=...V2*50+...V3 .ENDR .ENDM .MACRO DEFALT SYM,VAL,GLOBAL .DSABL CRF .IIF NB , .GLOBL SYM .IF IDN , .IIF NDF SYM, SYM = 0 .IIF NE SYM&177776, .ERROR VAL .IFF .IIF NDF SYM, SYM = VAL .ENDC .IRP X,<\SYM> .ENABL CRF SYM = X .ENDR .ENDM DEFALT .MACRO ENSYS ADR JSR R5,$ENSYS .WORD ADR-.,340 .ENDM ENSYS .IF EQ MMG$T .MACRO PUT SRC,DST MOV SRC,DST .ENDM PUT .MACRO GET SRC,DST MOV SRC,DST .ENDM GET .IFF .MACRO PUT SRC,DST .IF DIF ,<(SP)+> .IF IDN ,<#0> CLR -(SP) .IFF MOV SRC,-(SP) .ENDC .ENDC MTPI DST .ENDM PUT .MACRO GET SRC,DST MFPI SRC .IF DIF ,<-(SP)> MOV (SP)+,DST .ENDC .ENDM GET .ENDC .SBTTL CONDITIONAL ASSEMBLY PARAMETERS .WEAK PI.NUM ESC$P = 0 DEFALT MICR$O FLAG DEFALT BATC$H FLAG DEFALT MPT$Y FLAG DEFALT MTT$Y FLAG DEFALT VT11$ FLAG DEFALT VS60$ FLAG DEFALT PWF$L FLAG DEFALT ERL$G FLAG DEFALT LIGH$T FLAG DEFALT TIM$IT FLAG DEFALT TIME$R FLAG DEFALT KW11$P FLAG DEFALT ROL$OV FLAG DEFALT SPC$PS FLAG DEFALT RDF$L FLAG DEFALT SYT$K FLAG DEFALT STAR$T FLAG DEFALT SILN$T FLAG DEFALT RTE$M FLAG DEFALT RO$M FLAG DEFALT HSR$B FLAG DEFALT HSR$O HSR$B DEFALT CONT$N FLAG DEFALT PANI$C FLAG DEFALT U$CL FLAG DEFALT SLE$DT FLAG DEFALT U$TIL FLAG DEFALT L$ANG FLAG DEFALT M$INI FLAG DEFALT XM$FET FLAG DEFALT EIS$I FLAG DEFALT AI$COD FLAG DEFALT PDT$OP FLAG DEFALT TPS$MK 177705 DEFALT X$RCBS 10. DEFALT IND$ON FLAG DEFALT SCCA$G FLAG .IF NE RTE$M DEFALT $LRLPZ, 4 DEFALT $RMLPZ, 4 .ENDC DEFALT MXN$ST 3 DEFALT STAC$K 60 DEFALT DCLS$ 2 DEFALT PATC$H 0 DEFALT FPU$11 FLAG DEFALT MQH$P2 FLAG DEFALT NAME$1 'R DEFALT NAME$2 'T DEFALT NAME$3 '1 DEFALT NAME$4 '1 .IF NE RTE$M DEFALT SUFX$H 'M DEFALT SUFX$S 'M .ENDC .IF EQ BF DEFALT NAME$5 'S DEFALT NAME$6 'J DEFALT SUFX$H <' > .IFF .IF EQ MMG$T DEFALT NAME$5 'F DEFALT NAME$6 'B DEFALT SUFX$H <' > .IFF DEFALT NAME$5 'X DEFALT NAME$6 'M DEFALT SUFX$H 'X .ENDC .ENDC DEFALT SUFX$S NAME$5 .MCALL .AUDIT .IIF EQ BF .RMONFB==100000 .IIF NE BF .RMNSJ ==100000 .IIF EQ MMG$T .XMSUBS==100000 .IF EQ MTT$Y .MTTINT==100000 .MTTEMT==100000 .ENDC .AUDIT .EDTGBL .BSTRAP .RMNSJ .RMONFB .USR .KMON .KMOVLY .AUDIT .MTTINT .MTTEMT .XMSUBS DEFALT DL11$N 1 DEFALT DZ11$N 0 .IF NE MTT$Y DEFALT MTI$M FLAG DEFALT MAT$S FLAG DEFALT DZ11$L 0 DEFALT DZ11$M 0 DEFALT DL11$M 0 DEFALT U.K. FLAG .IF NE DZ11$N DEFALT DZSP$D 2400 DEFALT DZLE$N 30 DEFALT DZST$P 0 .IIF EQ DZSP$D-1000, DZST$P = 40 .ENDC .IIF NE , TIM$IT = 1 .ENDC .IF NE HSR$B DEFALT HSRBSZ 16. .ENDC .IIF NE , TIME$R = 1 .IF EQ BF .IIF NE , TIME$R = 1 SYT$K = 0 .IF NE MMG$T .ERROR MMG$T = 0 .ENDC .IFF .IF NE SYT$K DEFALT FJOBS 7 .IFF FJOBS == 1 .ENDC DEFALT T$SCHD FLAG .ENDC .IIF NE , AI$COD = 0 .IF EQ MMG$T MQH$P2 = 0 .ENDC DEFALT CLOCK 60. .IF NE BF+TIME$R TIMHI = 117 TIMLO = 15000 .IF NE CLOCK-50. .IF NE CLOCK-60. .ERROR CLOCK CLOCK = 60. .ENDC .ENDC .ENDC .SBTTL SYSGEN OPTION BIT DEFINITIONS ERLG$ = 1 MMGT$ = 2 TIMIT$ = 4 RTEM$ = 10 FPU11$ = 400 MPTY$ = 1000 TIMER$ = 2000 MTTY$ = 20000 STASK$ = 40000 TSXP$ = 100000 SYSOP$ = ! ! SYSOP$ = SYSOP$ ! SYSOP$ = SYSOP$ ! ! ! SYSOP$ = SYSOP$ ! ! MVEC$T = 1 DCL$S = 1 IND$F = 1 SCC$A = 1 GT$NM = 0 LNK$IF = 0 VT50HH = 1 .IF EQ RO$M .MACRO .ROM OP,SRC,DST,VALUE=0,GLOBAL .IF NB .NTYPE ..TEMP,DST .IF EQ ..TEMP-67 OP SRC,(PC)+ .IF IDN , DST:: .WORD VALUE .IFF DST: .WORD VALUE .ENDC .MEXIT .ENDC .IIF GE <..TEMP&70>-60, .ERROR .IIF EQ ..TEMP&67-27, .ERROR .ENDC .NTYPE ..TEMP,SRC .IIF NE ..TEMP-67, .ERROR .IF B OP (PC)+ .IFF OP (PC)+,DST .ENDC .IF IDN , SRC:: .WORD VALUE .IFF SRC: .WORD VALUE .ENDC .ENDM .ROM .IFF .MACRO .ROM OP,SRC,DST,VALUE=0,GLOBAL .IF NB .NTYPE ..TEMP,DST .IF EQ ..TEMP-67 OP SRC,DST .SAVE .PSECT RTDATA .IF IDN , DST:: .WORD VALUE .IFF DST: .WORD VALUE .ENDC .RESTORE .MEXIT .ENDC .IIF GE <..TEMP&70>-60, .ERROR .IIF EQ ..TEMP&67-27, .ERROR .ENDC .NTYPE ..TEMP,SRC .IIF NE ..TEMP-67, .ERROR .IF B OP SRC .IFF OP SRC,DST .ENDC .SAVE .PSECT RTDATA .IF IDN , SRC:: .WORD VALUE .IFF SRC: .WORD VALUE .ENDC .RESTORE .ENDM .ROM .ENDC .SBTTL DEFINE EIS MACRO EQUIVELANTS .IF EQ .MACRO SOB REG,DEST DEC REG BNE DEST .ENDM .ENDC .SBTTL ASCII CHARACTER DEFINITIONS .ENABL GBL .GLOBL $$FORT,$$EDIT CTRLB = 2 CTRLC = 3 BELL = 7 BS = 10 TAB = 11 LF = 12 FF = 14 CR = 15 CTRLO = 17 CTRLU = 25 CANCEL = 30 CTRLZ = 32 ESCAPE = 33 SPACE = 40 XPOINT = 41 DOLLAR = 44 LPAREN = 50 RPAREN = 51 ASTER = 52 COMMA = 54 MINUS = 55 PERIOD = 56 SLASH = 57 COLON = 72 SCOLON = 73 LANGLE = 74 EQUALS = 75 ATSIGN = 100 LBRACK = 133 RBRACK = 135 UPAROW = 136 RUBOUT = 177 .SBTTL SYSTEM CONFIGURATION WORD FORMAT FBMON$ = 1 SLKMO$ = 2 HWDSP$ = 4 BATCH$ = 10 SLEDI$ = 20 CLK50$ = 40 HWFPU$ = 100 FJOB$ = 200 GTLNK$ = 400 USR$ = 1000 QUEUE$ = 2000 LSI11$ = 4000 KT11$ = 10000 LKCS$ = 20000 KW11P$ = 40000 CLOCK$ = 100000 .IF EQ CLOCK-50. CLK50 = CLK50$ .IFF CLK50 = 0 .ENDC CACHE$ = 1 MPTY$ = 2 SWREG$ = 4 LIGHT$ = 10 LDREL$ = 20 XITSW$ = 40 BUS$ = 100 CIS$ = 200 EIS$ = 400 VS6$0 = 1000 GSCCA$ = 10000 PROS$ = 20000 PDP70$ = 40000 PDP60$ = 100000 .IF NE BF .IF EQ SCCA$G GSCCA=0 .IFF GSCCA=GSCCA$ .ENDC .IFF GSCCA=0 .ENDC VARSZ$ == 400 ABTIO$ == 1000 SPFUN$ == 2000 HNDLR$ == 4000 SPECL$ == 10000 WONLY$ == 20000 RONLY$ == 40000 FILST$ ==100000 IFLIF = 1 IFLEOF = 2 IFIND = 4 IFDOL = 10 IFSPCD = 20 IFBEXT = 40 IFRVTTY = 100 IFGTCC = 200 IFACTV = 400 IFCHAIN = 1000 IFEKO$ = 2000 IFCTLC = 4000 IFDAT = 10000 IFEOF$ = 20000 IFABRT = 40000 IFINP = 100000 .ASSUME IFGTCC EQ 200 SP$ACT = 200 CC$IND = 4 CC$GLB = 10 CC$ALL = 17 LN$IND = 40 IN$RUN = 100 IN$IND = 200 UCFRUN =: 0 DCLRUN =: 1 CCLRUN =: 2 UCLRUN =: 3 UCFON =: 1 DCLON =: 2 CCLON =: 4 UCLON =: 10 UCFKMN =: 200 .SBTTL TERMINAL CONFIGURATION BITS HWTAB$ = 1 CRLF$ = 2 FORM$ = 4 FBTTY$ = 10 TANSI$ = 20 TCBIT$ = 100 PAGE$ = 200 LINSP$ = 7400 TTSPC$ = 10000 REMOT$ = 20000 TTLC$ = 40000 BKSP$ = 100000 VT05$ = BKSP$ INICF$ = HWTAB$ ! FORM$ ! TCBIT$ ! TTSPC$ ! TTLC$ ! BKSP$ CHRLN$ = 3 USTOP$ = 4 PAREN$ = 10 ODDPR$ = 20 RPALL$ = 200 WPALL$ = 100000 FILL$ = 1 CTRLU$ = 2 DTACH$ = 20 WRWT$ = 40 INEXP$ = 100 .ASSUME PAGE$ EQ 200 SHARE$ = 2000 HNGUP$ = 4000 DZ11$ = 10000 CTRLC$ = 40000 CONSL$ = 100000 INIST$ = FILL$ ! CTRLU$ ! PAGE$ ! CTRLC$ AS.HNG = 100 AS.CAR = 200 AS.OUT = 20000 AS.INP = 40000 AS.CTC = 100000 .SBTTL Job state word bit definitions ABPND$ == 1 BATRN$ == 2 CSIRN$ == 4 USRRN$ == 10 ABORT$ == 40 CPEND$ == 200 WINDW$ == 10000 VRUN$ == 20000 VLOAD$ == 40000 CMPLT$ == 100000 .SBTTL SYSCOM DEFINITIONS VIRTOP = 2 SYSCOM = 40 PARMS = 40 USERPC = 40 USERSP = 42 JSW = 44 UFLOAT = 46 USERTOP = 50 ERRBYT = 52 USERRB = 53 SYSPTR = 54 OVSZ = 56 TTFILL = 56 TTNFIL = 57 .SBTTL JSW BIT DEFINITONS GTLIN$ = 10 EDIT$ = 20 .ASSUME EDIT$ EQ SLEDI$ SPXIT$ = 40 TCBIT$ = 100 HLTER = 200 VBGEX$ = HLTER CHAIN$ = 400 OVLY$ = 1000 VIRT$ = 2000 CHNIF$ = 4000 TTSPC$ = 10000 .ASSUME TTSPC$ EQ EDIT$*400 RSTRT$ = 20000 TTLC$ = 40000 USWAP$ = 100000 .ASSUME CHAIN$ EQ 400 SUCCS$ = 1 WARN$ = 2 ERROR$ = 4 FATAL$ = 10 UNCON$ = 20 .SBTTL DIRECTORY ENTRY FORMAT DSECT GLOBAL=NO DS E.STAT,1 DS E.NAME,3 DS E.LENG DS E.USED,0 DS E.CHAN,1 BYTE DS E.JNUM,1 BYTE DS E.DATE DS L.ENTR,0 TENT = 400 EMPTY = 1000 PERM = 2000 ENDBLK = 4000 PROT = 100000 .SBTTL DIRECTORY HEADER FORMAT DSECT GLOBAL=NO DS D.TOTAL DS D.NEXT DS D.HIGH DS D.EXTR DS D.STRT DS L.HDR,0 CLOS.. = 1 DELE.. = 2 LOOK.. = 3 ENTR.. = 4 RENM.. = 5 .SBTTL HANDLER PREFIX AREA FORMAT DSECT 52,GLOBAL=NO DS H.SIZ DS H.DVSZ DS H.DSTS DS H.GEN DS H.BPTR DS H.BLEN DS H.READ DS H.DATA ..TEMP = 174 DS H.DCSR DS H.ICSR DS H.DKCD DS H.SYCD ..TEMP = 400 DS H.SETT .SBTTL I/O CHANNEL FORMAT DSECT GLOBAL=YES DS C.CSW DS C.SBLK DS C.LENG DS C.USED DS C.DEVQ,1 BYTE DS C.UNIT,1 BYTE CHSIZ == ..TEMP .SBTTL CSW BIT DEFINITIONS HDERR$ == 1 INDX$M == 76 RENAM$ == 100 DWRIT$ == 200 DBLK$M == 17400 EOF$ == 20000 ACTIV$ == 100000 DBLK$N = ^C DBLOK$ = 400 .SBTTL I/O QUEUE ELEMENT FORMAT DSECT GLOBAL=YES DS Q.LINK,1,GLOBAL=NO DS Q.CSW DS Q.BLKN DS Q.FUNC,1 BYTE DS Q.JNUM,0 BYTES DS Q.UNIT,1 BYTE DS Q.BUFF DS Q.WCNT DS Q.COMP .IF NE MMG$T DS Q.PAR DS Q.FREE,2 .ENDC QESIZE = ..TEMP QWDSIZ = QESIZE/2 .SBTTL TIMER QUEUE ELEMENT FORMAT DSECT DS C.HOT DS C.LOT DS C.LINK DS C.JNUM DS C.SEQ DS C.SYS DS C.COMP .SBTTL FORK BLOCK FORMAT DSECT DS F.BLNK DS F.BADR DS F.BR5 DS F.BR4 F.BSIZ = ..TEMP .SBTTL .GTJB RETURN AREA FORMAT J.BLGH = 20 .IF NE MMG$T .SBTTL WINDOW CONTROL BLOCK FORMAT DSECT DS W.BRCB DS W.BLVR DS W.BHVR DS W.BSIZ DS W.BOFF DS W.BFPD,1 BYTE DS W.BNPD,1 BYTE DS W.BLPD W.BLGH == ..TEMP W.NNUM == 8. WNWDSZ = /2 .SBTTL REGION CONTROL BLOCK FORMAT DSECT DS R.BADD DS R.BSIZ DS R.BSTA,1 BYTE DS R.BNWD,1 BYTE R.BLGH = ..TEMP R.GNUM = 6. RGWDSZ = /2 MAXREG = 177776 .SBTTL REGION CONTROL BLOCK STATUS BYTE BIT DEFINITIONS R.STOP = 1 R.SHAR = 2 R.EXIT = 4 R.CACH = 10 .SBTTL WINDOW DEFINITION BLOCK FORMAT DSECT DS W.NID,1 BYTE DS W.NAPR,1 BYTE DS W.NBAS DS W.NSIZ DS W.NRID DS W.NOFF DS W.NLEN DS W.NSTS W.NLGH = ..TEMP .SBTTL WINDOW STATUS WORD BIT DEFINITIONS WS.MAP = 400 WS.ELW = 20000 WS.UNM = 40000 WS.CRW = 100000 .SBTTL REGION DESCRIPTOR BLOCK FORMAT DSECT DS R.GID DS R.GSIZ DS R.GSTS R.GLGH = ..TEMP DS R.NAME,2 DS R.GBAS R.RLGH = ..TEMP .SBTTL REGION STATUS WORD BIT DEFINITIONS RS.NSM =: 20 RS.BAS =: 40 RS.CAC =: 100 RS.EXI =: 200 RS.EGR =: 400 RS.AGE =: 1000 RS.CGR =: 2000 RS.GBL =: 4000 RS.NEW =: 10000 RS.NAL =: 20000 RS.UNM =: 40000 RS.CRR =: 100000 .SBTTL GLOBAL REGION CONTROL BLOCK FORMAT DSECT DS GR.SIZ DS GR.ADD DS GR.STA,1 BYTE DS GR.SHC,1 BYTE DS GR.NAM,2 GR.ESZ =: ..TEMP GR.NUM =: X$RCBS GR.TSZ =: /2 .SBTTL GLOBAL REGION CONTROL BLOCK STATUS BYTE BIT DEFINITIONS GR.CAC =: 020 GR.NRF =: 040 GR.PRM =: 100 GR.AGE =: 200 .SBTTL OVERLAY HANDLER DATA STRUCTURES DSECT GLOBAL=YES DS ,5 DS V$REG,2 DS V$END .ENDC .SBTTL DEVICE AND VECTOR DEFINITIONS PS = 177776 PR0 = 0 PR4 = 200 PR5 = 240 PR6 = 300 PR7 = 340 SR = 177570 V.TR4 = 4 V.TR10 = 10 V.BPT = 14 V.IOT = 20 V.PWFL = 24 V.EMT = 30 V.TRAP = 34 V..TKB = 60 V..TPS = 64 V.LTC = 100 V.MPTY = 114 V.SBRK = 140 V.FPP = 244 V.MAX = 500 .IF NE KW11$P LKCS = 172540 LKPB = 172542 LKVEC = 104 LKSTAT = 115 .IFF LKCS = 177546 LKPB = 177546 LKVEC = 100 LKSTAT = 100 .ENDC DEFALT TKS 177560 GLOBLE DEFALT TKB 177562 GLOBLE DEFALT TPS 177564 GLOBLE DEFALT TPB 177566 GLOBLE DEFALT V.TKB 60 GLOBLE DEFALT V.TPS 64 GLOBLE DEFALT TTYIN 134. DEFALT TTYOUT 40. TTYIN = TTYIN & 177776 TTYOUT = TTYOUT & 177776 .IIF LT TTYIN-74., TTYIN = 74. .IIF GT TTYIN-254., TTYIN = 256. .IIF LT TTYOUT-10., TTYOUT = 10. .IIF GT TTYOUT-134., TTYOUT = 134. DEFALT VT.VEC 320 DEFALT VT.CSR 172000 KISAR0 = 172340 KISAR1 = 172342 KISAR2 = 172344 KISDR0 = 172300 UISAR0 = 177640 UISAR1 = 177642 UISDR0 = 177600 SR0 = 177572 SR1 = 177574 SR2 = 177576 SR3 = 172516 AP$ACF = 77406 LOWCOR = 1600 PMODE = 30000 CMODE = 140000 PROCFG = 37776 CTI = -10. SLOT0 = -14. V.MMU = 250 .SBTTL MISCELLANEOUS SYSTEM DEFINITIONS BATSW$ =: 10 .ASSUME BATSW$ EQ 10 TT$$$1 =: 10 .ASSUME TT$$$1 EQ 10 TT$$$2 =: 12 .ASSUME TT$$$2 EQ 12 L.UBUF = 2000 OVLYSZ = 2 OVLYN = 0-OVLYSZ EMTERR = 17*20+EMT IENABL = 100 CHAINA = 510 CHNUM = 16. CHNWDS = 5 CHNBYT = CHNWDS*2 CHOVLY = 15. .IF NE BF FCHNM = 16. .ENDC DOFSET = 6-2 SAVEST = <5+MMG$T>*2 OLDPS = SAVEST+4 ERRPS = OLDPS*2+2 ERRPC = OLDPS*2 .PSECT RT11 .PSECT RMNUSR .PSECT RTDATA .PSECT OWNER$ .PSECT UNAM1$ .PSECT UNAM2$ .PSECT PNAME$ .PSECT ENTRY$ .PSECT STAT$ .PSECT DVREC$ .PSECT HSIZE$ .PSECT DVSIZ$ .PSECT DVINT$ .IF NE MTT$Y .PSECT MTTY$ .ENDC .PSECT RMON .PSECT USRRMN .IF NE MMG$T .PSECT XMSUBS .ENDC .IF NE MTT$Y .PSECT MTEMT$ .PSECT MTINT$ .ENDC .IF NE BF .PSECT STACK$ .ENDC .PSECT PATCH$ .PSECT OVLY0 GBL,OVR .PSECT OVLYE GBL,OVR .PSECT OVLY2 GBL,OVR .PSECT OVLYE2 GBL,OVR .PSECT OVLY4 GBL,OVR .PSECT OVLY6 GBL,OVR .PSECT OVLY10 GBL,OVR .PSECT OVLY12 GBL,OVR .PSECT OVLY14 GBL,OVR .PSECT OVLY16 GBL,OVR .PSECT OVLY20 GBL,OVR .PSECT OVLY22 GBL,OVR .PSECT OVLY24 GBL,OVR .PSECT OVLY26 GBL,OVR .PSECT OVLY30 GBL,OVR .PSECT OVLY32 GBL,OVR .PSECT OVLY34 GBL,OVR .PSECT OVLY36 GBL,OVR .PSECT OVLY40 GBL,OVR .PSECT OVLY42 GBL,OVR .PSECT $LAST$ .IIF DF NLEDTG, .LIST .MCALL .MODULE .MODULE KMON,VERSION=64,COMMENT= ; COPYRIGHT (c) 1987 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. .SBTTL Subsetting command conditionals DEFALT M$INI 1 DEFALT L$ANG 1 DEFALT U$TIL 1 DEFALT E$$ M$INI DEFALT B$$ M$INI DEFALT D$$ M$INI DEFALT DATE$$ M$INI DEFALT TIME$$ M$INI DEFALT CLOS$$ M$INI DEFALT GT$$ M$INI DEFALT STAR$$ M$INI DEFALT FRUN$$ M$INI DEFALT SRUN$$ M$INI DEFALT INST$$ M$INI DEFALT REMO$$ M$INI DEFALT LOAD$$ M$INI DEFALT UNLO$$ M$INI DEFALT ASSI$$ M$INI DEFALT DEAS$$ M$INI DEFALT REEN$$ M$INI DEFALT SUSP$$ M$INI DEFALT RESU$$ M$INI DEFALT RESE$$ M$INI DEFALT SET$$ M$INI DEFALT HELP$$ M$INI DEFALT GET$$ M$INI DEFALT SAVE$$ M$INI DEFALT MOUN$$ M$INI DEFALT DISM$$ M$INI DEFALT ABOR$$ M$INI DEFALT FORT$$ L$ANG DEFALT MACR$$ L$ANG DEFALT DIBO$$ L$ANG DEFALT COMP$$ L$ANG DEFALT LINK$$ L$ANG DEFALT LIBR$$ L$ANG DEFALT EXEC$$ L$ANG DEFALT COPY$$ U$TIL DEFALT DIRE$$ U$TIL DEFALT EDIT$$ U$TIL DEFALT SQUE$$ U$TIL DEFALT INIT$$ U$TIL DEFALT FORM$$ U$TIL DEFALT DUMP$$ U$TIL DEFALT DIFF$$ U$TIL DEFALT TYPE$$ U$TIL DEFALT PRIN$$ U$TIL DEFALT RENA$$ U$TIL DEFALT DELE$$ U$TIL DEFALT PROT$$ U$TIL DEFALT UNPR$$ U$TIL DEFALT BOOT$$ U$TIL DEFALT SHOW$$ U$TIL DEFALT MAKE$$ U$TIL DEFALT TECO$$ U$TIL DEFALT MUNG$$ U$TIL DEFALT CREA$$ U$TIL DEFALT BACK$$ U$TIL .IF EQ BF FRUN$$ = 0 SUSP$$ = 0 RESU$$ = 0 SRUN$$ = 0 ABOR$$ = 0 .ENDC .IF EQ SYT$K SRUN$$ = 0 .ENDC .IF EQ &^CMTT$Y GT$$ = 0 .ENDC .SBTTL MACROS OERPTR=0 .MACRO KMEROR TEXT,ARG,ERRLEV .IF NB ARG JSR R0,MSGKM .ASCIZ \?KMON-U-TEXT\ .EVEN .IIF GE OVLYN,.ERROR .IFF .IF GE OVLYN OJSR PC,ERROVR .IFF CALL ERROVR .IFTF .WORD OERPTR .IF DF OERBEG .CSECT OVLYE . = OERBEG+OERPTR .IF B ERRLEV .BYTE FATAL$ .IFF .BYTE ERRLEV .ENDC .ASCIZ \TEXT\ .IIF GE <.-STADDR> - <1000*OVLYSZ>, .ERROR .ENDC .NCHR $TMPN, OERPTR=OERPTR+$TMPN+2 .IFF .PSECT RT11 .IFT .IRP N,<\OVLYN> .CSECT OVLY'N .ENDR .ENDC .ENDC .ENDM KMEROR OERPT2 = 0 .MACRO KMRTMG TEXT,ERRLEV,PRFILE .IF GE OVLYN .IF IDN , OJSR PC,RTERR1 .IFF .IF IDN , OJSR PC,RTERR3 .IFF .IF IDN ,JSTNAM OJSR PC,RTERR4 .IFF OJSR PC,RTERR2 .ENDC .ENDC .ENDC .IFF .IF IDN , CALL RTERR1 .IFF .IF IDN , CALL RTERR3 .IFF .IF IDN , CALL RTERR4 .IFF CALL RTERR2 .ENDC .ENDC .ENDC .IFTF .WORD OERPT2 .IF DF OERBG2 .CSECT OVLYE2 . = OERBG2+OERPT2 .IF B ERRLEV .BYTE FATAL$ .IFF .BYTE ERRLEV .ENDC .ASCII \TEXT\<200> .IIF GE <.-STADD2> - <1000*OVLYSZ>,.ERROR .ENDC .NCHR $TMPN, OERPT2=OERPT2+$TMPN+2 .IFF .PSECT RT11 .IFT .IRP N,<\OVLYN> .CSECT OVLY'N .ENDR .ENDC .ENDM KMRTMG .MACRO OVLINK CMD .IF GE OVLYN OJSR R2,OVLINK .IFF JSR R2,OVLINK .ENDC .IF EQ N.'CMD-1 .BYTE O.'CMD/2,OVLY-KMON/1000 .IFF .BYTE O.'CMD/2,N.'CMD + <$RTEND - KMON + 777 /1000> .ENDC .ENDM OVLINK .MACRO CMDTBL CMD .IF NDF CMD .WORD CCLENT-CMDBAS .IFF .IF DF O.'CMD .IF EQ N.'CMD-1 .BYTE O.'CMD/2,OVLY-KMON/1000 .IFF .BYTE O.'CMD/2,N.'CMD + <$RTEND - KMON + 777 /1000> .ENDC .IFF .WORD CMD-CMDBAS .ENDC .ENDC .ENDM CMDTBL .IIF DF NLKMON, .NLIST .SBTTL ********************* .SBTTL * KMON * .SBTTL ********************* .SBTTL SLIDE KMON/USR UP OR DOWN .PSECT RT11 KMON:: .WORD 0 KUMOVE: MOV PC,R4 .LOCK BR KUMOV1 MOVEUP: CLR -(SP) 1$: MOV -(R1),-(R4) BNE 1$ CMP R1,PC BLO 2$ CMP R1,SP BNE 1$ MOV R4,SP TST (SP)+ BR 1$ 2$: MOV R0,R1 ADD R0,@SP RETURN MINMOV = . - KMON .ENABL LSB KUMOV1: CMP -(R4),-(R4) ASL R0 BCS 2$ ADD #KMSIZE+USRSIZ,R4 MOV R4,R1 ADD R0,R4 BIT #IFDAT,@.STATWD BEQ 1$ ADD @R1,R4 ADD @R1,R1 ADD R0,@.INBFPT ADD R0,ENBFPT 1$: CALL MOVEUP BR 5$ 2$: ADDR MOVEDN,R3 CALL CLRLOW ADDR MOVEDE,R4,PUSH MOV @SP,R1 ADD #KMSIZE+USRSIZ,R1 3$: MOV -(R4),-(R1) CMP R4,R3 BNE 3$ MOV @SP,R4 MOV @.STATWD,@SP MOV R1,-(SP) MOV R4,R1 ADD R0,R4 BCC MEMERR .IF EQ MMG$T CMP R4,#1000 .IFF CMP R4,#<40000-KMSIZE>;Moving too low? KMON cannot go into PAR1. .ENDC BLO MEMERR CALL @(SP)+ BIC #^C,(SP)+ BEQ 5$ ADD R0,@.INBFPT ADD R0,ENBFPT MOV @R1,R3 4$: MOV (R1)+,(R4)+ SUB #2,R3 BNE 4$ 5$: MOV R3,-(SP) JSR R2,7$ ..USRL:: .WORD USRLOC-$RMON .KMLOC:: .WORD KMLOC-$RMON .$USRL:: .WORD $USRLC-$RMON .$KMLO:: .WORD $KMLOC-$RMON ..SYSL:: .WORD SYSLOW-$RMON .IF EQ BF .MONLC:: .WORD MONLOC-$RMON .ENDC .WORD 0 .WORD .USRBU-RELUS4 .WORD .USRTO-RELUS4 .WORD .USRBO-RELUS4 .WORD .FNAME-RELUS4 .WORD .FNAM6-RELUS4 .WORD .D.USR-RELUS4 .WORD .M.USR-RELUS4 .WORD .USRIO-RELUS4 .WORD .FILDE-RELUS4 .WORD .HANSP-RELUS4 .WORD .DVSTS-RELUS4 .IF EQ BF .WORD .DRVTB-RELUS4 .ENDC .IF EQ MMG$T .WORD .STKSV-RELUS4 .WORD .SVSTK-RELUS4 .ENDC .WORD 0 6$: ADD R0,@R3 7$: MOV (R2)+,R3 BNE 6$ 8$: MOV (R2)+,R3 BEQ 9$ ADD PC,R3 RELUS4: ADD R0,@R3 BR 8$ 9$: ADD R0,SYSIOB MOV (SP)+,R2 MOV (SP)+,R3 ADD R0,(PC)+ ACCUM: .WORD 0 .UNLOCK ADD R0,@SP RETURN .DSABL LSB MOVEDN: MOV SP,R3 CLR -(SP) 1$: MOV (R1)+,(R4)+ BNE 1$ CMP R1,PC BHI 2$ CMP R1,R3 BNE 1$ MOV R4,SP BR 1$ 2$: ADD R0,@SP RETURN .WORD 0 MOVEDE: .ASSUME EQ 26. MEMERR: CALLR OVERC .IF NE AI$COD .IF NE RESE$$ RESET:: BIS #,@.STATWD CLR R3 MOV (PC)+,(R3)+ BIC R0,R0 MOV (PC)+,(R3)+ .IF EQ MMG$T .EXIT .IFF .ASTX .ENDC MOV @#SYSPTR,R3 BR BCLEAN .ENDC .ENDC .SBTTL KMON CLEANUP AFTER EXIT; COLLECT CMD LINE MEXIT: CALL LOCATE MEXIT2:: .IF EQ BF .IF EQ MTT$Y BIT #IFCTLC,@.STATWD BEQ 111$ CLR TTILCT-$RMON(R3) CLR TTIBUF+4-$RMON(R3) MOV TTIBUF+2-$RMON(R3),TTIBUF+6-$RMON(R3) .IF NE HSR$B MOV HSRB-$RMON(R3),HSRBGP-$RMON(R3) MOV #-1,HSRBCC-$RMON(R3) .ENDC .ENDC 111$: CALL QREST1 CLR @.RECURS CLR @.DFLG MOV @#SYSPTR,R3 CLR MONCAL-$RMON(R3) .ENDC CLR ENBFPT MOV @.$KMLO,@.KMLOC BIC #TTSPC$+TTLC$,@#JSW BIC #IFBEXT!IFRVTTY!IFGTCC,@.STATWD CLR EMTMOD CLR GETCNT .IF NE BF MOV @#SYSPTR,R3 .ENDC BCLEAN: MOV SP,KMONIN-$RMON(R3) CLR BLKEY-$RMON(R3) .IF EQ BF CALL CLRHD1 CLR $SYSCH+10-$RMON(R3) CLR @.EXTFLG .IF EQ MTT$Y CLR TTIPRE-$RMON(R3) CLRB TTILCT+1-$RMON(R3) .IFF MOV I.CNSL-$RMON(R3),R0 CLRB T.PTTI(R0) BIT #IFCTLC,@.STATWD BEQ 1$ CLR T.TTLC(R0) CLR T.ICTR(R0) MOV T.IPUT(R0),T.IGET(R0) .ENDC 1$: .IFF .IF EQ MTT$Y MOV CNTXT-$RMON(R3),R0 CLR I.PTTI(R0) .IFF MOV BKCNSL-$RMON(R3),R0 CLRB T.PTTI(R0) .ENDC CLR @.EXTFLG .ENDC MOV (SP)+,R0 ADDR KMSTAK,SP MOV @SP,SP TST R0 BNE KCHAIN .IF EQ AI$COD .IF NE RESE$$ RESET:: .ENDC .ENDC RESET1: BIT #,@#JSW BEQ 1$ BIS #,@.STATWD BIC #,@#JSW MOV SP,EXPSPC BR 2$ 1$: BIT #CHNIF$,@#JSW BEQ 3$ BIS #IFABRT!IFCHAIN,@.STATWD 2$: 3$: CALL CLRLOW .IF NE BF .HRESET .IFF CALL RSTSRH .ENDC CTRLCK: BIC #CHAIN$,@#JSW KCHAIN: MOV .USRBUF,SYSIOB ADDR KMSTAK,R0 MOV R0,SP .RCTRLO STRT: MOV #-1,CMDFLG ADDR KMCBUF,R5 MOV R5,R3 CLR (PC)+ DOTFLG: .WORD 0 MOV #KMCBFLN,R1 .IIF EQ LNK$IF, .NLIST .IF NE LNK$IF BIT #IFLIF,@.STATWD BEQ STRTP MOV KBFLN,R1 .ENDC .IIF EQ LNK$IF, .LIST .ENABL LSB STRTP: .IF NE BF .UNLOCK .ENDC BIT #CHAIN$,@#JSW BEQ 1$ .IF NE BF .LOCK .ENDC CALLR RUN 1$: MOV .STATWD,R4 BIC #,@R4 BISB @#USERRB,@#EXTIND-$RMON .EXTIND==.-2 BITB @#ERRLEV-$RMON,@#USERRB .ERRLEV==.-4 BNE KABORT BIT #,@R4 BNE KABORT CLRB @#USERRB 2$: BIT #,@R4 BNE 3$ BIT #,@R4 BEQ 4$ BIC #,@R4 3$: CALL CHANIF BR STRT 4$: TST DATAFG BNE 5$ MOV @.INBFPT,R2 BNE IFDCLN 5$: BIT #,@R4 BNE INDFLL INDXIT: MOV #INDSTA-$RMON,R2 .INDSTA==.-2 .Assume IN$IND EQ 200 TSTB @R2 BPL 7$ BICB #,@R2 BISB #,@R2 INDX2: MOV @#$INDDV-$RMON,R0 .$INDDV == .-2 ADDR INDCNT,R2 MOV R2,R1 ADD #6,R1 MOV (R0)+,(R1)+ MOV (R0)+,(R1)+ MOV SP,EXPSPC 6$: MOV #CHAINA,R1 MOV @R2,(R1)+ CALL CHANF1 BR 3$ 7$: .IF NE CONT$N BIC #,@.STATWD ADDR KCTNU,R2 TST @R2 BNE CFATAL MOV SP,(R2)+ BR 6$ .ENDC KPMT: CALL KDOT MOV R5,R5 BIC #,@.STATWD 8$: MOV @#JSW,-(SP) 9$: MOV #,@#JSW .TTINR MOV R5,R5 BCS 9$ MOV (SP)+,@#JSW CLR (PC)+ DATAFG: .WORD 0 JSR R2,CHARCK BR 8$ JSR R2,CNTCK BR 8$ BIC #IFINP,@R4 CALLR ATSCAN .DSABL LSB .SBTTL ABORT DCL/@FILE PROCESSING KABORT: TST COROVR BNE 1$ BIT #IFDAT,@R4 BEQ 4$ 1$: CALL PUTBAK CLR COROVR MOV @.IFSVST,R4 BEQ 4$ SUB #6,R4 2$: TSTB @R4 BEQ 3$ SUB #IFSVSZ,R4 BR 2$ 3$: CLR @.IFSVST CALL PUTBLK 4$: CLR @.EXTFL BIC #^C,@.STATWD CLRB @#USERRB CLR DATAFG CALLR CTRLCK ATEOD: TST DOTFLG BNE KPMT BIT #IFACTV,@R4 INDFLL: BNE INDFIL BITB #,@.INDSTA BNE INDXIT CALL PUTBAK CLR @.EXTFL CALLR STRT .IF NE CONT$N CFATAL: CALLR BADCOM .ENDC .SBTTL GET COMMAND LINE FROM DCL/@FILE BUFFER MINFRE=MINMOV*2 .ENABL LSB IFDCLN: CMPB @R2,#-1 BEQ ATEOD CMPB @R2,#177 BNE 2$ TST DOTFLG BNE KPMT BITB #,@.INDSTA BNE 1$ BIT #,@R4 BEQ 1$ TST @(PC)+ .CURLEV:: .WORD CURLEV-$RMON BEQ INDFIL 1$: INC @.INBFPT CALLR INDXIT 2$: ADDR KMON+KMSIZE+USRSIZ,R4 MOV R4,R0 3$: ADD #MINFRE,R0 CMP R0,R2 BLO 3$ SUB #MINFRE,R0 CMP R4,R0 BHIS 4$ MOV R4,-(R0) SUB R0,@R0 ADD @R4,@R0 CMP @R0,#MINMOV BLOS 4$ MOV SP,@.EXTFL MOV R0,@R4 SUB R4,@R4 MOV R1,-(SP) CALL PUTBL1 MOV (SP)+,R1 ADD R0,R5 ADD R0,R3 4$: BIS #IFDAT,@.STATWD CLR @.EXTFL 5$: CLR -(SP) TSTB @R2 BPL 6$ BIT #IFEKO$,@.STATWD BNE 6$ MOV R2,@SP 6$: BICB #200,@R2 7$: MOVB (R2)+,R0 BNE 8$ MOV #LF,R0 8$: CLR DATAFG JSR R2,CHARC1 BR 6$ MOV R2,@.INBFPT MOV (SP)+,R0 BEQ 9$ CALL KDOT MOV R4,R4 .PRINT 9$: JSR R2,CNTCK BR 12$ MOV R5,-(SP) 10$: TSTB -(R5) BEQ 11$ CMPB @R5,#ATSIGN BNE 10$ BR AT1 11$: MOV R5,R3 MOV (SP)+,R5 BIS #IFINP,@.STATWD BR CMDREC 12$: CMPB @R2,#-1 BNE 5$ ILCNT: KMEROR .DSABL LSB .SBTTL INDIRECT FILE EXPANSION INDFIL: MOV R1,-(SP) MOV R3,-(SP) OVLINK INDF1 .SBTTL INDIRECT FILE STACK FORMAT .SBTTL Scan line for indirect file construct .IIF EQ LNK$IF, .NLIST .IF NE LNK$IF .ENDC .IIF EQ LNK$IF, .LIST ATSCAN: MOV R5,-(SP) 10$: TSTB -(R5) BEQ SCNDUN CMPB @R5,# BNE 10$ AT1: MOV R1,-(SP) OVLINK AT2 AT3: CALL GETHAR MOV R3,-(SP) OVLINK AT4 .ENABL LSB SCNDUN: MOV R5,R4 MOV (SP)+,R5 BIT #IFACTV,@.STATWD BEQ CMDREC OVLINK SCN0 SCN3: .IIF EQ LNK$IF, .NLIST .IF NE LNK$IF BIT #,@.STATWD BNE SCN2 .ENDC .IIF EQ LNK$IF, .LIST CALLR STRT .IIF EQ LNK$IF, .NLIST .IF NE LNK$IF SCN2: BIC #,@.STATWD MOV ACCUM,R0 CLR DATAFG SUB R0,@SP RETURN .ENDC .IIF EQ LNK$IF, .LIST .DSABL LSB .SBTTL COMMAND PROCESSOR CMDREC: TSTB -(R5) BEQ CTRLC2 CMPB (R5)+,#CTRLC BNE 1$ .EXIT 1$: MOV R5,-(SP) ADDR KMCBND,SP SCNLIN: TSTB -(R5) BEQ CLASIFY CMPB #'(,@R5 BNE SCNLIN OVLINK FACTOR CTRLC2: CALLR CTRLCK .SBTTL COMMAND RECOGNIZER .ENABL LSB CLASIFY:TST (SP)+ MOV (SP)+,R5 MOV .CLIFLG,R0 TSTB EXEFLG BNE 15$ .IF NE U$CL BITB #,@R0 BMI 5$ BEQ 10$ .ASSUME UCFRUN EQ 0 .IF NE,RTE$M BIC #<177400>,@R0 .IFF; NE,RTE$M BIC #<177400!UCFON>,@R0 .ENDC; NE,RTE$M MOV #<3*400+CHOVLY>,R0 EMT 374 MOV R5,R2 ADDR RUN2,SP OVLINK UCF 5$: BICB #,@R0 .ENDC 10$: BITB #,@R0 BEQ CCLENT 15$: MOVB #,CLITYP-CLIFLG(R0) CLRB FOTFL2 CLRB SOTFL2 CLRB TOTFL2 ADDR RUNFLG,R0 CLR (R0)+ MOV #,(R0)+ MOV $DK,(R0)+ MOV $DK+2,(R0)+ .IF NE EXEC$$ MOV #,(PC)+ EXEPTR: .WORD 0 .ENDC CALL ALPHT BCC BADCM1 MOV R5,R3 ADDR COMLST,R2 CLR R0 20$: INC R0 MOV R3,R5 25$: CALL CHMTCH BNE 30$ CALL ALPHNT BCC 40$ TSTB (R2)+ BGT 25$ BR 35$ BADCM1: BR BADCOM 30$: TSTB (R2)+ BGT 30$ 35$: BMI 20$ CCLENT: BITB #CCLON,@#CLIFLG-$RMON .CLIFLG == .-2 .IF NE U$CL BEQ 36$ .IFF BEQ BADCOM .ENDC MOVB #CCLRUN,@#CLITYP-$RMON .CLITYP == .-2 ADDR KMCBUF,R5 MOV (PC)+,(R5)+ .ASCII \:Y\ TSTB (R5)+ MOV #KMCBFLN,R1 .IF NE BF .LOCK .ENDC CALLR RUN .IF NE U$CL 36$: MOV #<3*400+CHOVLY>,R0 EMT 374 MOV R5,R2 ADDR RUN2,SP OVLINK UCL .ENDC AMBCOM: KMEROR 40$: BITB #100,@R2 BNE AMBCOM ASL R0 ADDR COMDST-2,R2 ADD R0,R2 MOV @R2,R3 ADD PC,R3 CMDBAS = . .IF NE BF .LOCK .ENDC CMP #ENDRES-.,@R2 BGT 45$ MOV R5,R1 CALL OVREAD 45$: CLR SAVSWT CALL @R3 CTRLC1: BR CTRLC2 CHMTCH: MOVB @R2,-(SP) BIC #^C<77>,@SP MOVB @R5,-(SP) CMPB #'a,@SP BHI 50$ CMPB #'z,@SP BLO 50$ BICB #40,@SP 50$: BIC #^C<77>,@SP CMP (SP)+,(SP)+ RETURN .DSABL LSB .SBTTL READ OVERLAY, LINK TO OVERLAY .ENABL LSB OVREAD: CLR -(SP) MOVB (R2)+,@SP MOVB (R2)+,R0 ADDR OVLIOB,R5 ADDR OVLY,R3 CMPB R0,@R5 BEQ 1$ MOV R0,-(SP) CLR (R5)+ MOV R3,@R5 MOV #-1,(PC)+ IFBN: .WORD -1 ADD @(PC)+,R0 .$MONB:: .WORD $MONBL-$RMON SUB #KMONSZ,R0 .IF EQ MMG$T CALL @.$SYS .IFF CALL RWSYS .ENDC BCS 2$ MOV (SP)+,-(R5) 1$: MOV R1,R5 ASL @SP ADD (SP)+,R3 RETURN 2$: CLR -(R5) CLR R4 KMEROR ,RES,UNCON$ .DSABL LSB BADCOM: KMEROR OVLINK: MOV R5,R1 CALL OVREAD MOV (SP)+,R2 CALLR @R3 ERROVR: MOV @(SP)+,R5 OVLINK ERRCOD RTERR1: MOV (PC)+,R4 RTERR2: CLR R4 MOV @(SP)+,R5 OVLINK RTERR RTERR3: MOV @(SP)+,R5 OVLINK BRTERR RTERR4: MOV @(SP)+,R5 OVLINK RADERR COPYFN: MOV R0,-(SP) ADDR INPFN+0,R3 MOV (R0)+,(R3)+ MOV (R0)+,(R3)+ MOV (R0)+,(R3)+ MOV (R0)+,(R3)+ MOV (SP)+,R0 RETURN .IF NE BF .IF NE ERL$G ERLCHK: .IF NE SYT$K CMP I.LNAM(R4),#"ER BNE 1$ CMP I.LNAM+2(R4),#"RL BNE 1$ CMP I.LNAM+4(R4),#"OG .IFF CMP I.NAME+2(R4),#<^RERR> BNE 1$ CMP I.NAME+4(R4),#<^RLOG> .ENDC 1$: RETURN .ENDC .ENDC .IF NE SYT$K .SBTTL RAD50 TO ASCII CONVERSION ROUTINE .WORD 0,1,50 DIVTAB: .WORD 50*50 R50ASC: MOV R4,-(SP) MOV R3,-(SP) 1$: ADDR DIVTAB,R3 2$: MOV #-1,R4 CMP #174777,R0 BLO 5$ 3$: INC R4 SUB @R3,R0 BCC 3$ ADD @R3,R0 TST R4 BEQ 6$ CMP #33,R4 BLO 7$ BEQ 8$ 5$: ADD #40,R4 6$: ADD #16,R4 7$: ADD #11,R4 8$: ADD #11,R4 MOVB R4,(R1)+ TST -(R3) BNE 2$ MOV (SP)+,R3 MOV (SP)+,R4 RETURN .ENDC MSGKM: BISB #,@#USERRB MSGKM1: .RCTRLO .PRINT .IF EQ CONT$N BITB #,@#USERRB BEQ 3$ .IFF BITB #,@#USERRB BNE 3$ .ENDC BIS #,@.STATWD .IF NE CONT$N TST CTNUFG BEQ 3$ CLR CTNUFG ADDR KMHLT,R0 .PRINT 2$: .IF NE BF MOV @#SYSPTR,R4 ADD #TTOBUF+2-$RMON,R4 TSTB @R4 .IFF TST @..TTOB .ENDC BNE 2$ HALT .ENDC 3$: .EXIT .IF NE CONT$N KMHLT: .ASCIZ "?KMON-U-Fatal halt" .EVEN .ENDC KCRLF: MOV PC,R0 MOV R0,R0 .PRINT RETURN LBDCOM: BR BADCOM .SBTTL RUN RUN: CLR RFLG CALL GETCOD RUN2: CLR R2 OVLINK STRE NOTFND: KMRTMG ,,PFILE .SBTTL R (RUN FROM SY:) .ENABL LSB R: MOV #<^RSY >,R3 CALL FILE CMP #<^RSY >,@R3 BNE LBDCOM INC R5 1$: CALL ALPHNT BCS 1$ TSTB @R5 BNE LBDCOM CALL COPYFN .LOOKUP CHOVLY BCS NOTFND CLR @#USERTOP MOV SP,(PC)+ RFLG: .WORD 0 CALL CCBB0 CLR RFLG 2$: MOV (R2)+,(R3)+ DEC R1 BNE 2$ MOV SB17-(R3),R1 INC R1 MOV @#USERPC,R2 MOV #<1000>,-(SP) MOV R1,-(SP) MOV R0,-(SP) OVLINK RUNCHK BEGIN: .IF NE MMG$T CLR SCCATB-$RMON(R5);Make sure there is no old value in SCCA table BIT #VIRT$,@#JSW BEQ 7$ MOV R5,R0 ADD #BGWPTR-$RMON,R0 MOV (R0)+,R4 MOV (R4)+,-(SP) MOV R0,(R4)+ MOV #V.MAX/64.,(R0)+ MOV @.$USRLC,@R0 SUB #V.MAX,@R0 BIC #77,@R0 ROL @R0 ROL @R0 ROLB @R0 SWAB (R0)+ MOV #400,@R0 CLR (R4)+ MOV @#USERTOP,@R4 MOV (R4)+,R0 ADD #77+2,R0 BIC #77,R0 ROL R0 ROL R0 ROLB R0 SWAB R0 MOV R0,(R4)+ CLR (R4)+ MOVB #200,(R4)+ CLRB @R4 5$: INCB @R4 SUB #200,R0 BGT 5$ SWAB R0 CLRB R0 ADD #77406,R0 INC R4 MOV R0,(R4)+ MOV (SP)+,R0 6$: DEC R0 BEQ 7$ CLR W.BSIZ(R4) ADD #W.BLGH,R4 BR 6$ 7$: CALL $VRAW .ENDC MOV @#USERTOP,R4 TST @#USERSP BNE 8$ MOV #1000,@#USERSP 8$: MOV @..SYSL,R0 BIT #USR$,CONFIG-$RMON(R5) BEQ 9$ MOV @.$USRLC,R0 9$: .IF NE MMG$T SUB VBIAS,R0 .ENDC CMP R0,R4 BLOS OVERC .SETTOP R4 .IF NE CONT$N CLR CTNUFG .ENDC SUB R3,R4 BCS 10$ ADD #KMBLK+4-$RMON,R5 ROR R4 INC R4 MOV R4,-(R5) MOV R1,R0 .IF EQ MMG$T MOV R3,-(R5) MOV R5,R1 ADD #SPTR-KMBLK,R1 MOV R1,SP CALLR RDOVLY-KMBLK(R5) 10$: CALLR ENTRPG-$RMON(R5) .IFF ADD VBIAS,R3 11$: MOV R3,-(R5) .ASTX 10$: MOV #-1,R0 .ASTX .ENDC OVERC: CLR @#USERTOP KMEROR .DSABL LSB .SBTTL GET (also used by RUN) .IF NE GET$$ GET: .ENDC GETCOD: TST GETCNT BNE 1$ CALL CLRCCB BIC #RSTRT$,@#JSW INC GETCNT 1$: MOV @#JSW,-(SP) CALL GETHAN BIS (SP)+,@#JSW SUB R0,@SP MOV R3,-(SP) OVLINK GET1 .SBTTL SAVE (PART 1) .IF NE SAVE$$ SAVE: .IF NE MMG$T BIT #VIRT$,@#JSW BEQ 1$ CALLR BADCOM 1$: .ENDC CALL GETHAN SUB R0,@SP MOV R3,-(SP) OVLINK SAV1 .ENDC .IF NE FRUN$$!SRUN$$ FSGHAR: CALL GETHAR SUB R0,@SP MOV R3,-(SP) OVLINK FSR2 .ENDC .IF NE U$CL UCLROT: CALL GETHAR SUB R0,@SP MOV (SP)+,R5 SUB R0,(SP) SUB R0,R3 MOV R3,-(SP) BIS #,@#JSW OVLINK GETUCL .ENDC ENDRES = . .SBTTL SYSK, CLRCCB, CLRLOW .ENABL LSB SYSK: CLR @.BLKEY MOV @(PC)+,-(SP) .$SWPB:: .WORD $SWPBL-$RMON ADD @SP,R0 ADD #SWAPSZ,@SP MOV 2(R5),-(SP) BPL 1$ NEG @SP 1$: SWAB @SP ADD R0,@SP CMP (SP)+,(SP)+ BHI OVERC .IF EQ MMG$T CALL @.$SYS .IFF CALL RWSYS .ENDC BCC 4$ TST 2(R5) BPL SYRDER SYWTER: KMEROR ,,UNCON$ SYRDER: KMEROR ,,UNCON$ CLRLOW: MOV #PARMS,R1 2$: CLRB (R1)+ CMP R1,#USERRB BLO 2$ CLRCCB: MOV #CCB-$RMON,R1 .CCB == .-2 MOV #10,-(SP) 3$: CLR (R1)+ DEC @SP BNE 3$ MOV (SP)+,@#USERTOP 4$: RETURN .DSABL LSB .SBTTL FILE .ENABL LSB FILE: .IF NE SYT$K CALL 5$ MOV R0,-(SP) MOV R1,-(SP) BIT #CHAIN$,@#JSW BEQ 1$ MOV @.$IMPUR,R0 ADD #I.NAME,R0 1$: MOV R0,R1 ADD #I.LNAM-I.NAME,R1 MOV R2,R0 CALL R50ASC MOV 4(R3),R0 CALL R50ASC CMPB -(R1),#SPACE BNE 3$ 2$: CLRB @R1 CMPB -(R1),#SPACE BEQ 2$ 3$: MOV (SP)+,R1 MOV (SP)+,R0 4$: RETURN 5$: .ENDC JSR R1,6$ .RAD50 "SAV" 6$: MOV #<3*400+CHOVLY>,R0 EMT 374 MOV R3,DEV1 MOV #500,R0 BIT @#JSW,#CHAIN$ BNE 8$ .IF NE BF MOV @.$IMPUR,R2 ADD #I.NAME,R2 .IFF ADDR BLOCK,R2 .ENDC CALL GETFD 8$: MOV (SP)+,R1 MOV R0,R3 TST @R3 BEQ NOFILE MOV 2(R3),R2 BNE RTS7A NOFILE: KMEROR IFILE: JSR R1,6$ ..ATFX == . .RAD50 "COM" .IF NE BF RFILE: JSR R1,6$ ..FRUX == . .RAD50 "REL" .ENDC .IF NE SYT$K SFILE: JSR R1,6$ ..SRUX == . .RAD50 "REL" .ENDC .DSABL LSB .SBTTL CCBB0 .ENABL LSB CCBB0: MOV SYSIOB,R5 CLR R0 CLR @.BLKEY .READW CHOVLY,R5,#400 BCC 1$ FIPERR: KMRTMG ,,PFILE 1$: .IF NE MMG$T MOV 66(R5),(PC)+ $VLY: .WORD 0 BEQ 2$ MOV 64(R5),$VLY 2$: MOV @#SYSPTR,R3 ADD #BGVHI-$RMON,R3 CLR @R3 CMP #<^RVIR>,@R5 BNE 3$ MOV 2(R5),@R3 .IFF CMP #<^RVIR>,@R5 BEQ NEEDXM .IFTF 3$: MOV #JSW,R0 MOV @R0,-(SP) BIC #^C,@SP .IFT BIT #VIRT$,JSW(R5) BNE 12$ CLR R2 .ENDC MOV #LOWMAP-$RMON,R3 .LOWMAP == .-2 CLR R1 4$: MOVB (R3)+,@SP SEC ROLB @SP 5$: BCS 6$ MOV @R5,@R1 6$: CMP (R5)+,(R1)+ ASLB @SP BNE 5$ CMP #V.MAX,R1 BNE 4$ 1110$: TST @SP BNE 17$ TST RFLG BNE 7$ 17$: BIT @R0,#CHAIN$ BEQ 9$ 7$: BIC #CHAIN$,@R0 .IF EQ MMG$T 8$: MOV (R5)+,(R1)+ TSTB R1 BNE 8$ .IFF MOV #<1000-V.MAX>/2,R3 8$: MOV (R5)+,(R1)+ SOB R3,8$ .ENDC 9$: BIS (SP)+,(R0)+ TST (R0)+ SUB R1,R5 .IF NE MMG$T ADD R2,R5 MOV R2,(PC)+ VBIAS: .WORD 0 .ENDC ADD R0,R5 CMP @R5,@R0 BLOS 10$ MOV @R5,@R0 10$: ADD #400-USERTOP,R5 ADDR BLOCK+16.,R2 MOV #8.*400+8.,R1 11$: MOV -(R5),-(R2) DECB R1 BNE 11$ MOV .CCB,R3 SWAB R1 RTS7A: RETURN .IF EQ MMG$T NEEDXM: KMRTMG ,,PFILE .IFF 12$: MOV R5,R3 MOV #PARMS,R1 ADD R1,R3 13$: MOV (R3)+,(R1)+ CMP R1,#52 BLO 13$ MOV #V.MAX,R2 MOV #1000,R1 1138$: MOV -(R1),V.MAX(R1) CMP R1,R2 BHI 1138$ MOV #V.MAX/2,R3 1999$: MOV (R5)+,(R1)+ SOB R3,1999$ BR 1110$ .ENDC .DSABL LSB .IF NE MMG$T .SBTTL /V CREATE REGION AND WINDOW ROUTINE .ENABL LSB $VRAW:: MOV R5,-(SP) MOV R4,-(SP) MOV R3,-(SP) MOV R1,-(SP) MOV R2,-(SP) MOV $VLY,R4 BEQ 8$ SUB #V$END,R4 CLRB R4 SWAB R4 ROR R4 MOV R4,-(SP) ADDR SYSIOB,R5 MOV @R5,R5 1$: .READW CHOVLY,R5,#1000,R4 BCS 10$ MOV $VLY,R4 SUB #V$END,R4 BIC #177000,R4 ADD R5,R4 2$: ADD #2000,R5 ADD #,R4 TST 2(R4) BEQ 7$ ADDR BLOCK,R2 .CRRG R2,R4 BCS 9$ MOV -(R4),R1 MOV -(R4),R4 MOV @SP,R2 SWAB R2 ASL R2 SUB R2,R4 SUB R2,R1 ADD #W.NOFF,R1 ADDR SYSIOB,R2 ADD @R2,R1 ADD @R2,R4 MOV @#SYSPTR,R2 MOV BKGND+I.RGN+R.BLGH-$RMON(R2),-(SP) MOV 2(SP),R2 CMP R1,R5 BHI 6$ 3$: ADD @R1,@SP SPL 7 MOV @SP,@#UISAR0+<6*2> CLR @#140000 MOV #1400,@#UISAR0+<6*2> SPL 0 4$: SUB @R1,@SP ADD #W.NLGH,R1 CMP R1,R4 BHIS 7$ 5$: CMP R1,R5 BLO 3$ 6$: SUB R5,R1 ADDR SYSIOB,R3 CMPB (R2)+,(R2)+ .READW CHOVLY,@R3,#1000,R2 BCS 10$ SUB #2000,R4 ADD @R3,R1 BR 5$ 7$: CMP (SP)+,(SP)+ 8$: MOV (SP)+,R2 MOV (SP)+,R1 MOV (SP)+,R3 MOV (SP)+,R4 MOV (SP)+,R5 RETURN 9$: KMEROR ,,UNCON$ 10$: CALLR FIPERR .DSABL LSB .ENDC .SBTTL GETHAN .ENABL LSB ..DDEV == .+2 GETHAN: MOV #<^RDK >,R3 CALL FILE GETHAR: MOV @R0,INPFN ADDR DEVSTS,SP EMT 342 BCS BADHAN TST (R0)+ BPL BADHAN CLR -(SP) TST 2(R0) BNE HANIN MOV ACCUM,@SP ADDR DEVSTS,R2 MOV @R3,@R2 MOV R3,-(SP) JSR R5,1$ .WORD 0 1$: CALL 2$ MOV (SP)+,R5 MOV (SP)+,R3 SUB ACCUM,@SP .IF EQ BF CMP R3,#500 BEQ 3$ SUB @SP,R3 3$: .ENDC SUB @SP,R5 HANIN: MOV (SP)+,R0 SUB R0,@SP RTS7: RETURN 2$: OVLINK OL1 BADHAN: KMRTMG BADFET: KMRTMG .DSABL LSB .SBTTL SETBIT SETBIT: MOV R2,R4 SETBTS: CMP @#USERTOP,R4 BHI NOTHIR MOV R4,@#USERTOP NOTHIR: BIS #777,R4 DEC R4 SUB R2,R4 CLRB R4 SWAB R4 ASR R4 SWAB R2 SETBT2: ASR R2 MOV R2,R1 BIC #177407,R2 BIC #177770,R1 ASR R2 ASR R2 ASR R2 ADD R0,R2 ONEBIT: CLR R0 SEC SETMSK: RORB R0 DEC R1 BPL SETMSK SETCCB: BISB R0,@R2 DEC R4 BMI RTS7 RORB R0 BCC SETCCB INC R2 BR ONEBIT .SBTTL PUTBAK - RETURN DCL/@FILE BUFFER TO MONITOR AND SLIDE KMON/USR BACK UP PUTBAK: MOV SP,@(PC)+ .EXTFL:: .WORD EXTFLG-$RMON ADDR KMON+KMSIZE+USRSIZ+2,R4 CALL PUTBLK ADD R0,@SP CLR @.INBFPT RETURN .SBTTL CNTCK - CHECK FOR LINE CONTINUATION (LINE ENDS WITH "-") AND ELIMINATE CNTCK: TST DATAFG BNE 2$ CMP R5,R3 BEQ 2$ 1$: INC R1 CMPB (R3)+,#SPACE BEQ 1$ CMPB -(R3),#MINUS BEQ 3$ DEC R1 2$: DEC R3 TST (R2)+ 3$: CLRB (R3)+ CLRB -2(R3) RTS R2 .SBTTL SVST - SAVE STATUS INDIRECT FILES FOR NESTING TO START EXECUTING SVST: MOV @(PC)+,R2 .IFSVST:: .WORD IFSVST-$RMON TST (PC)+ IFOPN: .WORD 0 BEQ 1$ .SAVEST CHOVLY,R2 BCS CMDDVE CLR IFOPN 1$: RETURN CMDDVE: KMEROR .SBTTL KDOT - PRINT KMON'S PROMPTING DOT .ENABL LSB KDOT: MOV @(SP),SLHOOK TST DOTFLG BNE 4$ MOV R0,-(SP) CALL KCRLF 1$: .RCTRLO .IF NE BATC$H MOV .$ENTR,R0 MOV BA.NUM(R0),R0 BEQ 2$ TST BATSW$(R0) BNE 3$ .ENDC 2$: MOV PC,R0 CMP (PC)+,(R0)+ .ASCII <200> .PRINT SLHOOK: MOV R5,R5 3$: MOV (SP)+,R0 4$: RETURN .DSABL LSB .SBTTL GETBLK - OBTAIN A BLOCK OF MEMORY ABOVE KMON/USR .ENABL LSB GETBL1: ADD #3,R0 BIC #1,R0 CALL 4$ SUB R0,@SP BIS #IFDAT,@.STATWD RETURN GETBLK: TST (R0)+ MOV (PC)+,R4 .CORPT:: .WORD CORPTR-$RMON TST (R4)+ 1$: MOV R4,R3 MOV @R3,R4 CMP .CORPT,R4 BEQ 4$ CMP (R4)+,R0 BLO 1$ TST (R0)+ CMP -(R4),R0 BEQ 2$ TST -(R0) 2$: SUB R0,@R4 BNE 3$ MOV 2(R4),@R3 3$: ADD @R4,R4 CLC BR 6$ 4$: CMP R0,#MINMOV BHIS 5$ MOV #MINMOV,R0 5$: SUB R0,@SP NEG R0 ROR R0 CALL KUMOVE NEG R0 6$: MOV R0,(R4)+ RETURN .DSABL LSB CHANIF: MOV #CHAINA,R2 MOV @R2,R0 CLRB ATFLAG CALL DCLSP1 SUB R0,@SP CHANF1: MOV (R2)+,R0 1$: MOVB (R2)+,(R1)+ DEC R0 BNE 1$ BITB #,@.INDSTA BEQ 2$ .Assume UCFKMN EQ 200 TSTB @.CLIFLG BMI 2$ MOVB #<177>,@R1 2$: BIC #,@.STATWD RETURN .IFMXNST::.WORD IFMXNST-$RMON .IF NE BF .IF EQ MMG$T .IF NE MTT$Y .$MTPS:: .WORD $MTPS-$RMON .ENDC .ENDC .ENDC .SBTTL DCLSPC - GET SPACE FOR DCL EXPANSION OR @FILE LINE .ENABL LSB DCLSPC: INCB CMDFLG DCLSP1: MOV R4,-(SP) MOV R3,-(SP) MOV R2,-(SP) CLR R0RTN MOV SP,@.EXTFL MOV .INDSTA,R4 BITB #LN$IND,@R4 BEQ 1$ .Assume UCFKMN EQ 200 TSTB @.CLIFLG BMI 1$ INC R0 1$: BIT #IFDAT,@.STATWD BNE 3$ MOV R0,-(SP) INC R0 CALL GETBL1 MOV R0,(PC)+ R0RTN: .WORD 0 MOV -(R4),R1 ADD R4,R1 MOVB #-1,-(R1) MOV R1,(PC)+ ENBFPT: .WORD 0 MOV R1,(PC)+ OLINBF: .WORD 0 SUB (SP)+,R1 MOV R1,@.INBFPT 2$: CLR EXPSPC CLR @.EXTFL MOV R0RTN,R0 MOV (SP)+,R2 MOV (SP)+,R3 MOV (SP)+,R4 SUB R0,@SP RETURN 3$: MOV @.INBFPT,R1 ADDR KMON+KMSIZE+USRSIZ+2,R4 SUB R4,R1 SUB R0,R1 BLO 5$ MOV @.INBFPT,R4 MOV R4,R1 SUB R0,R1 MOV R1,@.INBFPT MOV ENBFPT,R2 TST (PC)+ EXPSPC: .WORD 0 BNE 4$ TSTB ATFLAG BEQ 6$ MOV OLINBF,R2 TSTB CMDFLG BNE 6$ 4$: MOV R4,OLINBF BR 2$ 5$: MOV R0,-(SP) MOV R1,R0 NEG R0 MOV -(R4),-(SP) MOV SP,(PC)+ COROVR: .WORD 0 BIC #IFDAT,@.STATWD CALL GETBL1 CLR COROVR ADD (SP)+,-(R4) MOV R0,R0RTN MOV (SP)+,R0 BR 3$ 6$: TST R2 BEQ 2$ CMPB @R4,#-1 BEQ 2$ CMPB @R4,#177 BEQ 2$ 7$: MOVB (R4)+,(R1)+ CMP R4,R2 BLO 7$ CMPB -(R4),#-1 BNE 2$ DEC R1 BR 2$ .DSABL LSB .SBTTL PUTBLK - RETURN A BLOCK OF MEMORY TO THE FREE LIST PUTBLK: TST -(R4) PUTBL1: MOV .CORPT,R1 1$: MOV R1,R0 MOV 2(R0),R1 CMP .CORPT,R1 BEQ 2$ CMP R1,R4 BLOS 1$ MOV R4,-(SP) ADD @R4,@SP CMP (SP)+,R1 BNE 2$ ADD (R1)+,@R4 MOV @R1,R1 2$: MOV R1,2(R4) 3$: MOV R0,-(SP) ADD @R0,@SP CMP (SP)+,R4 BNE 4$ ADD (R4)+,@R0 MOV @R4,R4 4$: MOV R4,2(R0) MOV .CORPT,R0 TST (R0)+ MOV @R0,R1 CMP @R1,#MINMOV BLO 5$ ADDR KMON+KMSIZE+USRSIZ,R4 CMP R4,R1 BEQ 6$ BIT #IFDAT,@.STATWD BEQ 5$ ADD @R4,R4 CMP R4,R1 BEQ 7$ 5$: CLR R0 RETURN 6$: BIC #IFDAT,@.STATWD 7$: MOV 2(R1),@R0 MOV @R1,R0 ROR R0 CALL KUMOVE ADD R0,@SP SEC RETURN .IIF EQ LNK$IF, .NLIST .IF NE LNK$IF .SBTTL LINK OVERLAY INDIRECT FILE SUPPORT LINKAT: MOV R0,-(SP) OVLINK LAT1 LNKAT1: CALL ATSCAN MOV R0,-(SP) OVLINK LAT2 .ENDC .IIF EQ LNK$IF, .LIST .IF EQ BF .ENABL LSB .SBTTL RSTSRH - HARD RESET FOR SJ KMON RSTSRH: .IF EQ MTT$Y TST @(PC)+ ..TTOB:: .WORD TTOBUF+2-$RMON BNE RSTSRH CALL @(PC)+ ..ZAP:: .WORD ZAP-$RMON .IFF CALL @(PC)+ ..MTRE:: .WORD MTREST-$RMON BR 1$ .ENDC .SBTTL RSTSRS - SOFT RESET FOR SJ KMON RSTSRS: .IF NE MTT$Y CALL @(PC)+ ..MTR1:: .WORD MTRES1-$RMON 1$: .ENDC MOV #*CHNWDS,R1 BIT #OVLY$,@#JSW BNE 2$ ADD #CHNWDS,R1 2$: MOV (PC)+,R2 ..$CSW:: .WORD $CSW-$RMON MOV R2,@.I.CSW MOV #CHNUM,@.I.CNU 3$: CLR (R2)+ DEC R1 BNE 3$ CLRHD1: MOV .$ENTR,R2 MOV #$SLOT,R1 4$: CMP @R2,@.SYSLO BLO 5$ CLR @(R2)+ BR 6$ 5$: CLR (R2)+ 6$: DEC R1 BNE 4$ QREST1: MOV (PC)+,R1 ..QSIZ:: .WORD QSIZE-$RMON CMP (R1)+,@R1 BLO QREST1 MOV #1,-(R1) MOV (R1)+,(R1)+ MOV R1,@R1 ADD #2,@R1 .IF EQ MTT$Y MOV @(PC)+,-(SP) ..TTKS:: .WORD TTKS-$RMON BIS #IENABL,@(SP)+ .ENDC RETURN .DSABL LSB .ENDC .IF NE MMG$T RWSYS: JSR R0,@PC ADD #XREAD-.,R0 MOV #10*400+20,(R0)+ MOV (SP)+,(R0)+ MOV (R5)+,(R0)+ MOV @R5,@R0 BPL 1$ INCB -5(R0) NEG @R0 1$: CMP -(R5),-(R0) CMP -(R0),-(R0) MOV #BKGND+I.CNUM-$RMON,-(SP) ..I.CNUM== .-2 MOV #21,@(SP) EMT 375 MOV #20,@(SP)+ RETURN XREAD: .BLKW 4 .WORD 0 .ENDC .SBTTL CHARCK, CHARC1 - ADD CHARACTERS TO KMON LINE BUFFER, CHECKING THEM .ENABL LSB CHARC1: BIC #<200>,R0 CMPB R0,# BEQ 10$ MOVB @R3,-(SP) MOVB R0,1(SP) CMPB #<'C+40>,R0 BNE 5$ BIC #<40*400>,@SP 5$: CMP #<"^C>,(SP)+ BNE CHARCK 10$: MOV R5,R3 MOV #,-(R3) MOV #<'C*400+XPOINT>,-(R3) RTS R2 CHARCK: MOVB @R3,(PC)+ CMNTF: .WORD 0 CMPB @R3,#XPOINT BEQ 30$ TST DATAFG BNE 25$ CMP R5,R3 BNE 15$ CMPB #DOLLAR,R0 BNE 15$ BIS #,@.STATWD RTS R2 15$: CMPB #TAB,R0 BNE 20$ MOVB @R5,R0 20$: CMPB @R5,R0 BNE 25$ CMPB @R3,R0 BEQ 40$ 25$: CMPB #CR,R0 BEQ 40$ CMPB #FF,R0 BEQ 40$ DEC R1 BMI 30$ MOVB R0,-(R3) 30$: CMPB #LF,R0 BNE 40$ 35$: CLRB (R3)+ TST R1 BMI LTL TST (R2)+ 40$: RTS R2 .DSABL LSB .SBTTL DCL command and option macros $QUAL=0 $OPTX=0 .MACRO DISPAT ROUTINE .WORD ROUTINE-. $'ROUTINE=.-1$/2 .ENDM .MACRO SYNTAX CMD .DSABL CRF $CONDS=1 $QUAL=$QUAL+1 $SYN=. .ENDM .MACRO FLDBEG DST .BYTE $FLDBEG $FLDFLG=0 .IF B DST $FLDFLG=1 $FLDEND=. .BYTE .IFF .BYTE DST-. .ENDC .ENDM .MACRO SCALL SUBR,PTRLIST .BYTE $SCALL .ENABL CRF $TEMP= SUBR-SUBREL .DSABL CRF $TEMP1=$TEMP/256. .BYTE $TEMP1 .BYTE $TEMP&377 $TEMP2=. .BYTE .IRP Q,<\$QUAL> .IRP X, .BYTE $'X'$'Q-.-1 .ENDR .ENDR $TEMP1=. .=$TEMP2 .BYTE $TEMP1-$TEMP2-1 .=$TEMP1 .ENDM .MACRO GOTO DST .BYTE $GOTO .BYTE DST-.-1 .ENDM .MACRO EOLGOT DST .BYTE $EOLGOT .BYTE DST-.-1 .ENDM .MACRO ITEREND .BYTE $ITEREND .IF NE $FLDFLG $TEMP1=. .=$FLDEND .BYTE $TEMP1-$FLDEND .=$TEMP1 .ENDC .ENDM .MACRO OPTEND .BYTE $OPTEND .IF NE $FLDFLG $TEMP1=. .=$FLDEND .BYTE $TEMP1-$FLDEND .=$TEMP1 .ENDC .ENDM .MACRO EOLSEQ DEFPRG,FLAG .BYTE $EOLSEQ .IF NB FLAG .BYTE $$$'FLAG .IFF .BYTE 200!$$'DEFPRG .ENDC .ENDM .MACRO APLYDEF PROG,COND,SWIT .BYTE $APLYDEF .BYTE $$'PROG .IF B COND .BYTE 0 .IFF .IRP N,<\$QUAL> .BYTE $'COND''N .ENDR .ENDC .BYTE ''SWIT .ENDM .MACRO WILDEF PROG,SWIT,CND1,CND2,CND3,CND4,FLAG .BYTE $APLYDEF .BYTE $$'PROG .IRP N,<\$QUAL> .BYTE $'CND1''N!$'CND2''N!$'CND3''N!$'CND4''N!FLAG .ENDR .BYTE ''SWIT .ENDM .MACRO SETDEF COND .BYTE $SETDEF .IRP N,<\$QUAL> .BYTE $'COND''N .ENDR .ENDM .MACRO CNDROUT ROUT,COND .BYTE $CNDROUT .IRP N,<\$QUAL> .BYTE $'COND''N .ENDR ROUTAC ROUT .ENDM .MACRO ROUTINE ROUT .BYTE $ROUTINE ROUTAC ROUT .ENDM .MACRO ROUTAC TRANS .IIF GT N-3,.ERROR .ENABL CRF .IF DF ACT'TRANS $TEMP= ACT'TRANS - RACREL .IFF $TEMP = OVA'TRANS - OVLYST + OVLY - RACREL .ENDC .DSABL CRF $TEMP1 = $TEMP/256. .BYTE $TEMP1 .BYTE $TEMP&377 .ENDM .MACRO PROMPT TEXT .BYTE $PROMPT .ENABL CRF $TEMP= TEXT-TXTREL .DSABL CRF $TEMP1=$TEMP/256. .BYTE $TEMP1 .BYTE $TEMP&377 .ENDM .MACRO DEFILE FLAG .BYTE $DEFILE .ENABL CRF .BYTE FLAG .DSABL CRF .ENDM .MACRO SETSWIT SWIT .BYTE $SETSWIT .BYTE ''SWIT .ENDM .MACRO DEFDV STR .BYTE $DEFDV .ENABL CRF $TEMP= STR-EXTREL .DSABL CRF $TEMP1=$TEMP/256. .BYTE $TEMP1 .BYTE $TEMP&377 .ENDM .MACRO DEFINX STR .BYTE $DEFINX .ENABL CRF $TEMP= STR-EXTREL .DSABL CRF $TEMP1=$TEMP/256. .BYTE $TEMP1 .BYTE $TEMP&377 .ENDM .MACRO SETISPC STR .BYTE $SETISPC .ENABL CRF $TEMP= STR-DOUSTR .DSABL CRF $TEMP1=$TEMP/256. .BYTE $TEMP1 .BYTE $TEMP&377 .ENDM .MACRO DEFOSPC STR .BYTE $DEFOSPC .ENABL CRF $TEMP= STR-DOUSTR .DSABL CRF $TEMP1=$TEMP/256. .BYTE $TEMP1 .BYTE $TEMP&377 .ENDM .MACRO CEOLSEQ DEFPRG,FLAG .BYTE $CEOLSEQ .IF NB FLAG .BYTE $$$'FLAG .IFF .BYTE 200!$$'DEFPRG .ENDC .ENDM .MACRO FILTYPR LIST .BYTE $FILTYPR .ENABL CRF $TEMP= LIST-2-LSTREL .DSABL CRF $TEMP1=$TEMP/256. .BYTE $TEMP1 .BYTE $TEMP&377 .ENDM .MACRO MAKOFL TYPE .BYTE $MAKOFL .BYTE <-2-TYPE>*OFBSIZ .ENDM .MACRO DEFINE SIMPLE .MACRO SIMPLE .BYTE $'SIMPLE .ENDM .ENDM DEFINE OPTBLNK DEFINE SWITLST DEFINE REQBLNK DEFINE REQPLUS DEFINE REQCOMMA DEFINE SRET DEFINE INSPEC DEFINE OUTSPEC DEFINE SPISPEC DEFINE SPOSPEC DEFINE END DEFINE TSTCFLG DEFINE COMPDEF DEFINE FILQUAL DEFINE SAVNAM DEFINE CMDQUAL .MACRO SWITS DUMMY $TEMP=0 $SWTAD=. $NONO=0 $$$1=0 $$$2=0 $$$3=0 $$$4=0 .ENDM .MACRO ENDNO $NONUM=$TEMP .ENDM .MACRO NOS $NOFFST=$TEMP*3 $NONO=1 .ENDM .MACRO ENDS .IRP Q,<\$QUAL> .IRPC N,<1234> .IIF EQ $$$'N, .MEXIT $'N'$'Q: .BLKB $$$'N .BYTE 0 .ENDR .ENDR .EVEN .ENABL CRF .ENDM .MACRO SWIT SWITCH,LNUM,IMPLY,FORCE,TRANS,DEFLT,QVAL,X $TEMP=$TEMP+1 $TEMP1=0 .IF DIF IMPLY,- $TEMP1=$TEMP1!$$'IMPLY .ENDC .IF DIF FORCE,- $TEMP1=$TEMP1!200!$$'FORCE .ENDC .IF NB QVAL $TEMP1=$TEMP1+SVALU .IF IDN QVAL,DVAL $TEMP1=$TEMP1+DECVAL .ENDC .ENDC .BYTE $TEMP1 .IF EQ $NONO LETTR .BYTE 'OLET'$'SWITCH X'.ENDM .IFF .BYTE 0 .ENDC .IF EQ $NONO $TEMP1=. .IRP Q,<\$QUAL> .=$'LNUM'$'Q+$$$'LNUM .ENDR .BYTE $TEMP $$$'LNUM=$$$'LNUM+1 .=$TEMP1 .ENDC .IF DIF TRANS,- .NCHR N, .IF EQ N-1 .BYTE ''TRANS .IFF ACTION TRANS .ENDC .IFF .NCHR $TEMP1, .IF NE $TEMP1 .IIF GT $TEMP1-3,.ERROR .IRP N,<\$QUAL> .IF NDF $'DEFLT''N $'DEFLT''N=$CONDS .IIF EQ 100-$CONDS,.ERROR $CONDS=$CONDS+$CONDS .ENDC .BYTE 200+$'DEFLT''N .ENDR .IFF .BYTE 0 .ENDC .ENDC .ENDM .MACRO ACTION TRANS .IIF GT N-3,.ERROR .IF NDF $A$'TRANS .IIF NDF $A$, $A$=0 $A$=$A$+1 .IIF LT ACTCNT-$A$,.ERROR $A$'TRANS=$A$ .ENDC $TEMP1=. .PSECT RT11 .=ACTONS+<2*<$A$'TRANS-1>> .ENABL CRF .IF DF ACT'TRANS .WORD ACT'TRANS-ACTREL .IFF .WORD OVA'TRANS-OVLYST+OVLY-ACTREL .ENDC .DSABL CRF .IF GE OVLYN .IRP N,<\OVLYN> .CSECT OVLY'N .ENDR .ENDC .=$TEMP1 .IIF LT 37-$A$'TRANS,.ERROR .BYTE $A$'TRANS .ENDM .MACRO SWTDEF OPTION,DARG $SCNT = $SCNT + 1 LETTR .IF DF 'OLET'$'OPTION .IIF NE 'OLET'$'OPTION - $SCNT, .ERROR .ENDC 'OLET'$'OPTION = $SCNT DARG'.ENDM .ENDM SWTDEF .MACRO NEXTL $OPTX = $OPTX + 1 TEMP = 0 .IRPC L, TEMP = TEMP + 1 .IF EQ TEMP - $OPTX .MACRO LETTR Z Z'.IRPC OLET, .ENDM LETTR .MEXIT .ENDC .ENDR .ENDM NEXTL NEXTL .MACRO PTXT TEXT .ASCII \TEXT\ \? \ <200> .ENDM .MACRO ITBLE NUM,?LAB JSR R1,LAB .WORD $NOFFS .WORD $SWTAD-SWTBAS .WORD $SYN-STRBAS .IF EQ $$$1 .WORD 0 .IFF .IRP N,<\$OPTX> .WORD OPTX'N-OPTBAS .ENDR .ENDC .BYTE $NONUM .BYTE NUM LAB: .ENDM .MACRO BACKWT NAME,TEXT .BYTE 0 .NCHR N, .=.+N NAME: .IRPC N, .=.-1 .BYTE ''N .=.-1 .ENDR .=NAME .ENDM .MACRO TYPDEF A,BB,C,D,E,F,G,H,I,J,K,L .IF B A .WORD 0 .MEXIT .ENDC .RAD50 \A\ .BYTE $$'BB!200 .BYTE 0 TYPDEF C,D,E,F,G,H,I,J,K,L .ENDM .SBTTL DCL INTERPRETER INITIT: MOV (SP)+,@SP MOV (R1)+,(PC)+ NOFFST: .WORD 0 MOV (R1)+,R0 ADD PC,R0 SWTBAS = . MOV R0,(PC)+ ADSWTB: .WORD 0 MOV (R1)+,R4 ADD PC,R4 STRBAS = . MOV (R1)+,(PC)+ OPTPTR: .WORD 0 MOVB (R1)+,NONUMS MOVB (R1)+,NOSPEC ADDR ISTACK,R1 MOV R1,STKPTR ADD #INTCLR-ISTACK,R1 MOV #ENDCLR-INTCLR,R2 1$: CLRB (R1)+ DEC R2 BNE 1$ ADD #OTBLK-ENDCLR,R1 MOV #3,R2 2$: CLR (R1)+ CLR (R1)+ MOVB #-1,@R1 CMP (R1)+,(R1)+ DEC R2 BNE 2$ CLRB FOTFLG MOVB #$WILD0,DEFMSK INTERP: MOVB (R4)+,R1 DEC R1 ASL R1 JSR R1,2$ 1$: DISPAT OPTBLNK DISPAT SWITLST DISPAT REQBLNK DISPAT REQPLUS DISPAT REQCOMMA DISPAT EOLSEQ DISPAT FLDBEG DISPAT ITEREND DISPAT OPTEND DISPAT SCALL DISPAT SRET DISPAT INSPEC DISPAT OUTSPEC DISPAT SPISPEC DISPAT SPOSPEC DISPAT GOTO DISPAT PROMPT DISPAT APLYDEF DISPAT SETDEF DISPAT END DISPAT DEFILE DISPAT SETSWIT DISPAT DEFINX DISPAT DEFOSPC DISPAT TSTCFLG DISPAT CEOLSEQ DISPAT MAKOFL DISPAT COMPDEF DISPAT FILQUAL DISPAT SAVNAM DISPAT CMDQUAL DISPAT FILTYPR DISPAT CNDROUT DISPAT ROUTINE DISPAT DEFDV DISPAT SETISPC DISPAT EOLGOT 2$: ADD (SP)+,R1 ADD @R1,R1 3$: MOV R5,TXTPTR CALL @R1 BR INTERP LTL: KMEROR .SBTTL DCL STACKING ROUTINES SCALL: MOV STKPTR,R2 CLR (R2)+ CLR (R2)+ MOVB (R4)+,R1 SWAB R1 BISB (R4)+,R1 MOV R4,(R2)+ MOV R1,R4 ADD PC,R4 SUBREL = . BR SAVSTK SRET: MOV STKPTR,R2 MOV -(R2),R4 CMP -(R2),-(R2) MOV R2,STKPTR GOTO: MOVB (R4)+,R1 ADD R1,R4 RETURN FLDBEG: MOV STKPTR,R2 MOV #1,(R2)+ INC R4 MOV R4,(R2)+ MOV R5,(R2)+ SAVSTK: MOV R2,STKPTR RETURN ITEREND:MOV STKPTR,R2 MOV R5,-(R2) MOV -(R2),R4 RETURN OPTEND: SUB #6,STKPTR RETURN .ENABL LSB EOLGOT: TSTB @R5 BEQ GOTO TSTB (R4)+ RETURN CEOLSEQ:CMPB #',,@R5 BEQ 1$ EOLSEQ: TSTB @R5 BNE SCFAIL 1$: MOVB (R4)+,R0 BMI 2$ ADD @#SYSPTR,R0 MOVB PROGDF-$RMON(R0),R0 2$: BIC #340,R0 TST FORCEP BMI 4$ BEQ 3$ CMPB R0,FORCEP BNE ILLOPT 3$: MOV R0,FORCEP 4$: RETURN ILLOPT: KMEROR APLYDEF:CMPB FORCEP,(R4)+ BNE SYNPB2 BITB (R4)+,DEFMSK BNE SYNPB1 SETSWIT:MOVB (R4)+,R2 SETSW1: CLR R1 CLR R3 CALLR ESWIT BRLTL: BR LTL FILTYPR:MOVB (R4)+,R3 SWAB R3 BISB (R4)+,R3 ADD PC,R3 LSTREL = . TST FORCEP BMI 4$ ADDR TMPAREA,R5,PUSH MOV R5,R0 ADDR SAVNM,R1 MOV #SAVNEN-SAVNM,R2 5$: MOVB (R1)+,-(R0) BNE 6$ INC R0 6$: DEC R2 BNE 5$ CLRB -(R0) ADDR BLOCK,R2 CALL GETFD MOV (SP)+,R5 MOV -2(R2),R1 BNE 9$ MOV R0,R1 MOV R3,-(SP) CALL COPYFN MOV (SP)+,R3 .DSTATU R2,R0 BCS 4$ TST 4(R2) BNE 7$ KMRTMG ,,DEV 7$: TST (R3)+ MOV (R3)+,6(R1) BEQ 8$ MOV #<3*400+CHOVLY>,R0 EMT 374 .LOOKUP CHOVLY,R1 BCS 7$ BR 10$ 8$: CALLR NOTFND 9$: TST (R3)+ MOV (R3)+,R0 BEQ 4$ CMP R0,R1 BNE 9$ 10$: MOVB @R3,R0 BR 2$ CNDROUT:BITB (R4)+,DEFMSK BNE ROUTINE SYNPB2: TSTB (R4)+ SYNPB1: TSTB (R4)+ RETURN ROUTINE:MOVB (R4)+,R2 SWAB R2 BISB (R4)+,R2 11$: ADD R2,PC RACREL = . .DSABL LSB TSTCFLG:TSTB COMPFL BEQ SCFAIL MOV (PC)+,R5 CSTPTR: .WORD 0 RETURN SCFAIL: MOV STKPTR,R2 1$: MOV -(R2),R5 MOV -(R2),R4 TST -(R2) BEQ 1$ BMI 3$ MOV R2,STKPTR MOVB -(R4),R2 ADD R2,R4 2$: RETURN 3$: TSTB @TXTPTR BEQ 4$ CALLR BADCOM 4$: MOV (PC)+,R0 PRMPTR: .WORD 0 ADD PC,R0 TXTREL = . .BR BCPRMPT .SBTTL PROMPTING SUPPORT FOR DCL BCPRMPT:ADDR KMCBUF,R5 MOV R5,R3 MOV #KMCBFLN,R1 1$: DEC R1 TSTB -(R3) BNE 1$ MOVB #SPACE,@R3 CMPB (R3)+,@R3 BEQ 2$ DEC R1 BMI BRLTL DEC R3 2$: MOV R0,-(SP) .RCTRLO MOV (SP)+,R0 .PRINT MOV R5,R5 MOV SP,DOTFLG ADDR KMSTAK,R2 MOV R2,SP CALLR STRTP OPTCOL: MOVB #COLON,-(SP) BR OPTCHR OPTBLNK:MOVB #SPACE,-(SP) OPTCHR: CMPB (SP)+,@R5 BNE 1$ DEC R5 1$: RETURN REQPLUS:CMPB #'+,@R5 BR REQBL1 REQCOMMA:CMPB #',,@R5 BR REQBL1 REQBLNK:CMPB #SPACE,@R5 REQBL1: BNE SCFAIL RETURN DEFILE: MOVB (R4)+,DEFILB MOV @#SYSPTR,R1 TSTB WILDEF-$RMON(R1) BNE 1$ BICB #ESTARF+FSTARF,DEFILB 1$: RETURN COMPDEF:COMB DEFMSK RETURN FILQUAL:INCB QUALFL RETURN CMDQUAL:CLRB QUALFL RETURN PROMPT: MOVB (R4)+,PRMPTR+1 MOVB (R4)+,PRMPTR RETURN END: TST (SP)+ RETURN .SBTTL DCL SWITCH SCANNER SWITNO = 1 DTRANS = 2 DECVAL = 40 SVALU = 100 .ENABL LSB SWITLST:CMPB #'/,@R5 BNE SCFAIL INCB SCNTFL CLR -(SP) MOV R5,R1 CLR -(SP) BISB -(R1),@SP SWAB @SP BISB -(R1),@SP BIC #20040,@SP CMP #"ON,(SP)+ BNE 1$ INC @SP MOV R1,R5 1$: CALL ALPHT BCC ILSWIT MOV R5,(PC)+ TXTPSV: .WORD 0 MOV STKPTR,R1 2$: MOV -(R1),R2 TST -(R1) TST -(R1) BNE 2$ MOVB (R2)+,SUBCNT BEQ 2$ BR 4$ 3$: DECB SUBCNT BLE ILSWIT MOV (PC)+,R2 SUBPTR: .WORD 0 4$: CLR R1 BISB (R2)+,R1 ADD R2,R1 MOV R2,SUBPTR 5$: MOVB (R1)+,R3 BEQ 3$ DEC R3 MOV R3,-(SP) ASL R3 ADD (SP)+,R3 ADD ADSWTB,R3 MOV OPTPTR,R2 ADD PC,R2 OPTBAS = . CLR R0 6$: TSTB (R2)+ BPL 6$ INC R0 CMPB R0,SWITNO(R3) BNE 6$ MOV TXTPSV,R5 7$: CALL CHMTCH BNE 5$ CALL ALPHNT BCC 8$ TSTB (R2)+ BPL 7$ ILSWIT: KMEROR AMBSWT: KMEROR ILLNOS: KMEROR 8$: BITB #100,@R2 BNE AMBSWT MOVB -(R1),R1 TST (SP)+ BEQ 9$ CMPB R1,NONUMS BHI ILLNOS ADD NOFFST,R3 9$: MOVB @R3,R0 BIC #340,R0 BEQ 11$ TST FORCEP BEQ 10$ CMPB R0,FORCEP BNE CNFSWT 10$: BIS R0,FORCEP .IF NE 1 11$: .IFF 11$: MOVB MECLPT,R0 ADDR MECLST,R2 12$: DEC R0 BLT SWPRT2 CMPB R1,(R2)+ BNE 12$ .ENDC .DSABL LSB .ENABL LSB SWPRT2: .IF EQ 1 CLR R0 BISB MUTEX(R3),R0 ADDR MEXLST,R0,ADD 1$: MOVB MECLPT,R1 ADDR MECLST,R2 2$: DEC R1 BLT 3$ CMPB @R0,(R2)+ BNE 2$ DECB MECLPT 3$: MOVB (R0)+,@R2 BEQ 4$ INCB MECLPT BR 1$ .ENDC 4$: MOVB FILNUM,R1 MOVB DTRANS(R3),R2 BEQ 6$ BMI 5$ CMPB #40,R2 BLE ESWIT GOROUT: ASL R2 ADDR ACTONS-2,R2,ADD ADD @R2,PC ACTREL = . ILSWT1: BR ILSWIT SETDEF: MOVB (R4)+,R2 5$: BISB R2,DEFMSK 6$: RETURN .DSABL LSB ESWIT: MOVB NSWITS,R0 CMPB #MAXSWT,R0 BLT TCERR INCB NSWITS ASL R0 ADDR TRANSW,R0,ADD MOVB DSWOFF,(R0)+ MOVB R1,(R0)+ CALL PCDT TST R3 BEQ EPCDTR BITB #SVALU,@R3 BEQ EPCDTR 1$: MOVB #':,R2 CMPB R2,@R5 BNE EPCDTR MOVB #2,R0 CALL PCDT CALL ALPHT BCS 4$ INC R5 CALL NUMBT BCS 2$ CMPB #'-,@R5 BNE ILVALU 2$: MOVB @R5,R2 CALL PCDT CALL NUMBT BCS 2$ MOVB #'.,R2 CMPB R2,@R5 BEQ 3$ BITB #DECVAL,@R3 BEQ 1$ INC R5 3$: DEC R5 CALL PCDT BR 1$ 4$: MOVB @R5,R2 CALL PCDT 5$: CALL ALPHT BCC 1$ DEC R0 BLT 5$ BR 4$ EPCDTR: MOV #-1,R2 PCDT: MOVB DSWOFF,R1 CMPB #MAXDSC,R1 BLE TCERR ADDR STRANT,R1,ADD MOVB R2,@R1 INCB DSWOFF RETURN TCERR: KMEROR ILVALU: KMEROR CNFSWT: KMEROR .SBTTL SWITCH ACTION ROUTINES ACTALL: CMPB #':,@R5 BNE ILVALU CALL NUMBT BCS 1$ CMPB #'-,@R5 BNE ILVALU 1$: CALL MULSZ ADD #STFLG,R0 CMPB #DTYP,@R0 BGT ILSWT1 CMPB #TOTYP,@R0 BLT ILSWT1 2$: MOVB #'],-(R0) SUB #STFLG-FSZFLD-1,R0 MOVB #'[,(R0)+ MOV #5,R1 3$: DEC R1 BLT ILVALU MOVB @R5,(R0)+ CALL NUMBT BCS 3$ MOVB #'.,-(SP) CALLR OPTCHR .ENABL LSB ACTFOT: ADDR FOTDV1,R0 BR 2$ ACTSOT: ADDR SOTDV1,R0 BR 1$ ACTTOT: ADDR TOTDV1,R0 1$: CLRB OFBFLG(R0) 2$: TSTB OFBFL2(R0) BNE CNFSWT MOV R4,-(SP) MOV R0,R4 CMPB #':,@R5 BNE 6$ CALL OUTSPEC TSTB FNMFLD-FSIZ(R0) BNE 3$ CMP SAVORG,R0 BEQ ILVALU BR 7$ 3$: INCB OFBFL2(R4) 4$: MOVB OFBTYP(R4),-(R0) INCB OFBFLG(R4) 5$: MOV (SP)+,R4 RETURN 6$: CMP #SOTYP,OFBTYP(R4) BNE 8$ TSTB QUALFL BNE 9$ CALL ACTPRI 7$: TST @R4 .ASSUME OFBDV1 EQ 0 BNE CNFSWT MOV -FSIZ(R0),@R4 .ASSUME OFBDV1 EQ 0 MOV -FSIZ+2(R0),OFBDV2(R4) DECB FILNUM 8$: TSTB QUALFL BEQ 5$ 9$: MOV R4,R3 .ASSUME OFBDV1 EQ 0 CALL SUBNAM BR 4$ MAKOFL: MOV R4,-(SP) INC @SP MOVB (R4)+,R4 ADDR OTBLK,R4,ADD TSTB OFBFLG(R4) BNE 5$ ADDR SAVNM,R0 MOV R4,R3 .ASSUME OFBDV1 EQ 0 CALL SUBNM1 BR 4$ .DSABL LSB ACTNOO: INCB FOTFLG RETURN REMSWT: CLR R4 MOVB NSWITS,R4 DECB NSWITS SUB R0,R4 BLOS 2$ TSTB -(R1) 1$: MOV R1,R3 CMPB (R1)+,(R1)+ MOVB @R1,@R3 DECB R4 BNE 1$ 2$: RETURN SAVNAM: ADDR SAVNM,R1 MOV R0,R2 SUB #FSIZ,R0 MOV #SAVNEN-SAVNM/2,R3 1$: MOV (R0)+,(R1)+ DEC R3 BNE 1$ RETURN SUBNAM: CALL MULSZ 1$: CMPB #ITYP,STFLG(R0) BEQ SUBNM1 SUB #FSIZ,R0 BR 1$ SUBNM1: MOV R5,-(SP) MOV R0,-(SP) MOV R3,-(SP) ADDR DUMYNM,R5 CALL OUTSPEC MOV (SP)+,R5 TST @R5 BEQ 1$ MOV (R5)+,-FSIZ(R0) MOV (R5)+,-FSIZ+2(R0) 1$: MOV (SP)+,R5 CMP (R5)+,(R5)+ MOV (R5)+,FNMFLD-FSIZ(R0) MOV (R5)+,FNMFLD+2-FSIZ(R0) MOV (R5)+,FNMFLD+4-FSIZ(R0) RSTTPT: MOV (SP)+,R5 RETURN .ENABL LSB ACTOUT: CMPB #':,@R5 BEQ OUTSPEC RETURN ACTTER: MOV R5,-(SP) ADDR $TTSPC,R5 BR 3$ ACTPRI: MOV R5,-(SP) ADDR $LPSPC,R5 3$: CALL OUTSPEC BR RSTTPT .DSABL LSB ACTNOR: INCB RUNFLG RETURN .SBTTL DCL FILE SPEC PROCESSOR FSTARF = 1 ESTARF = 2 DSTARF = 4 SPISPEC:MOV (PC)+,R1 INSPEC: CLR R1 CALL MULSZI INSPC1: MOV #DEFIEX-DOSREL,R3 CALL DOSPC1 MOVB #ITYP,(R0)+ RETURN .ENABL LSB SPOSPEC:MOV (PC)+,R1 OUTSPEC:CLR R1 CALL MULSZI MOV #DEFOEX-DOSREL,R3 CALL DOSPC1 CMPB #'[,@R5 BNE 4$ MOVB @R5,(R2)+ CALL NUMBT BCS 1$ CMPB #'-,@R5 BNE FERR 1$: MOV #5,R1 2$: DEC R1 BLT FERR MOVB @R5,(R2)+ CALL NUMBT BCS 2$ 3$: CMPB #'],@R5 BNE FERR MOVB @R5,(R2)+ DEC R5 4$: MOVB #FOTYP,(R0)+ RETURN .DSABL LSB MULSZI: INCB FILNUM MULSZ: MOVB FILNUM,R2 CMPB R2,NOSPEC BGT FNERR MULSZS: CLR R0 1$: ADD #FSIZ,R0 DEC R2 BNE 1$ ADDR FILST-FSIZ,R0,ADD MOV R0,(PC)+ SAVORG: .WORD 0 RETURN .ENABL LSB DOSPC1: ADD PC,R3 DOSREL: ADDR DEFDEV,R2 DOSPEC: MOV R5,TXTPSV MOV R1,(PC)+ SPECTP: .WORD 0 CALL GETAS3 MOVB #':,(R0)+ BCS 1$ CMPB #':,@R5 BEQ 3$ 1$: CMP -(R0),-(R0) TST @R0 BNE 2$ CMPB #'.,@R5 BEQ 2$ DECB FILNUM TST (SP)+ CALLR SCFAIL 2$: MOV (R2)+,(R0)+ MOV (R2)+,(R0)+ MOV TXTPSV,R5 3$: MOV R0,R2 MOV #6,R1 CALL GETASC BCS FERR TST @R2 BNE 4$ TST SPECTP BEQ 4$ BITB #FSTARF,DEFILB BEQ 4$ BICB #$WILD0,DEFMSK MOVB #'*,@R2 4$: MOV R0,R2 CLR (R2)+ CLR (R2)+ TST -6(R0) BEQ 7$ MOV (R3)+,@R0 MOV (R3)+,2(R0) CMPB #'.,@R5 BNE 5$ MOVB @R5,(R0)+ CALL GETAS3 BCC 7$ FERR: KMEROR FNERR: KMEROR 5$: TST @R0 BNE 7$ TST SPECTP BEQ 7$ BITB #DSTARF,DEFILB BEQ 6$ CMP #'*,-6(R0) BEQ 7$ 6$: BITB #ESTARF,DEFILB BEQ 7$ BICB #$WILD0,DEFMSK MOV #".*,@R0 7$: MOV R2,R0 ZFALLF: CLR (R0)+ CLR (R0)+ CLR (R0)+ CLRB (R0)+ RETURN .DSABL LSB $WILD0 = 100 .ENABL LSB GETAS3: MOV #3,R1 BR GETASC 1$: BICB #$WILD0,DEFMSK 2$: SUB #1,R1 BCS 5$ MOVB @R5,(R0)+ GETASC: CALL ALPHNT BCS 2$ TST SPECTP BEQ 3$ CMPB #'*,@R5 BEQ 1$ CMPB #'%,@R5 BEQ 1$ 3$: TST (PC)+ 4$: CLRB (R0)+ DEC R1 BGE 4$ 5$: RETURN .DSABL LSB .ENABL LSB DEFDV: MOV #DEFDEV-2$,R1 BR 1$ DEFINX: MOV #DEFIEX-2$,R1 1$: ADD PC,R1 2$: MOVB (R4)+,R0 SWAB R0 BISB (R4)+,R0 ADD PC,R0 EXTREL = . MOV (R0)+,(R1)+ MOV (R0)+,(R1)+ RETURN .DSABL LSB SETISPC:CALL DEFOSPC MOVB #ITYP,@R0 RETURN DEFOSPC:MOVB (R4)+,R1 SWAB R1 BISB (R4)+,R1 ADD PC,R1 DOUSTR = . CALL MULSZI MOV #FSIZ,R2 1$: MOVB -(R1),(R0)+ BNE 2$ INC R1 2$: DEC R2 BNE 1$ MOVB #DTYP,-(R0) RETURN .SBTTL COMMAND GENERATOR .MACRO EMIT TEXT .NCHR $TEMP1, .IF NE $TEMP1 JSR R1,EMITIN .IF DIF TEXT,ENDLIN .IF DIF TEXT,ENDCMD .ASCII \TEXT\ .IF EQ EMITIN-.&1 .BYTE 0 .ENDC .BYTE -1 .IFF .BYTE 3,0,200,-1 .ENDC .IFF .BYTE 200,-1 .ENDC .IFF CALL EMITCH .ENDC .ENDM CMDEXE: CALL CMDMAK .IF DF HJDB CALLR BADCOM .IFF CALLR STRT .ENDC CMDMAK: CLRB GENFLG CLR (PC)+ MEMNED: .WORD 0 CALL DOGEN MOV MEMNED,R0 CALL DCLSPC SUB R0,@SP SUB R0,CSTPTR SUB R0,(PC)+ CNMPTR: .WORD 0 MOV R1,R5 DECB GENFLG DOGEN: EMIT MOVB FORCEP,R0 ADDR CUSPTB,R1 1$: DEC R0 BEQ 3$ 2$: TSTB (R1)+ BPL 2$ BR 1$ 3$: EMIT EMIT ENDLIN TSTB NOCLNF BNE RETPC MOVB EXTXT,R1 BEQ 4$ ADDR STRANT,R1,ADD EMIT 4$: MOVB #FOTYP,R4 CALL DOENT MOVB LNKFLG,R0 BISB COMPFL,R0 BNE 5$ TSTB TFLAG BMI 5$ DECB R4 CALL DOENT INCB R4 5$: INCB R4 6$: INCB TFLAG BEQ 6$ CALL DOENT1 CMPB R4,#TOTYP BNE 5$ EMIT <=> INCB R4 CALL DOENT CLR R2 CALL DOSWIT EMIT ENDLIN EMIT ENDCMD RETPC: RETURN DOENT: CLRB TFLAG DOENT1: ADDR FILST-FSIZ,R1 CLR R2 1$: ADD #FSIZ,R1 2$: INC R2 CMPB R2,FILNUM BGT RETPC CMPB R4,STFLG(R1) BNE 1$ TSTB GENFLG BNE 3$ MOV EXEESC,R0 BEQ 3$ CMPB #FOTYP,R4 BNE 3$ CALL @R0 3$: DECB TFLAG BMI 4$ EMIT <,> BR 3$ 4$: EMIT CMPB #ITYP,R4 BNE 5$ NEGB TFLAG 5$: MOV R1,-(SP) MOV R4,-(SP) CALL DOSWIT MOV (SP)+,R4 MOV (SP)+,R1 BR 2$ DOSWIT: MOVB NSWITS,R3 ADDR TRANSW,R4 5$: DEC R3 BMI RETPC MOVB (R4)+,R1 CMPB R2,(R4)+ BNE 5$ ADDR STRANT,R1,ADD EMIT EMIT BR 5$ .ENABL LSB EMITIN: CALL EMITCH RTS R1 1$: INC MEMNED TSTB GENFLG BEQ EMITCH .IF DF HJDB .TTYOUT .ENDC MOVB R0,(R5)+ EMITCH: MOVB (R1)+,R0 BEQ EMITCH BPL 1$ ASLB R0 BEQ 1$ RETURN .DSABL LSB .MACRO PROG NAME,ARG .IF B ARG .ASCII /NAME/<-1> .ENDC $TEMP=$TEMP+1 $$'NAME==$TEMP .ENDM $TEMP=0 CUSPTB: PROG RESORC PROG PIP PROG DIR PROG DUP PROG LINK PROG FORTRA PROG MACRO PROG DUMP PROG LIBR PROG SRCCOM PROG FILEX PROG DICOMP PROG FORMAT PROG BINCOM PROG ERROUT PROG QUEMAN PROG BUP PROG KED PROG K52 PROG KEX PROG UCL PROG EDIT,NOTEXT PROG TECO,NOTEXT .EVEN CSPISPC:REQCOMMA SPISPC: SPISPEC GOTO GSWIT RINSPC: INSPEC GOTO GSWIT ROUSPC: OUTSPEC GOTO GSWIT SPOSPC: REQBLNK SPOSPEC GSWIT: FLDBEG OPTBLNK SWITLST ITEREND SRET GSWIT1: OPTBLNK SWITLST SRET .EVEN .SBTTL DCL STORAGE AREAS .ENABL CRF IDEPTH = 10 STKPTR: .WORD 0 .WORD -1 .WORD 0 .WORD 0 ISTACK: .REPT 3*IDEPTH .WORD 55555 .ENDR TXTPTR: .WORD 0 INTCLR: DEFIEX: .WORD 0,0 DEFOEX: .WORD 0,0 EXEESC: .WORD 0 FORCEP: .WORD 0 .IF EQ 1 MECLPT: .BYTE .ENDC NSWITS: .BYTE LNKFLG: .BYTE QUALFL: .BYTE EXTXT: .BYTE SCNTFL: .BYTE FILNUM: .BYTE DSWOFF: .BYTE DEFMSK: .BYTE DEFILB: .BYTE EXEPT2: .BYTE ENDCLR: TFLAG: .BYTE GENFLG: .BYTE NONUMS: .BYTE NOSPEC: .BYTE SUBCNT: .BYTE EXEFLG: .BYTE .EVEN ACTCNT = 37 ACTONS: .BLKW ACTCNT RUNFLG: .BYTE COMPFL: .BYTE NOCLNF: .BYTE EXEDEL: .BYTE DEFDEV: .ASCIZ 'DK:' ..CDEV == . $DK: .ASCIZ 'DK:' $SY: .ASCIZ 'SY:' $.SYS: .ASCII \.SYS\ $.LST: .ASCII \.LST\ $.BOT: .ASCII \.BOT\ $COMPSTR: TYPDEF FOR,FORTRAN,MAC,MACRO,DBL,DICOMP SAVNM: SAVDV1: .WORD SAVDV2: .WORD SAVNM1: .WORD SAVNM2: .WORD SAVNM3: .WORD SAVEX1: .WORD SAVEX2: .WORD SAVNEN: .WORD 0 FSIZ = 22. FNMFLD = 4. FTPFLD = 10. FSZFLD = 14. STFLG = 21. FILST: .BLKB 9.*FSIZ DTYP = -5 FOTYP = -4 SOTYP = -3 TOTYP = -2 ITYP = -1 OTBLK: TOTDV1: .WORD 0 TOTDV2: .WORD 0 TOTFLG: .BYTE 0 TOTFL2: .BYTE 0 .WORD TOTYP SOTDV1: .WORD 0 SOTDV2: .WORD 0 SOTFLG: .BYTE 0 SOTFL2: .BYTE 0 .WORD SOTYP FOTDV1: .WORD 0 FOTDV2: .WORD 0 FOTFLG: .BYTE 0 FOTFL2: .BYTE 0 .WORD FOTYP OFBDV1 = 0 OFBDV2 = 2 OFBFLG = 4 OFBFL2 = 5 OFBTYP = 6 OFBSIZ = 10 INPFN: .BLKW 4 TRANSW: .BLKW 12. MAXSWT = .-TRANSW/2 .IF EQ 1 MECLST: .BLKB 60 .ENDC TMPAREA:.BLKB 16. STRANT: .BLKB 50. MAXDSC = .-STRANT .IF EQ 1 MEXLST: .BYTE XX,YY,ZZ,... .ENDC BACKWT $TTSPC, BACKWT $LPSPC, BACKWT $DKSPC, BACKWT $LPWLD, BACKWT DUMYNM, $FROM: PTXT $TO: PTXT $JOB: PTXT $FILEE: PTXT $FILE: PTXT $DEVICE:PTXT $DVOFL: PTXT $FILE1: PTXT $FILE2: PTXT $LIBR: PTXT $PHYSIC:PTXT $LOGICA:PTXT .EVEN .SBTTL DCL SUPPORT ROUTINES .ENABL LSB ALPHT: CMPB #'A,-(R5) BHI 1$ CMPB @R5,#'Z+1 BLO 1$ CMPB #'a,@R5 BHI 1$ CMPB @R5,#'z+1 1$: RETURN ALPHNT: CALL ALPHT BCS 1$ INC R5 NUMBT: CMPB #'0,-(R5) BHI 2$ CMPB @R5,#'9+1 2$: RETURN .DSABL LSB .SBTTL COMMAND LIST .MACRO FLGTXT TXTARG .DSABL CRF $TEMP=100 $TEMP2=1 .IRPC CHAR, .IF IDN CHAR,_ $TEMP=0 .IFF .IF EQ $TEMP2 .BYTE $TEMP1+$TEMP .ENDC $TEMP1=''CHAR&77 $TEMP2=0 .ENDC .ENDR $TEMP=0 .BYTE $TEMP1+200 .ENABLE CRF .ENDM COMDST: CMDTBL R CMDTBL RUN CMDTBL E CMDTBL D CMDTBL B CMDTBL COPY CMDTBL DATE CMDTBL EDIT CMDTBL DIRECTORY CMDTBL TYPE CMDTBL DELETE CMDTBL PROTECT CMDTBL UNPROTECT CMDTBL TIME CMDTBL GT CMDTBL LINK CMDTBL PRINT CMDTBL EXECUTE CMDTBL REENTER CMDTBL COMPILE CMDTBL RESET CMDTBL LOAD CMDTBL CLOSE CMDTBL BOOT CMDTBL START CMDTBL ASSIGN CMDTBL RENAME CMDTBL SET CMDTBL SQUEEZE CMDTBL UNLOAD CMDTBL GET CMDTBL DEASSIGN CMDTBL FORTRAN CMDTBL MACRO CMDTBL HELP CMDTBL DIBOL CMDTBL FRUN CMDTBL RESUME CMDTBL SUSPEND CMDTBL SAVE CMDTBL SHOW CMDTBL INITIALIZE CMDTBL DIFFERENCES CMDTBL DUMP CMDTBL INSTALL CMDTBL REMOVE CMDTBL LIBRARY CMDTBL SRUN CMDTBL ABORT CMDTBL CREATE CMDTBL FORMAT CMDTBL BACKUP CMDTBL MOUNT CMDTBL DISMOUNT CMDTBL TECO CMDTBL MAKE CMDTBL MUNG .IF EQ 1 CMDTBL SUBMIT .ENDC COMLST: FLGTXT FLGTXT FLGTXT FLGTXT FLGTXT FLGTXT FLGTXT FLGTXT FLGTXT FLGTXT FLGTXT FLGTXT FLGTXT FLGTXT FLGTXT FLGTXT FLGTXT FLGTXT FLGTXT FLGTXT FLGTXT FLGTXT FLGTXT FLGTXT FLGTXT FLGTXT FLGTXT FLGTXT FLGTXT FLGTXT FLGTXT FLGTXT FLGTXT FLGTXT FLGTXT FLGTXT FLGTXT FLGTXT FLGTXT FLGTXT FLGTXT FLGTXT FLGTXT FLGTXT FLGTXT FLGTXT FLGTXT FLGTXT FLGTXT FLGTXT FLGTXT FLGTXT FLGTXT FLGTXT FLGTXT FLGTXT FLGTXT .IF EQ 1 FLGTXT .ENDC .BYTE 0 .EVEN .SBTTL STACK, AND SPACE FOR RESIDENT OVERLAY CMDFLG: .BYTE 0 ATFLAG: .BYTE 0 .IIF EQ LNK$IF, .NLIST .IF NE LNK$IF OLDLIN: .WORD 0 KBFLN: .WORD 0 .ENDC .IIF EQ LNK$IF, .LIST .IF NDF IFBFSZ IFBFSZ = 1 .ENDC SVSTSZ = 10. IFSVSZ = 6+SVSTSZ .IF NDF KMCBFLN KMCBFLN = 200. .ENDC .WORD 0 KMCBND: .BLKB KMCBFLN KMCBUF: .WORD SPACE .ASCII \S\ .EVEN OVLIOB: .WORD OVLY-KMON/1000 .WORD 0 .WORD 400*OVLYSZ .WORD 0 BASE: .WORD 0 GETCNT: .WORD 0 SAVSWT: .WORD 0 BLOKWG: .WORD -1 SYSIOB: BSS 3 OLDHAN: .BLKW 1 BLOCK: .BLKW 8. ..INDN == . NMIND: .RAD50 "SY " INDCNT::.WORD 4$-3$ 3$: .ASCII /RUN / .BLKB 3 .ASCIZ /:IND/ 4$: .EVEN .IF NE CONT$N KCTNU: CTNUFG: .WORD 0 CTNUIF: .WORD 2$-1$ 1$: .ASCII /@CONTN/ .BYTE SUFX$S 2$: .EVEN .ENDC KMSTK:: .BLKW 60. KMSTKE:: . = .-KMON+777/1000*1000+KMON KMSTAK:: . = KMSTK .REPT KMSTAK-KMSTK/2 .WORD 52525 .ENDR OVLY: .BLKW 400*OVLYSZ IFBUFR = OVLY+1000 KMONSZ == .-KMON/1000 KMSIZE == KMONSZ*1000 KMLEN == KMONSZ*400 .IF EQ MMG$T!SYT$K .IF GT KMONSZ-20 KMSZER = 1000*OVLYSZ+KMSTKE-KMON-20000/2 .ERROR KMSZER .ENDC .ENDC . = OVLY OVLYST = . .MACRO OVCMD CMD N.'CMD=1 O.'CMD=.-OVLYST CMD: .ENDM .IF NE DIRE$$ OVCMD DIRECTORY CALLR DIR1 .ENDC .IF NE COPY$$ .SBTTL COPY COMMAND SYNTAX COPY PROMPT $FROM SCALL GSWIT,<1> REQBLNK DEFILE FSTARF+ESTARF SCALL SPISPC,<1,2,4> FLDBEG OFLD1 SCALL CSPISPC,<1,2,4> OPTEND FLDBEG SCALL CSPISPC,<1,2,4> ITEREND GOTO OFLD2 OFLD1: FLDBEG REQPLUS SCALL SPISPC,<1,2,4> SETDEF CON ITEREND OFLD2: PROMPT $TO SCALL SPOSPC,<1,2,3> EOLSEQ PIP WILDEF PIP,W,LOG,ASK,NLG,AYS,$WILD0 COMPDEF APLYDEF PIP,LOG,W APLYDEF PIP,ASK,Q APLYDEF PIP,CON,U APLYDEF DUP,AYS,Y APLYDEF FILEX,ASK,Q APLYDEF DUP,WAI,W APLYDEF PIP,WAI,E APLYDEF FILEX,WAI,W END SWITS COPY SWIT LOG 1 PIP - - LOG SWIT QUERY 1 - - - ASK SWIT REPLACE 1 - - - SWIT PROTECTION 1 - - F ENDNO SWIT CONCATENATE 1 PIP - - CON SWIT PREDELETE 1 PIP - O SWIT DELETED 1 PIP - D SWIT IGNORE 1 - - G SWIT ASCII 1 - - A SWIT BINARY 1 - - B SWIT IMAGE 1 - - IMA SWIT PACKED 1 FILEX - P SWIT POSITION 2 PIP - M,,DVAL SWIT EXCLUDE 1 PIP - P SWIT SLOWLY 1 PIP - S SWIT NEWFILES 1 PIP - C SWIT BEFORE 1 PIP - J,,DVAL SWIT DATE 1 PIP - C,,DVAL SWIT SINCE 1 PIP - I,,DVAL SWIT SETDATE 1 PIP - T,,DVAL SWIT SYSTEM 1 PIP - Y SWIT INFORMATION 1 PIP - X SWIT MULTIVOLUME 1 PIP - V SWIT BOOT 1 - DUP U,,VAL SWIT DEVICE 1 - DUP I SWIT VERIFY 1 - - H SWIT OWNER 2 FILEX - OWN SWIT FILES 1 DUP - F SWIT WAIT 1 - - - WAI SWIT DOS 2 - FILEX S SWIT TOPS 2 - FILEX T SWIT INTERCHANGE 2 - FILEX U,,DVAL SWIT START 2 DUP - G,,DVAL SWIT ALLOCATE 3 - - ALL SWIT END 4 DUP - E,,DVAL SWIT RETAIN 1 DUP - R NOS SWIT NOLOG 1 - - - NLG SWIT NOQUERY 1 - - - AYS SWIT NOREPLACE 1 PIP - N SWIT NOPROTECTION 1 PIP - Z ENDS OVCMD COPY CLR (PC)+ IMAFLG: .WORD 0 ITBLE 7 CALL INITIT MOV FORCEP,R0 BIC #^C<37>,R0 CMP #<$$PIP>,R0 BNE 2$ MOV IMAFLG,R0 BEQ 2$ ADDR TRANSW-1,R1 ADD R0,R1 MOVB (R1)+,R2 ADDR STRANT,R2,ADD TSTB (R2)+ CALL REMSWT 2$: CALLR CMDEXE .ENDC .IF NE DIRE$$ .SBTTL DIRECTORY COMMAND SYNTAX DIRECTORY DEFILE ESTARF+FSTARF SCALL GSWIT,<1> FLDBEG OFLD3 REQBLNK SCALL SPISPC,<1,2> OPTEND FLDBEG OFLD4 SCALL CSPISPC,<1,2> ITEREND OFLD3: SETISPC $DKSPC OFLD4: DEFOSPC $TTSPC EOLSEQ DIR APLYDEF FILEX,FST,L COMPDEF APLYDEF DIR,FST,F APLYDEF FILEX,FST,F END SWITS DIRECTORY SWIT PROTECTION 1 DIR - T ENDNO SWIT BLOCKS 1 DIR - B SWIT POSITION 1 DIR - B SWIT BRIEF 1 - - - FST SWIT FAST 1 - - - FST SWIT FULL 1 DIR - E SWIT PRINTER 1 - - PRI SWIT TERMINAL 1 - - TER SWIT OUTPUT 1 - - OUT SWIT SUMMARY 1 DIR - N SWIT COLUMNS 1 DIR - C,,DVAL SWIT ORDER 1 DIR - S,,VAL SWIT SORT 1 DIR - S,,VAL SWIT EXCLUDE 1 DIR - P SWIT ALPHABETIZE 1 DIR - A SWIT OCTAL 1 DIR - O SWIT NEWFILES 1 DIR - D SWIT DATE 1 DIR - D,,DVAL SWIT SINCE 1 DIR - J,,DVAL SWIT BEFORE 1 DIR - K,,DVAL SWIT FREE 1 DIR - M SWIT INTERCHANGE 1 - FILEX U SWIT DOS 1 - FILEX S SWIT TOPS 1 - FILEX T SWIT OWNER 2 FILEX - OWN SWIT BADBLOCKS 1 - DUP K SWIT FILES 1 DUP - F SWIT WAIT 1 - - W SWIT START 1 DUP - G,,DVAL SWIT END 1 DUP - E,,DVAL SWIT VOLUMEID 1 - - V,,VAL SWIT DELETED 1 DIR - Q SWIT REVERSE 1 DIR - R SWIT BEGIN 1 DIR - G SWIT ALLOCATE 1 - - ALL SWIT BACKUP 1 - BUP L NOS SWIT NOPROTECTION 1 DIR - U ENDS DIR1: ITBLE 8. CALL INITIT MOV FORCEP,R0 BIC #^C<37>,R0 CMP #$$DIR,R0 BNE 2$ MOV #'W,R3 CLR R0 ADDR TRANSW-1,R1 1$: TSTB (R1)+ INC R0 CMPB R0,NSWITS BGT 2$ MOVB (R1)+,R2 ADDR STRANT,R2,ADD CMPB @R2,R3 BNE 1$ CALLR ILLOPT 2$: CALLR CMDEXE .ENDC .IF NE DIRE$$!COPY$$ OVAOWN: CMPB #':,@R5 BNE 2$ CMPB #'[,-(R5) BNE 2$ MOVB DSWOFF,EXTXT 1$: MOVB @R5,R2 BEQ 2$ CALL PCDT DEC R5 CMPB #'],R2 BNE 1$ CALLR EPCDTR 2$: CALLR ILVALU OVAIMA: MOVB NSWITS,IMAFLG INC IMAFLG MOVB #'I,R2 CLR R1 CLR R3 CALLR ESWIT .ENDC .IF NE DIRE$$!COPY$$ .IRP NUM,<\$OPTX> OPTX'NUM:: .ENDR .BYTE -1 .DSABL CRF $SCNT=0 SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT .EVEN .ENABL CRF NEXTL .ENDC .IIF GT .-KMON-KMSIZE,.ERROR OVSZRS == . - OVLYST . = KMON + KMSIZE .IIF DF NLKMON, .LIST .MCALL .MODULE .MODULE KMOVLY,VERSION=68,COMMENT= ; COPYRIGHT (c) 1987 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. .IIF DF NLOVLY, .NLIST .SBTTL ********************************* .SBTTL * KMON OVERLAYS * .SBTTL ********************************* .SBTTL OVERLAY DEFINITIONS .MACRO OVERLAY .IF GE OVLYN .IIF GT <.-OVLYST>-<1000*OVLYSZ>, .ERROR .IRP N,<\OVLYN> OVSZ'N==.-OVLYST .ENDR .=OVLYST+<1000*OVLYSZ> .ENDC OVLYN=OVLYN+OVLYSZ .IRP N,<\OVLYN> .CSECT OVLY'N .ENDR OVLYST=. .ENDM .MACRO OVCMD CMD N.'CMD=OVLYN O.'CMD=.-OVLYST CMD:: .ENDM .MACRO OJSR R,DEST,AT .IF B AT JSR R,-<.+4-OVLYST>(PC) .IFF JSR R,@-<.+4-OVLYST>(PC) .ENDC .ENDM .MACRO OJMP DEST JMP -<.+4-OVLYST>(PC) .ENDM .MACRO OINST INST,OP1,OP2,FLG1,FLG2 .IF B FLG1 .IF B FLG2 .IF B OP2 INST OP1 .ERROR .IFF INST OP1,OP2 .ERROR .ENDC .IFF INST OP1,OP2-OVLY+OVLYST .ENDC .IFF .IF B OP2 INST OP1-OVLY+OVLYST .IFF .IF B FLG2 INST OP1-OVLY+OVLYST,OP2 .IFF INST OP1-OVLY+OVLYST,OP2-OVLY+OVLYST .ENDC .ENDC .ENDC .ENDM .MACRO OADDR ADR,REG,PUSH .IF IDN REG,SP MOV PC,-(SP) ADD #-<.-OVLYST>,@SP .IFF .IF B PUSH MOV PC,REG .IFF .IF IDN PUSH, ADD PC,REG .IFF JSR REG,@PC .ENDC .ENDC ADD #-<.-OVLYST>,REG .ENDC .ENDM .MACRO OINTON ABC CLR -(SP) CALL ABC .ENDM .MACRO OINTOF ABC MOV #PR7,-(SP) CALL ABC .ENDM .MACRO ITBLE NUM,?LAB JSR R1,LAB .WORD $NOFFS .WORD <$SWTAD-OVLYST>+OVLY-SWTBAS .WORD <$SYN-OVLYST>+OVLY-STRBAS .IF EQ $$$1 .WORD 0 .IFF .IRP N,<\$OPTX> .WORD +OVLY-OPTBAS .ENDR .ENDC .BYTE $NONUM .BYTE NUM LAB: .ENDM .IF EQ MMG$T .MACRO OSPL PRIO .IF NE PRIO MOV #PRIO*40,-(SP) .IFF CLR -(SP) .ENDC OJSR PC,.$MTPS,* .ENDM OSPL .IFF .MACRO OSPL PRIO .IF NE PRIO MOVB #PRIO*40,@#PS .IFF CLRB @#PS .ENDC .ENDM OSPL .ENDC .SBTTL KMON ERROR OVERLAY OVERLAY .CSECT OVLYE . = STADDR OVLYST = . OVCMD ERRCOD STADDR: ADDR OERBEG,R5,ADD BISB @R5,@#USERRB MOVB (R5)+,R1 ADDR LEVLST-1,R0 1$: TSTB (R0)+ ROR R1 BCC 1$ MOVB @R0,KMLEV ADDR KMTXT,R0 .RCTRLO .PRINT MOV R5,R0 OJMP MSGKM1 KMTXT: .ASCII "?KMON-" KMLEV: .ASCII "F-"<200> LEVLST: .ASCII "IWEFU" OERBEG: .SBTTL KMON RUNTIME ERROR MESSAGE OVERLAY OVERLAY .CSECT OVLYE2 . = STADD2 OVLYST = . OVCMD RTERR STADD2: TST R4 BNE 1$ OINST CLR INPFN+2,,* 1$: OADDR INPFN,R0 ADDR OUTFN+1,R1 CALL FNASC CLRB (R1)+ BR OUTMSG OVCMD BRTERR ADDR OUTFN+1,R0 INC R4 1$: MOVB -(R4),(R0)+ BNE 1$ OUTMSG: ADDR OERBG2,R5,ADD BISB @R5,@#USERRB MOVB (R5)+,R1 ADDR LEVLT2-1,R0 2$: TSTB (R0)+ ROR R1 BCC 2$ MOVB @R0,KMLEV2 ADDR KMTXR,R0 .RCTRLO .PRINT MOV R5,R0 .RCTRLO .PRINT ADDR OUTFN,R0 OJMP MSGKM1 OUTFN: .BYTE SPACE .BLKB 14. .BYTE 0 .EVEN .SBTTL RAD50 FILENAME TO ASCII ROUTINE FNASC: MOV R1,R4 MOV R0,R3 CALL 2$ MOVB #':,(R1)+ 1$: TST @R3 BEQ 4$ CALL 2$ CALL 2$ TST @R3 BEQ 4$ MOVB #'.,(R1)+ 2$: MOV (R3)+,R0 .IF NE SYT$K OJSR PC,R50ASC .IFF CALL R50ASC .ENDC 3$: CMPB #SPACE,-1(R1) BNE 4$ DEC R1 CMP R1,R4 BNE 3$ 4$: RETURN .IF EQ SYT$K .SBTTL RAD50 TO ASCII CONVERSION ROUTINE .WORD 0,1,50 DIVTAB: .WORD 50*50 R50ASC: MOV R4,-(SP) MOV R3,-(SP) 1$: ADDR DIVTAB,R3 2$: MOV #-1,R4 CMP #174777,R0 BLO 5$ 3$: INC R4 SUB @R3,R0 BCC 3$ ADD @R3,R0 TST R4 BEQ 6$ CMP #33,R4 BLO 7$ BEQ 8$ 5$: ADD #40,R4 6$: ADD #16,R4 7$: ADD #11,R4 8$: ADD #11,R4 MOVB R4,(R1)+ TST -(R3) BNE 2$ MOV (SP)+,R3 MOV (SP)+,R4 RETURN .ENDC OVCMD RADERR OADDR INPFN,R3 ADDR OUTFN+1,R1 MOV (R3)+,R0 .IF NE SYT$K OJSR PC,R50ASC .IFF CALL R50ASC .ENDC MOV (R3)+,R0 BEQ 1$ .IF NE SYT$K OJSR PC,R50ASC .IFF CALL R50ASC .ENDC 1$: CLRB (R1)+ CALLR OUTMSG KMTXR: .ASCII "?KMON-" KMLEV2: .ASCII "F-"<200> LEVLT2: .ASCII "IWEFU" OERBG2: .SBTTL DATE OVERLAY .IF NE CLOS$$ OVCMD CLOSE CALLR CLOSEO .ENDC .IF NE DATE$$ OVCMD DATE .ENABL LSB ADDR TMRLST,R3 MOV R3,R0 MOV R3,-(R0) TST -(R0) EMT 375 ADDR MONTHS,R4 MOV @#SYSPTR,R0 TSTB @R5 BEQ 6$ CMPB @R5,#SPACE BEQ 1$ INC R5 1$: CLR R1 JSR R3,NUMK .BYTE 0.,31.-0. SWAB R1 ASR R1 ASR R1 ASR R1 INC R5 MOV R5,R3 2$: ADD #2000,R1 TSTB 1(R4) BEQ 10$ MOV R3,R5 MOV R4,R2 CMP (R4)+,(R4)+ 3$: MOVB (R2)+,-(SP) BICB #40,@SP MOVB -(R5),-(SP) BICB #40,@SP CMPB (SP)+,(SP)+ BNE 2$ 4$: CMP R2,R4 BLOS 3$ JSR R3,NUMK .BYTE 72.,99.-72. TSTB @R5 BNE 10$ ADDR TMRLST,R0 MOV #-1,@R0 MOV R1,-(R0) MOV R0,SDTM+2-(R0) ADD #SDTM-,R0 .SDTTM RETURN 6$: MOV $DATE-$RMON(R0),R2 BIT #140000,R2 BNE 10$ BIT #37,R2 BEQ 9$ 7$: MOV @SP,R0 MOV R2,-(SP) BIC #^C<37>,@SP ASR R2 ASR R2 ASR R2 ASR R2 ASR R2 BNE 7$ CALL R10ONF DEC @SP ASL @SP ASL @SP ADD (SP)+,R4 MOV #5,R2 8$: .TTYOUT (R4)+ DEC R2 BNE 8$ TST (SP)+ MOV (SP)+,R0 ADD #72.,R0 CALL R10OUT K0CRLF: OJMP KCRLF 9$: KMEROR ,,WARN$ 10$: .IF EQ CONT$N KMEROR .IFF KMEROR ,,WARN$ .ENDC NUMK: OJSR PC,DECNUM MOVB (R3)+,R2 SUB R2,@SP BLE 10$ MOVB (R3)+,R2 CMP @SP,R2 BGT 10$ ADD (SP)+,R1 RTS R3 .DSABL LSB .ENDC .IF NE TIME$$ .SBTTL TIME OVCMD TIME .ENABL LSB OTIME: MOV @#SYSPTR,R0 ADD #CONFIG-$RMON,R0 TST @R0 BPL 13$ BIT #CLK50$,@R0 BEQ 1$ MOVB #50.,9$ MOVB #50.,CLKFRQ 1$: ADDR TMRLST,R3 MOV R3,R0 MOV R3,-(R0) TST -(R0) EMT 375 TSTB @R5 BEQ 8$ CMPB @R5,#SPACE BEQ 2$ INC R5 2$: CMP (R3)+,(R3)+ CLR R1 CLR -(SP) 3$: OJSR PC,DECNUM MOVB (R3)+,R4 CMP R4,@SP BLOS 12$ CMPB @R5,(R3)+ BEQ 4$ TSTB @R5 BNE 12$ INC R5 4$: ADD (SP)+,@SP ADC R1 MOVB @R3,R4 BEQ 6$ MOV R1,R2 MOV @SP,R0 5$: DEC R4 BEQ 3$ ADD R0,@SP ADC R1 ADD R2,R1 BR 5$ 6$: MOV @#SYSPTR,R0 .IF NE BF!TIME$R SUB TMRLST+2,@SP SBC R1 SUB TMRLST,R1 ADD (SP)+,$TIME+2-$RMON(R0) ADC R1 ADD R1,$TIME-$RMON(R0) K0RTS: RETURN .IFF OINTOF 7$ MOV (SP)+,$TIME+2-$RMON(R0) MOV R1,$TIME-$RMON(R0) MOV @SP,-(SP) CLR 2(SP) 7$: RTI .ENDC 8$: MOV (R3)+,R1 MOV (R3)+,R2 JSR R4,DIVIDE 9$: .WORD 60. MOV R5,R0 MOV #3,R3 10$: MOV R0,-(SP) JSR R4,DIVIDE .WORD 60. DEC R3 BNE 10$ 11$: CALL R10OUT MOV (SP)+,R2 BMI 14$ .TTYOUT #': MOV R2,R0 BR 11$ 12$: .IF EQ CONT$N KMEROR .IFF KMEROR ,,WARN$ .ENDC 13$: KMEROR ,,WARN$ 14$: OJMP KCRLF .DSABL LSB .ENDC .IF NE TIME$$!DATE$$ .SBTTL DECIMAL OUTPUT AND CONVERSION .ENABL LSB R10ONF: CMP #10.,R0 BHI 2$ R10OUT: SWAB R0 1$: ADD #173001,R0 BPL 1$ ADD #'0+<10.*400-1>,R0 .TTYOUT SWAB R0 2$: ADD #'0,R0 .TTYOUT RETURN .DSABL LSB DIVIDE: CLR R0 MOV #31.,R5 1$: ASL R2 ROL R1 ROL R0 CMP R0,@R4 BLO 2$ SUB @R4,R0 INC R2 2$: DEC R5 BPL 1$ TST (R4)+ RTS R4 SDTM: .BYTE 0,..SDTM .WORD 0 .NLIST BEX ..MNTH == . MONTHS: .ASCIZ "-Jan-Feb-Mar-Apr-May-Jun-Jul-Aug-Sep-Oct-Nov-Dec-" .LIST BEX .BYTE 0,..GTIM .WORD 0 TMRLST: .WORD 0,0 .BYTE 24.,':,60.,':,60.,'. CLKFRQ: .BYTE 60.,377,0 .EVEN .ENDC .IF NE CLOS$$ .SBTTL CLOSE CLOSEO: TSTB @R5 BNE 12$ CLR R2 CLR R4 1$: MOV @#SYSPTR,R3 ADD #$CSW-$RMON,R3 MOV (PC)+,R5 .CLOSE 0 2$: MOV @R3,R0 BPL 6$ BIC #^C<76>,R0 ADD @#SYSPTR,R0 ADD #$PNAME-$RMON,R0 OINST MOV @R0,INPFN,,* TST R2 BNE 4$ OADDR DEVSTS,SP EMT 342 BCS 11$ TST 4(R0) BNE 3$ MOV 2(R0),R0 CMP R0,R4 BLOS 3$ MOV R0,R4 3$: BR 6$ 4$: MOV R0,-(SP) TST R4 BEQ 5$ .SERR MOV @SP,R0 .FETCH R4 BCS 10$ .HERR 5$: .IF EQ BF CLRB C.DEVQ(R3) .ENDC MOV R5,@PC HALT BCS 13$ MOV (SP)+,R0 .RELEASE 6$: INC R5 ADD #12,R3 CMP R5,(PC)+ .CLOSE 20 BLO 2$ TST R2 BNE 8$ MOV R4,R0 BEQ 7$ OINST MOV SP,@.EXTFL,,* OJSR PC,GETBLK BCC 7$ SUB R0,@SP 7$: OINST CLR @.EXTFL,,* MOV SP,R2 BR 1$ 8$: TST R4 BEQ 9$ OINST MOV SP,@.EXTFL,,* OJSR PC,PUTBLK BCC 9$ ADD R0,@SP 9$: OINST CLR @.EXTFL,,* .IF NE BF .SRESET .IFF OJSR PC,RSTSRS .ENDC RETURN 10$: OJSR PC,PUTBLK TSTB @#ERRBYT BPL 11$ OJMP BADFET 11$: OJMP BADHAN 12$: OJMP BADCOM 13$: KMEROR ,,WARN$ .ENDC OVERLAY .SBTTL LOAD .IF NE LOAD$$ SYNTAX LOAD PROMPT $DEVICE REQBLNK END SWITS LOAD ENDNO NOS ENDS OVCMD LOAD .IFTF .ENABL LSB .IFT ITBLE 0 OJSR PC,INITIT MOV R5,R2 MOV R5,R3 5$: MOVB -(R2),-(R3) BEQ OLOAD CMPB #,@R2 BNE 5$ TSTB (R3)+ BR 5$ OLOAD: OADDR DEVSTS,R2 OJSR PC,GETNAM OJSR PC,OPTCOL .ENDC OVCMD OL1 CALL MAPIT1 CLR FTEMP .IF NE BF .IF EQ SYT$K CLR R3 CMPB #<'=>,@R5 BNE 20$ BICB #40,-(R5) CMPB #<'B>,@R5 BEQ 10$ CMPB #<'F>,@R5 BNE IMSG3 TST (R3)+ 10$: INC R3 DEC R5 .IFF MOV #<-1>,R3 CMPB #<'=>,@R5 BNE 20$ MOV R2,-(SP) CALL CKLJN1 BNE 15$ DEC R5 MOV R5,R4 CLRB @R3 KMRTMG ,, 15$: MOV (SP)+,R2 .ENDC .ENDC 20$: MOV @R2,-(SP) OINST MOV @R2,INPFN,,* .DSTAT R2,R2 BCS IMSG1 TST 4(R2) BNE 50$ MOV (SP)+,@R2 MOV 2(R2),R0 MOV R2,-(SP) MOV R3,-(SP) MOV SP,@<.EXTFL-OVLY>-<.+4-OVLYST>(PC) OJSR PC,GETBLK MOV (SP)+,R3 BCC 25$ SUB R0,R5 SUB R0,2(SP) SUB R0,@SP 25$: .SERR MOV @SP,R0 .FETCH R4 BCS IMSG0 .HERR MOV R4,FTEMP CLR -(SP) MOV (R4)+,R2 BPL 40$ ASL R2 ADD R2,R4 MOV (R4)+,R2 BPL 35$ MOV (R4)+,@SP MOV @#SYSPTR,R2 CALL @GETVEC-$RMON(R2) BCS IMSG0X 30$: MOV (R4)+,R2 35$: ADD @SP,R2 40$: BLE 45$ MOV R4,-(SP) MOV #1,R4 MOV @#SYSPTR,R0 ADD #LOWMAP-$RMON,R0 OJSR PC,SETBT2 MOV (SP)+,R4 CMP (R4)+,(R4)+ BR 30$ 45$: TST (SP)+ MOV (SP)+,R2 BR 20$ IMSG3: OJMP BADCOM IMSG0X: TST (SP)+ MOV FTEMP,R4 IMSG0: OJSR PC,PUTBLK TSTB @#ERRBYT BPL IMSG1 OJMP BADFET IMSG1: OJMP BADHAN 50$: .IF NE BF CLR R1 OINST MOV .$ENTR,R0,* 55$: CMP 4(R2),(R0)+ BNE 60$ MOV @SP,R4 MOV R1,-(SP) OINST ADD .$PNAM,@SP,* SUB @(SP)+,R4 BEQ 65$ SUB #<^R 0>,R4 CMP R4,#7 BLOS 65$ 60$: TST (R1)+ CMP R1,#$SLOT*2 BLO 55$ MOV FTEMP,R4 BEQ IMSG3 OJSR PC,PUTBLK BR IMSG3 65$: MOV @#SYSPTR,R0 CMP R1,SYINDX-$RMON(R0) BNE 70$ TST R3 .IF NE SYT$K BMI 70$ .IFF BEQ 70$ .ENDC CMPB SYUNIT+1-$RMON(R0),R4 BEQ IMSG1 70$: .IF NE SYT$K INC R3 .ENDC BIT #FILST$!SPECL$,@R2 BEQ 75$ MOV #17,FTEMP CLC ROR R4 BCC ESRCH ASL R3 ASL R3 ASL R3 ASL R3 COMB FTEMP BR ESRCH 75$: TST R3 BEQ ESRCH .IF EQ SYT$K DEC R3 BEQ 80$ MOV #^B<0010001000100010>,R3 80$: ADD #^B<0001000100010001>,R3 .IFF MOV R3,R0 SWAB R0 BIS R0,R3 MOV R3,R0 ASL R3 ASL R3 ASL R3 ASL R3 BIS R0,R3 .ENDC ESRCH: CLR R1 OINST MOV .$ENTR,R0,* 85$: CMP 4(R2),(R0)+ BNE 100$ MOV R1,-(SP) OINST ADD .$OWNE,R1,* BIT #FILST$!SPECL$,@R2 BEQ 90$ ADD R4,R1 BICB FTEMP,@R1 BISB R3,@R1 BR 95$ 90$: MOV R3,(R1)+ MOV R3,@R1 95$: MOV (SP)+,R1 100$: CMP (R1)+,(R1)+ CMP R1,#$SLOT*4 BLO 85$ .ENDC TST (SP)+ CLR @<.EXTFL-OVLY>-<.+4-OVLYST>(PC) .IF NE LOAD$$ CMPB @R5,# BEQ 105$ .ENDC TSTB @R5 BNE IMSG3 RETURN .IF NE LOAD$$ 105$: CALLR OLOAD .ENDC .DSABL LSB FTEMP: .WORD 0 MAPIT1: MOV #$SLOT+3,R3 OINST MOV .$UNAM,R1,* 1$: DEC R3 BEQ 2$ CMP @R2,(R1)+ BNE 1$ MOV $UNAM1-$UNAM2-2(R1),@R2 2$: RETURN .IF NE SYT$K .ENABL LSB CKLJN1: MOV R5,(PC)+ R5STA1: .WORD 0 ADDR NBUFF1+6,R0 CLR -(R0) CLR -(R0) CLR -(R0) MOV R0,-(SP) MOV #6,R1 TSTB -(R5) BNE 10$ OJMP BADCOM 5$: TSTB -(R5) BEQ 15$ CMPB #COMMA,@R5 BEQ 15$ 10$: MOVB @R5,(R0)+ DEC R1 BNE 5$ DEC R5 MOV R5,R3 15$: MOV (SP)+,R0 MOV R5,-(SP) MOV @#SYSPTR,R5 ADD #$IMPUR-$RMON,R5 MOV R5,(PC)+ IMSTA1: .WORD 0 CLR R4 CALL FNDJOB-$IMPUR(R5) BEQ 20$ MOV R5,R4 SUB IMSTA1,R5 MOV R5,R3 BR 25$ 20$: MOV R5STA1,@SP 25$: MOV (SP)+,R5 TST R4 RETURN NBUFF1: .BLKW 3 .DSABL LSB .ENDC .IF NE UNLO$$!REMO$$ .IF NE REMO$$ OVERLAY .SBTTL REMOVE SYNTAX REMOVE PROMPT $DEVICE REQBLNK END SWITS REMOVE ENDNO NOS ENDS .ENABL LSB OVCMD REMOVE ITBLE 0 OJSR PC,INITIT OREMOV: MOV R5,R2 MOV R5,R3 5$: MOVB -(R2),-(R3) BEQ 15$ CMPB #<'a>,@R3 BHI 10$ CMPB #<'z>,@R3 BLO 10$ BICB #<40>,@R3 10$: CMPB #,@R2 BNE 5$ TSTB (R3)+ BR 5$ 15$: MOV R5,-(SP) .IF NE MMG$T CLR (PC)+ HNDREM: .WORD 0 .ENDC CLR (PC)+ CLNFLG: .WORD 0 ADDR NAME,R2 OJSR PC,GETNAM TST @R2 BEQ 45$ MOV R2,R0 OJSR PC,COPYFN TSTB @R5 BEQ 20$ CMPB #,@R5 BEQ 20$ CMPB #,@R5 BNE 45$ MOV SP,CLNFLG 20$: SUB R5,@SP TST CLNFLG BEQ 25$ CMPB #,-(R5) BEQ 25$ TSTB @R5 BNE 45$ 25$: CMP #<3>,(SP)+ .IF EQ MMG$T BNE 45$ .IFF BEQ 35$ TST CLNFLG BNE 45$ TST 2(R2) BNE 80$ CMP @R2,#<^RIND> BNE 80$ OINST TSTB @.INDSTA,,* BPL 80$ 30$: KMRTMG ,, .ENDC 35$: CMP @R2,#<^RSY > BEQ 105$ CMP @R2,#<^RBA > BEQ 105$ CMP @R2,#<^RTT > BEQ 105$ MOV #<$SLOT>,R3 OINST MOV .$PNAM,R1,* 40$: CMP @R2,(R1)+ BEQ 50$ DEC R3 BNE 40$ .IF EQ MMG$T KMRTMG ,, .IFF BR 80$ .ENDC 45$: OJMP BADCOM 50$: MOV @R2,-(SP) CLR @R2 OINST MOV .$UNAM,R4,* MOV #$SLOT+1,R3 55$: DEC R3 BEQ 60$ CMP #<^RSY >,(R4)+ BNE 55$ MOV $UNAM1-$UNAM2-2(R4),@R2 60$: CMP @SP,@R2 BEQ 105$ MOV SP,R4 CALL DVCHK BCS 105$ OADDR DEVSTS,R3 MOV (SP)+,@R2 .DSTAT R3,R2 BCS 65$ TST 4(R3) BNE 105$ 65$: MOV R2,R4 MOV #$SLOT,R3 OINST MOV .$UNAM,R2,* ADD #$UNAM1-$UNAM2,R2 MOV SP,@<.EXTFL-OVLY>-<.+4-OVLYST>(PC) 70$: CALL DVCHK BCC 75$ CLR $UNAM2-$UNAM1(R2) CLR (R2)+ 75$: DEC R3 BNE 70$ CLR -(R1) CLR $STAT-$PNAME(R1) CLR $DVREC-$PNAME(R1) .IF NE MMG$T MOV SP,HNDREM MOV #<^R$ >,NAME+2 80$: MOV @#SYSPTR,R4 JSR R5,(R4) NAME: .BLKW 2 BCC 85$ BNE 30$ TST HNDREM BNE 85$ KMRTMG ,, 85$: .ENDC CLR @<.EXTFL-OVLY>-<.+4-OVLYST>(PC) 90$: CMPB #,@R5 BNE 95$ TSTB -(R5) 95$: TSTB @R5 BEQ 100$ CALLR 15$ 100$: RETURN 105$: KMRTMG ,, .IF EQ MMG$T NAME: .BLKW 2 .ENDC .DSABL LSB DVCHK: MOV @R4,-(SP) CMP @R2,@SP BEQ 2$ ADD #<^R 0>,@SP CMP @SP,@R2 BHI 1$ ADD #'7-'0,@SP CMP @R2,@SP BLOS 2$ 1$: TST (PC)+ 2$: SEC MOV R2,(SP)+ RETURN .ENDC .IF NE UNLO$$ .SBTTL UNLOAD SYNTAX UNLOAD PROMPT $DEVICE REQBLNK END SWITS UNLOAD ENDNO NOS ENDS OVCMD UNLOAD ITBLE 0 OJSR PC,INITIT .ENABL LSB UNLDIN: .IF NE SYT$K MOV R5,(PC)+ ERPTR: .WORD 0 DEC ERPTR CALL CKLJN2 BEQ 5$ CALLR 110$ .ENDC 5$: OADDR DEVSTS,R2 OJSR PC,GETNAM BNE 10$ OJMP BADCOM 10$: OJSR PC,OPTCOL OINST MOV @R2,INPFN,,* MOV R5,-(SP) MOV @#SYSPTR,R5 .IF NE BF .IF EQ SYT$K MOV SP,(PC)+ FGRUN: .WORD 0 MOV FCNTXT-$RMON(R5),R4 BEQ 15$ MOV I.BLOK(R4),FGRUN BIC #^C,FGRUN 15$: CMP @R2,#<^RF > BNE 20$ TST FGRUN BEQ FJERR TST R4 BNE 110$ NOFERR: KMEROR FJERR: KMEROR .ENDC .ENDC 20$: MOV #<$SLOT+3>,R3 OINST MOV .$UNAM,R1,* 25$: DEC R3 BEQ 30$ CMP @R2,(R1)+ BNE 25$ MOV $UNAM1-$UNAM2-2(R1),@R2 30$: OINST MOV @R2,INPFN,,* CLC MOV R2,R0 OJSR R4,LK4DEV BR 100$ MOV @R5,R4 BEQ 80$ MOV @#SYSPTR,R1 BIS #,CONFG2-$RMON(R1) CLR R1 OINST MOV .$ENTR,R0,* 35$: CMP R4,@R0 BEQ 40$ CMP (R1)+,(R1)+ TST (R0)+ CMP R1,#<$SLOT*4> BLT 35$ 40$: MOV SP,@<.EXTFL-OVLY>-<.+4-OVLYST>(PC) .IF NE BF MOV R1,R2 OINST ADD .$OWNE,R2,* .IF EQ SYT$K TST FGRUN BNE 45$ MOV @R2,-(SP) BIS 2(R2),@SP BIT #<21042>,(SP)+ BNE FJERR .IFF CALL OWNRNM .ENDC .ENDC 45$: MOV R0,R3 MOV @#SYSPTR,R5 CMP R5,R4 BLOS 80$ MOV #<6>,R1 CALL DRCALL-$RMON(R5);Call the handler is required on UNLOAD BCC 50$ TST R0 BEQ 105$ .PRINT R0 BR 80$ 50$: CLR @R3 .IF NE BF CLR (R2)+ CLR @R2 .ENDC 55$: SUB #6,R4 CLR -(SP) MOV R4,R1 MOV (R1)+,R5 BPL 70$ ASL R5 ADD R5,R1 MOV (R1)+,R5 BPL 65$ MOV (R1)+,@SP MOV @#SYSPTR,R5 CALL @GETVEC-$RMON(R5) BCS 75$ 60$: MOV (R1)+,R5 65$: ADD @SP,R5 70$: BLE 75$ .IF NE BF MOV R5,-(SP) CLR -(SP) .UNPROT SP CMP (SP)+,(SP)+ .ENDC CLR (R5)+ CLR @R5 CMP (R1)+,(R1)+ BR 60$ 75$: TST (SP)+ OJSR PC,PUTBLK BCC 80$ ADD R0,@SP ADD R0,2(SP) 80$: MOV (SP)+,R5 85$: CLR @<.EXTFL-OVLY>-<.+4-OVLYST>(PC) CMPB @R5,# BNE 90$ CALLR UNLDIN 90$: TSTB @R5 BEQ 95$ OJMP BADCOM 95$: RETURN 100$: .IF EQ SYT$K OJMP BADHAN .IFF CLRB @(SP)+ MOV ERPTR,R4 CLRB @R3 KMRTMG ,, .ENDC 105$: KMEROR .IF NE BF 110$: MOV SP,@<.EXTFL-OVLY>-<.+4-OVLYST>(PC) .IF EQ SYT$K CLR FCNTXT-$RMON(R5) BIC #,CONFIG-$RMON(R5) .IFF MOV R4,R2 MOV @R4,R4 BIT #,I.BLOK(R4) BNE 115$ MOV R5,R3 MOV ERPTR,R5 MOV R5,R4 CLRB @R3 KMRTMG ,, 115$: CLR @R2 MOV R5,-(SP) .ENDC .IF NE ERL$G OJSR PC,ERLCHK BNE 120$ MOV @#SYSPTR,R5 CLR $ELHND-$RMON(R5) 120$: .ENDC OJSR PC,PUTBLK BCC 125$ ADD R0,2(SP) ADD R0,@SP 125$: .IF NE SYT$K MOV #,R3 MOV @#SYSPTR,R5 ADD #<$IMPUR-$RMON+MXJBNM+2>,R5 130$: TST -(R5) BNE 80$ SUB #<2>,R3 BNE 130$ BIC #,(R5) .ENDC BR 80$ .ENDC .DSABL LSB .IF NE SYT$K .ENABL LSB CKLJN2: MOV R5,(PC)+ R5STA2: .WORD 0 ADDR NBUFF2+6,R0 CLR -(R0) CLR -(R0) CLR -(R0) MOV R0,-(SP) MOV #6,R1 TSTB -1(R5) BEQ 15$ 5$: TSTB -1(R5) BEQ 25$ 10$: OJSR PC,ALPHNT BCS 20$ CMPB @R5,# BEQ 30$ CLR R4 CMPB @R5,#': BEQ 35$ 15$: OJMP BADCOM 20$: MOVB @R5,(R0)+ DEC R1 BNE 5$ 25$: DEC R5 30$: MOV R5,R3 MOV (SP)+,R0 MOV R5,-(SP) MOV @#SYSPTR,R5 ADD #$IMPUR-$RMON,R5 MOV R5,(PC)+ IMSTA2: .WORD 0 CLR R4 CALL FNDJOB-$IMPUR(R5) BEQ 35$ MOV R5,R4 SUB IMSTA2,R5 MOV R5,R3 BR 40$ 35$: MOV R5STA2,@SP 40$: MOV (SP)+,R5 TST R4 RETURN NBUFF2: .BLKW 3 .DSABL LSB OWNRNM: MOV R3,-(SP) MOV R5,-(SP) MOV #4,R3 1$: MOVB @R2,R5 CALL 3$ MOVB (R2)+,R5 ASRB R5 ASRB R5 ASRB R5 ASRB R5 CALL 3$ DEC R3 BNE 1$ CMP -(R2),-(R2) MOV (SP)+,R5 MOV (SP)+,R3 2$: RETURN 3$: BIT #1,R5 BEQ 2$ BIC #^C<16>,R5 BEQ 2$ ADD @#SYSPTR,R5 MOV $IMPUR-$RMON(R5),R5 BEQ 2$ BIT #NORUN$,I.BLOK(R5) BNE 2$ KMRTMG .ENDC .ENDC .ENDC .IF NE FRUN$$!SRUN$$ .SBTTL FRUN/SRUN PART 1 OVERLAY SYNTAX SRUN PROMPT $FILE SCALL GSWIT,<1> REQBLNK ROUTINE FSP SCALL RINSPC,<1> END SWITS SRUN ENDNO SWIT PAUSE 1 - - PAU SWIT TERMINAL 1 - - TTY SWIT BUFFER 1 - - BUF SWIT NAME 1 - - NAM SWIT LEVEL 1 - - LEV NOS ENDS STA = 40 STK = 42 RSZ = 52 FRJSTK = 54 OSZ = 56 RID = 60 RBD = 62 FJOBNM = FJOBS*2 MXJBNM = FJOBNM OFLEV = FSIZ OFPSW = OFLEV+2 OFLJN = OFPSW+2 OFBUF = OFLJN+6 OFTTY = OFBUF+2 OFTCB = OFTTY+2 .ENABL LSB .IF NE FRUN$$ OVCMD FRUN MOV #FJOBNM,(PC)+ .ENDC JLVL: .WORD 0 .IF NE SYT$K BR FSRUN .IF NE SRUN$$ OVCMD SRUN CLR JLVL .ENDC .ENDC FSRUN: MOV #FSIZ,R2 OADDR FILST+OFLEV,R3 .IF NE SYT$K MOV R3,-(SP) .ENDC 1$: CLR (R3)+ DEC R2 BNE 1$ ITBLE 1 OJSR PC,INITIT MOV @#SYSPTR,R5 .IF NE SYT$K MOV (SP)+,R0 ADD #OFLJN-OFLEV,R0 TST @R0 BNE 2$ SUB #FSIZ,R0 2$: CALL FNDJOB-$RMON(R5) BEQ 3$ BIT #NORUN$,I.BLOK(R2) BEQ BADNAM CALL DEADJB 3$: MOV @#SYSPTR,R5 MOV JLVL,R3 BNE 5$ MOV #MXJBNM,R3 ADD #<$IMPUR-$RMON+MXJBNM>,R5 4$: SUB #2,R3 BEQ MAXACT TST -(R5) BEQ 7$ MOV @R5,R2 BIT #NORUN$,I.BLOK(R2) BNE 6$ BR 4$ 5$: ADD R3,R5 ADD #<$IMPUR-$RMON>,R5 .IFF MOV #FJOBNM,R3 ADD #,R5 .ENDC TST @R5 BEQ 7$ MOV @R5,R2 BIT #NORUN$,I.BLOK(R2) BNE 6$ .IF NE SYT$K CMP #FJOBNM,R3 BNE BADLVL .ENDC KMEROR 6$: CALL DEADJB 7$: MOV R5SAV,R5 MOV R3,-(SP) ..FRDK == .+2 MOV #<^RDK >,R3 .IF NE SYT$K CMP #FJOBNM,@SP BEQ 8$ ..SRDK == .+2 MOV #<^RSY >,R3 OJSR PC,SFILE BR 9$ 8$: .ENDC OJSR PC,RFILE 9$: OADDR FILST+OFLEV,R4 MOV (SP)+,@R4 .IF NE MTT$Y ADD #OFTTY-OFLEV,R4 MOV (R4)+,R2 MOV @#SYSPTR,R0 MOV BKCNSL-$RMON(R0),@R4 MOV (R4)+,@R4 TST R2 BEQ 10$ COM R2 ADD #TCBLST-$RMON,R0 ADD R2,R0 MOV @R0,R0 BEQ ILLUN TST T.CSR(R0) BEQ ILLUN TST T.OWNR(R0) BNE ILLUN BIT #CONSL$,T.STAT(R0) BNE ILLUN MOV R0,@R4 10$: .ENDC MOV R5SAV,R5 MOV R3,R0 OJMP FSGHAR OVCMD FSR2 MOV (SP)+,R0 OJSR PC,COPYFN .LOOKUP CHOVLY BCC 11$ OJMP NOTFND 11$: OINST CLR @.BLKEY,,* OVLINK FSRU2 BDCMND: OJMP BADCOM ILLUN: KMEROR .IF NE SYT$K BADNAM: KMEROR BADLVL: KMEROR MAXACT: KMEROR .ENDC .DSABL LSB .SBTTL FRUN/SRUN PART 3 .ENABL LSB OVCMD STRTPG MOV (SP)+,R4 MOV @#SYSPTR,R3 .IF NE MTT$Y OADDR FILST+OFTTY,R2 MOV (R2)+,R1 BEQ 5$ COM R1 ASR R1 BR 10$ 5$: MOV BKGND+I.CLUN-$RMON(R3),R1 10$: MOV R1,I.CLUN(R4) MOV (R2)+,R0 MOV @R2,R1 MOV R1,I.CNSL(R4) CMP R0,R1 BEQ 15$ BIS #CONSL$,T.STAT(R1) MOV R4,T.OWNR(R1) .IF NE SYT$K DEC T.CNT(R0) CMP #1,T.CNT(R0) BNE 15$ .ENDC MOV BCNTXT-$RMON(R3),T.OWNR(R0) BIC #SHARE$,T.STAT(R0) 15$: BIC #^C,I.TERM(R4) BIC #,@R1 BIS @R1,I.TERM(R4) .ENDC BIS #FJOB$,CONFIG-$RMON(R3) MOV R3,R2 .IF NE MMG$T MOV @SP,R5 ADD R3,R5 CLR SCCATB-$RMON(R5);Clear possible old value in SCCA table .ENDC MOV (SP)+,R5 ADD R5,R2 ASL R5 ADD R5,R3 MOV (SP)+,$JBLIM+2-$RMON(R3) MOV (SP)+,$JBLIM-$RMON(R3) MOV R4,R3 ADD #I.JID,R3 MOV (PC)+,(R3)+ .ASCII .IF NE SYT$K OADDR FILST+OFLEV,R5 MOV @R5,R1 ADD #OFLJN-OFLEV,R5 TST @R5 BNE 20$ SUB #FSIZ,R5 20$: MOV R5,-(SP) CMP #FJOBNM,R1 BEQ 35$ MOV #6,R1 25$: MOVB (R5)+,(R3)+ TSTB @R5 BEQ 30$ DEC R1 BNE 25$ 30$: MOVB #'>,(R3)+ MOVB #CR,(R3)+ MOVB #LF,(R3)+ CLRB @R3 BR 40$ 35$: .ENDC MOV (PC)+,(R3)+ .ASCII "F>" MOV (PC)+,(R3)+ .ASCII CLR @R3 .IF NE SYT$K 40$: MOV (SP)+,R5 MOV R4,R3 ADD #I.LNAM,R3 MOV #<6>,R1 45$: MOVB (R5)+,@R3 CMPB #<'a>,@R3 BHI 50$ CMPB #<'z>,@R3 BLO 50$ BICB #<40>,@R3 50$: TSTB (R3)+ DEC R1 BNE 45$ .ENDC MOV @#SYSPTR,R3 MOV (SP)+,R1 BIT #WINDW$,@R4 BEQ 55$ MOV R3,SYSPTR(R1) TST V.EMT(R1) BNE 55$ MOV @#V.EMT,V.EMT(R1) 55$: TST (SP)+ BNE 60$ MOV R4,$IMPUR-$RMON(R2) CLR @<.EXTFL-OVLY>-<.+4-OVLYST>(PC) .IF NE ERL$G CALL ERLOAD .ENDC MOVB #MXJBNM/2+200,INTACT-$RMON(R3) .EXIT 60$: BIS #KSPND$,I.BLOK(R4) MOV R4,$IMPUR-$RMON(R2) CLR @<.EXTFL-OVLY>-<.+4-OVLYST>(PC) .IF NE ERL$G CALL ERLOAD .ENDC JSR R0,65$ .NLIST BEX .ASCII "Loaded at "<200> .LIST BEX .EVEN 65$: TST (SP)+ .PRINT MOV #30,R0 SEC 70$: ROL R1 ROLB R0 .TTYOUT MOV #206,R0 75$: ASL R1 BEQ 80$ ROLB R0 BCS 75$ BR 70$ 80$: OJMP KCRLF .DSABL LSB .IF NE ERL$G ERLOAD: OJSR PC,ERLCHK BNE 1$ MOV R4,$ELIMP-$RMON(R3) MOV @R1,$ELHND-$RMON(R3) 1$: RETURN .ENDC DEADJB: MOV SP,@<.EXTFL-OVLY>-<.+4-OVLYST>(PC) MOV R2,R4 .IF NE ERL$G OJSR PC,ERLCHK BNE 1$ MOV @#SYSPTR,R2 CLR $ELHND-$RMON(R2) 1$: .ENDC CLR @R5 MOV R3,-(SP) OJSR PC,PUTBLK MOV (SP)+,R3 BCC 2$ ADD R0,R5SAV ADD R0,@SP ADD R0,2(SP) 2$: CLR @<.EXTFL-OVLY>-<.+4-OVLYST>(PC) RETURN OVAFSP: MOV R5,(PC)+ R5SAV: .WORD 0 RETURN OVANAM: .IF EQ SYT$K BR BDSWIT .IFF CMPB #':,@R5 BNE BDSWCH OADDR FILST+OFLJN,R2 MOV R2,-(SP) MOV #6,R3 1$: OJSR PC,ALPHNT BCC BDNAM MOVB @R5,(R2)+ DEC R3 BEQ 2$ TSTB -(R5) BEQ 3$ CMPB #SLASH,@R5 BEQ 3$ CMPB #SPACE,(R5)+ BNE 1$ 2$: DEC R5 3$: MOV (SP)+,R2 CMP #'F,@R2 BEQ BDNAM CMP #'B,@R2 BEQ BDNAM RETURN .ENDC OVALEV: .IF EQ SYT$K BR BDSWIT .IFF CMP #FJOBNM,JLVL BEQ BDSWIT CMPB #':,@R5 BNE BDSWCH CALL SWVAL TST @SP BLE BDLVL CMP #MXJBNM,@SP BLE BDLVL MOV (SP)+,JLVL RETURN .ENDC OVABUF: CMPB #':,@R5 BNE BDSWCH CALL SWVAL OINST MOV (SP)+,FILST+OFBUF,,* RETURN OVAPAU: OINST INC FILST+OFPSW,,* RETURN OVATTY: .IF NE MTT$Y CMPB #':,@R5 BNE BDSWCH CALL SWVAL CMP @SP,#TCBMAX*2 BGE BDSWCH OADDR FILST+OFTTY,R2 MOV (SP)+,@R2 COM @R2 RETURN .ENDC BDSWCH: OJMP BADCOM BDSWIT: OJMP ILSWIT .IF NE SYT$K BDNAM: CALLR BADNAM BDLVL: CALLR BADLVL .ENDC SWVAL: MOV @SP,-(SP) MOV R5,-(SP) OJSR PC,DECNUM DEC R5 CMPB 1(R5),#PERIOD BEQ 1$ TST (SP)+ MOV @SP,R5 OJSR PC,OCTNUM 1$: MOV (SP)+,@SP BCS BDSWCH ASL @SP MOV (SP)+,2(SP) RETURN .IRP NUM,<\$OPTX> OPTX'NUM:: .ENDR .BYTE -1 .DSABL CRF $SCNT=0 SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT .EVEN .ENABL CRF NEXTL .SBTTL FRUN/SRUN (PART 2) OVERLAY OVCMD FSRU2 .ENABL LSB OINST MOV FILST+OFLEV,(PC)+,* NWJBNM: .WORD 0 OINST MOV FILST+OFLEV+2,-(SP),* OINST MOV FILST+OFLEV+12,(PC)+,* NVAL: .WORD 0 OINST MOV .USRBU,RELBUF,* CALL RDBUF MOV R4,R5 .IF NE MMG$T OINST MOV 66(R4),$VLY,,* BEQ 1$ OINST MOV 64(R4),$VLY,,* 1$: .ENDC MOV R5,R3 ADD #RSZ,R3 MOV (R3)+,R4 .IF EQ MMG$T MOV JSW(R5),OVFLG BIC #^C,(PC)+ OVFLG: .WORD 0 .IFF MOV JSW(R5),-(SP) MOV @SP,OVFLG BIC #^C,(PC)+ OVFLG: .WORD 0 BIT #VIRT$,(SP)+ BEQ 2$ CLR @R3 ADD #1000,R4 CLR NVFLG 2$: .ENDC MOV (R3)+,R0 TST (R3)+ MOV #FMPUR,R2 MOV STK(R5),-(SP) SUB (PC)+,@SP NVFLG: .WORD 1000 .IF EQ MMG$T BNE 4$ .IFF BEQ 3$ TST NVFLG BEQ 4$ ADD R2,@SP BR 4$ 3$: .ENDC ADD R0,R2 4$: MOV R2,-(SP) MOV R2,R1 SUB NVFLG,R1 MOV R1,FBASE CMP #<^RREL>,(R3)+ BEQ 6$ .IF NE MMG$T TST NVFLG BEQ 5$ .ENDC KMRTMG ,,PFILE .IF NE MMG$T 5$: MOV USERTOP(R5),R4 ADD #2,R4 CLR @R3 CMP #<^RVIR>,@R5 BNE 6$ CLR NVAL MOV VIRTOP(R5),(PC)+ VHGH: .WORD 0 .ENDC 6$: MOV @R3,RELBLK ADD R4,R2 ROR R4 MOV R4,OVSIZ MOV R2,-(SP) ADD OVSZ(R5),R2 MOV NVAL,R0 ADD R2,R0 .IF NE MMG$T TST NVFLG BNE 7$ MOV #77,R3 MOV R0,R1 SUB #FMPUR,R1 ADD R3,R1 BIC R3,R1 MOV R1,(PC)+ PVSIZ: .WORD 0 ADD #177,R0 BIC R3,R0 ADD #100,@SP 7$: .ENDC MOV SP,@<.EXTFL-OVLY>-<.+4-OVLYST>(PC) OJSR PC,GETBLK BCC 8$ SUB R0,R5 SUB R0,10(SP) SUB R0,RELBUF 8$: .IF NE MMG$T MOV R4,R0 ADD #FMPUR,R0 ADD #77,R0 BIC #77,R0 MOV R0,STOVL ADD PVSIZ,R0 MOV R0,(PC)+ RHLIM: .WORD 0 .ENDC MOV #FMPUR/2,R0 MOV R4,R1 9$: CLR (R1)+ DEC R0 BNE 9$ ADD R4,FBASE ADD R4,@SP MOV (SP)+,(PC)+ FRJOOF: .WORD 0 MOV (SP)+,R0 MOV (SP)+,R1 BNE 10$ MOV R0,R1 10$: .IF EQ MMG$T ADD R4,R1 MOV R1,R3 .IFF TST NVFLG BNE 11$ BIS #WINDW$,@R4 SUB #FMPUR,R2 MOV VHGH,I.VHI(R4) CLR FBASE CLR R0 BR 12$ 11$: ADD R4,R1 .ENDC ADD R4,R2 ADD R4,R0 MOV R0,STOVL SUB NVFLG,R0 12$: MOV STOVL,-(SP) MOV R1,-(SP) 13$: MOV R5,R1 .IF EQ MMG$T ADD #V.TRAP,R1 CLR -(R3) MOV STA(R5),-(R3) ADD R0,@R3 SUB #6*2,R3 .IFF ADD #V.MMU,R1 MOV R4,R3 ADD #I.RSAV+4,R3 MOV STA(R5),-(R3) ADD R0,@R3 MOV #CMODE,-(R3) MOV #200,-(R3) CALL MOVVEC ADD #V.BPT-,R1 CALL MOVVC2 ADD #V.TRAP-,R1 MOV @SP,I.SP(R4) MOV @SP,I.SPSV(R4) .ENDC CALL MOVVC2 MOV (SP)+,@R3 MOV (R1)+,-(R3) .IF NE MTT$Y MOV @R3,I.TERM(R4) .ENDC CALL MOVVEC MOV R2,@R3 SUB #2,@R3 MOV R2,-(SP) ADD NVAL,@SP CLR -(R3) .IF NE MTT$Y OADDR FILST+OFTCB+2,R2 MOV @R2,R2 MOV T.TFIL(R2),-(R3) .ENDC .IF EQ MMG$T MOV R3,I.SP(R4) .ENDC .DSABL LSB .ENABL LSB MOV R4,(PC)+ STMPUR: .WORD 0 ADDR IMPINI,R1 1$: MOV (R1)+,R2 ADD R4,R2 MOV (R1)+,@R2 ADD R4,@R2 TST @R1 BNE 1$ MOV NWJBNM,I.JNUM(R4) MOV #FCHNM,I.CNUM(R4) ADD #+IMPSIZ-I.CSW,R2 MOV R2,R0 MOV #$CSW+-$RMON,R1 ADD @#SYSPTR,R1 .REPT CHNWDS MOV (R1)+,(R2)+ .ENDR TST OVFLG BNE 2$ CLR @R0 2$: MOV R2,-(SP) .IF NE MMG$T ADD #I.WNUM->,R2 MOV #W.NNUM,(R2)+ TST NVFLG BNE 4$ CLR @SP MOV R4,R0 ADD #I.RGN,R0 MOV R0,(R2)+ CLR (R0)+ MOV RHLIM,R1 ASHC #-6,R1 MOV R1,(R0)+ MOV #400,@R0 CLR (R2)+ MOV PVSIZ,R1 MOV R1,(R2)+ ASHC #-6,R1 MOV R1,(R2)+ MOV R1,R0 MOV STOVL,R1 ASHC #-6,R1 MOV R1,(R2)+ MOV #200,(R2)+ 3$: INCB -1(R2) SUB #200,R0 BGT 3$ SWAB R0 CLRB R0 ADD #77406,R0 MOV R0,@R2 4$: OINST TST $VLY,,* BEQ 6$ OJSR PC,$VRAW MOV R4,R1 ADD #,R1 MOV @#SYSPTR,R0 ADD #BKGND+I.RGN+R.BLGH-$RMON,R0 MOV #3,R2 5$: MOV @R0,(R1)+ CLR (R0)+ DEC R2 BNE 5$ 6$: .ENDC OINST MOV @.CNTXT,R1,* .IF NE SYT$K CMP #FJOBNM,I.JNUM(R4) BNE 7$ .ENDC MOV I.MSG(R1),I.MSG(R4) 7$: MOV #I.NAME,R2 ADD R2,R1 ADD R4,R2 .REPT 4 MOV (R1)+,(R2)+ .ENDR .DSABL LSB .ENABL LSB ADDR OVBK,R0 MOV R0,-(SP) .IF NE MMG$T TST NVFLG BEQ 1$ .ENDC INC @R0 1$: MOV #10*400+CHOVLY,-(R0) EMT 375 BCS FRERR RELSET: MOV (PC)+,R1 FBASE: .WORD 0 MOV STOVL,R4 .IF NE MMG$T TST NVFLG BNE 2$ MOV (PC)+,(R4)+ BIC R0,R0 MOV (PC)+,(R4)+ .ASTX ADD #1000-4,R4 TST RELBLK BEQ 6$ 2$: .ENDC MOV R4,(PC)+ SAVLOD: .WORD 0 CLR R5 RLROOT: MOV SAVLOD,STOVL CALL RELSEG MOV FRJOOF,STOVL 3$: TST FLG2 BNE 6$ CALL GET2WD MOV @SP,R0 MOV R3,@R0 MOV R2,OVSIZ BEQ RLROOT MOV #10*400+CHOVLY,-(R0) EMT 375 BCS FRERR CALL RELSEG MOV @SP,R0 MOV #11*400+CHOVLY,-(R0) EMT 375 BCC 3$ MOV 2(SP),R4 BEQ 4$ OJSR PC,PUTBLK 4$: KMRTMG ,,PFILE FRERR: MOV 2(SP),R4 BEQ 5$ OJSR PC,PUTBLK 5$: OJMP FIPERR 6$: MOV NWJBNM,@SP MOV STMPUR,-(SP) OVLINK STRTPG .DSABL LSB .ENABL LSB 1$: SUB R1,@R0 RELSEG: CALL GET2WD BCS 2$ MOV R3,R0 ASL R0 ADD STOVL,R0 MOV R2,@R0 ASL R3 BCS 1$ ADD R1,@R0 BR RELSEG RDBUF: ADDR RLIOBK,R0 EMT 375 BCS FRERR ADD #2,RELBLK MOV RELBUF,R4 MOV R4,R5 ASL R0 ADD R0,R5 2$: RETURN .DSABL LSB GET2WD: CALL 1$ BCS 3$ MOV R2,R3 1$: CMP R4,R5 BLO 2$ CALL RDBUF 2$: MOV (R4)+,R2 CMP #-2,R2 BNE 3$ INC FLG2 SEC 3$: RETURN MOVVC2: MOV PC,-(SP) MOVVEC: MOV (R1)+,-(R3) BEQ 10$ ADD R0,@R3 10$: MOV (R1)+,-(R3) .IF NE MMG$T BIS #CMODE,@R3 .ENDC RETURN IMPINI: .WORD I.QHDR,I.QUE .WORD I.TID, I.JID .WORD I.SCHP,I.SYCH .WORD I.IRNG,I.ITOP+2 .WORD I.IPUT,I.ITOP+2 .WORD I.IGET,I.ITOP+2 .WORD I.ITOP,I.ITOP+2+TTYIN .WORD I.OPUT,I.OTOP+2 .WORD I.OGET,I.OTOP+2 .WORD I.OTOP,I.OTOP+2+TTYOUT .IF NE MMG$T .IF NE FPU$11 .WORD I.FPSA,I.FSAV .ENDC .WORD I.WPTR,I.WNUM .ENDC .WORD I.CSW, IMPSIZ .WORD 0 RLIOBK: .BYTE CHOVLY,10 RELBLK: .WORD 0 RELBUF: .WORD 0,1000,0 OVIOBK: .BYTE CHOVLY,10 OVBK: .WORD 0 STOVL: .WORD 0 OVSIZ: .WORD 0 .WORD 0 FLG2: .WORD 0 .ENDC $$$EDIT = 0 $$$FORT = 1 $$$WILD = 2 .IF NE SET$$ OVERLAY .SBTTL SET OVCMD SET .ENABL LSB MOV @#SYSPTR,R0 .IF EQ MTT$Y .IF NE BF MOV TTCNFG-$RMON(R0),SET58$ MOVB TTWIDTH-$RMON(R0),SET59$ .ENDC .IFF MOV BKCNSL-$RMON(R0),R4 MOV @R4,SET58$ MOV T.WID(R4),SET59$ .ENDC .IF EQ MMG$T MOV CONFIG-$RMON(R0),R2 BIC #^C,R2 MOV R2,SET62$ .ENDC MOV CONFG2-$RMON(R0),R2 BIC #^C,R2 MOV R2,SET63$ CALL 33$ ADDR SETMOF,R1 1$: CMP @R2,(R1)+ BEQ 2$ TST @R1 BEQ 4$ ADD @R1,R1 BR 1$ 2$: CALL 33$ TST (R1)+ ADD @R1,R0 3$: TST (R1)+ TST @R1 BEQ 5$ CMP (R1)+,@R2 BNE 3$ MOVB @R1,@R0 RETURN 4$: CLR (PC)+ UNUM: .WORD 0 CMP #<^RTER>,@R2 BEQ 11$ ADDR SETKMO,R4 CMP #<^RKMO>,@R2 BEQ 13$ ADD #SETXIT-SETKMO,R4 CMP #<^REXI>,@R2 BEQ 13$ TST 2(R2) BNE 5$ ADD #SETUSR-SETXIT,R4 CMP @R2,#<^RUSR> BEQ 13$ .BR NXTINS NXTINS: ROR UNUM MOV @R2,R0 MOV #120000,R1 BR 8$ 7$: CLC ROR R1 8$: SUB R1,R0 BHI 9$ BEQ 10$ ADD R1,R0 9$: CMP R1,#120 BHIS 7$ CMP R0,#36 BLO 5$ CMP R0,#45 BHI 5$ SUB R0,@R2 SUB #36,R0 MOV R0,UNUM 10$: JSR R4,36$ .WORD ': CMP @R2,#<^RTT > BNE 12$ 11$: ADDR SETTTY,R4 BR 13$ 12$: MOV @#SYSPTR,R0 ADD HSUFFX-$RMON(R0),@R2 MOV #<^RSY >,-(R2) MOV #<^RSYS>,6(R2) MOV #3*400+CHOVLY,R0 EMT 374 MOV R2,R0 OJSR PC,COPYFN .LOOKUP CHOVLY,R2 BCS 27$ OINST MOV .USRBUF,R4,* CLR @<.BLKEY-OVLY>-<.+4-OVLYST>(PC) CLR R0 .READW CHOVLY,R4,#512. BCS 29$ ADD #400,R4 13$: MOVB -(R5),R0 SWAB R0 CLRB R0 BISB -(R5),R0 BIC #20040,R0 SUB #"ON,R0 BEQ 14$ CMPB (R5)+,(R5)+ BR 15$ 14$: CALL 35$ 15$: CALL 33$ MOV R4,R1 BR 18$ 5$: BR 555$ 16$: TST (R1)+ 17$: CMP (R1)+,-(R2) 18$: MOV (R1)+,R3 BEQ 30$ CMP (R2)+,(R1)+ BNE 16$ CMP @R2,(R1)+ BNE 17$ MOV R4,R2 MOV @R1,R1 BMI 19$ TST R0 BEQ 30$ 19$: TST R0 BNE 20$ CMP (R2)+,(R2)+ 20$: ASL R1 BPL 25$ JSR R4,36$ .WORD '= 21$: MOV R5,R0 DEC R0 ASL R1 SEC BPL 22$ CLC 22$: OJSR PC,CVTNUM CMP R5,R0 BEQ 30$ ASR R1 CMPB @R5,#PERIOD BNE 24$ BIT #40000,R1 BEQ 23$ BIC #40000,R1 MOV R0,R5 INC R5 TST (SP)+ BR 21$ 23$: DEC R5 24$: MOV (SP)+,R0 CALL 34$ 25$: BIC #140000,R1 ADD R1,R2 MOV UNUM,R1 CALL @R2 BR 251$ BR 261$ 251$: BCS 555$ OINST CMP .USRBUF,R4,* BHI 31$ MOV R4,-(SP) OINST MOV .USRBUF,R4,* CLR R0 .WRITW CHOVLY,R4,#512. MOV (SP)+,R4 261$: BCC 328$ KMRTMG ,UNCON$,PFILE 328$: TSTB -1(R5) BEQ 28$ JSR R4,36$ .WORD ', BR 13$ 555$: OJMP BADCOM 27$: OJMP NOTFND 29$: OJMP FIPERR 30$: KMEROR 31$: MOV @#SYSPTR,R0 .IF EQ MMG$T BIC #USR$,CONFIG-$RMON(R0) BIS SET62$,CONFIG-$RMON(R0) .ENDC BIC #,CONFG2-$RMON(R0) BIS SET63$,CONFG2-$RMON(R0) .IF EQ MTT$Y .IF NE BF MOV SET58$,TTCNFG-$RMON(R0) MOVB SET59$,TTWIDT-$RMON(R0) ADD #LISTFB-$RMON,R0 MOV #100000,R1 BIT #FBTTY$,SET58$ BNE 32$ BIS R1,(R0)+ BIS R1,(R0)+ .IF NE SYT$K BIS R1,(R0)+ .ENDC RETURN 32$: BIC R1,(R0)+ BIC R1,(R0)+ .IF NE SYT$K BIC R1,(R0)+ .ENDC .ENDC .IFF MOV BKCNSL-$RMON(R0),R1 MOV SET58$,@R1 MOV SET59$,T.WID(R1) .ENDC 28$: RETURN 33$: OADDR DEVSTS+2,R2 MOV R0,-(SP) OJSR PC,GETNAM BEQ 555$ MOV (SP)+,R0 34$: INC R5 35$: CMPB -(R5),# BEQ 35$ INC R5 RETURN 36$: CMPB (R4)+,-(R5) BNE 38$ 37$: CMPB -(R5),# BEQ 37$ 38$: CMPB (R4)+,(R5)+ RTS R4 .DSABL LSB .ENABL LSB SETUSR: .WORD USR$ .RAD50 /SWAP / .WORD <1$-SETUSR>/2+100000 .WORD 0 1$: .IF EQ MMG$T CLR R3 NOP MOV R3,(PC)+ SET62$: .WORD 0 RETURN .IFF SEC RETURN RETURN .ENDC SETXIT: .WORD XITSW$ .RAD50 /SWAP / .WORD <2$-SETXIT>/2+100000 .WORD 0 2$: CLR R3 NOP MOV R3,(PC)+ SET63$: .WORD 0 RETURN SETKMO: 5$: .WORD IFIND .RAD50 /IND / .WORD /2+100000 .WORD 0 SETTTY: 3$: .WORD IFEKO$ .RAD50 /QUIET / .WORD /2+100000 .WORD '\ .RAD50 /HOLD / .WORD /2+100000 .IF NE MTT$Y .WORD TCBMAX .RAD50 /CONSOL/ .WORD /2+40000 .ENDC .IF NE BF .WORD FBTTY$ .RAD50 /FB / .WORD /2+100000 .ENDC .IF NE BF!MTT$Y .WORD HWTAB$ .RAD50 /TAB / .WORD /2+100000 .WORD VT05$ .RAD50 /SCOPE / .WORD /2+100000 .WORD FORM$ .RAD50 /FORM / .WORD /2+100000 .WORD CRLF$ .RAD50 /CRLF / .WORD /2+100000 .WORD PAGE$ .RAD50 /PAGE / .WORD /2+100000 .WORD 30. .RAD50 /WIDTH / .WORD /2+40000 .IFF .WORD NOSCOP-SCOP .RAD50 /SCOPE / .WORD /2+100000 .ENDC .DSABL LSB SETATS: SETTTQ: BR 1$ NOP BIC R3,@<.STATWD-OVLY>-<.+4-OVLYST>(PC) RETURN 1$: BIS R3,@<.STATWD-OVLY>-<.+4-OVLYST>(PC) RETURN SETTTH: DEC R3 NOP MOVB R3,2$ ADDR 1$,R0 .PRINT RETURN 1$: .BYTE 33 2$: .BYTE 0 .BYTE 0 .EVEN .IF NE MTT$Y .ENABL LSB SETCON: MOV R0,-(SP) CMP R0,R3 BHIS 6$ MOV @#SYSPTR,R2 ASL R0 ADD R2,R0 MOV TCBLST-$RMON(R0),R0 TST T.CSR(R0) BEQ 6$ ..CRMT == .+2 BIT #REMOT$,@R0 BNE 7$ ADD #BKCNSL-$RMON,R2 MOV @R2,R3 CMP R0,R3 BEQ 4$ .IF NE BF TST T.STAT(R0) BMI 6$ .ASSUME CONSL$ EQ 100000 TST T.OWNR(R0) BNE 6$ 1$: TSTB I.OCTR-I.CNSL(R2) BNE 1$ OSPL 7 .IFF 2$: TSTB T.OCTR(R3) BNE 2$ OINTOF 5$ .ENDC MOV R0,@R2 MOV @#SYSPTR,R0 ADD #$TCFIG-$RMON,R0;* -> off. containing addr of T.CNFG of term MOV @R2,@R0 MOV @R2,R0 MOV @SP,I.CLUN-I.CNSL(R2) BIS #,@R0 MOV @R0,SET58$ MOV T.WID(R0),SET59$ MOV T.STAT(R3),R1 BIC #^C,R1 BIC R1,T.STAT(R3) BIS R1,T.STAT(R0) MOV T.TFIL(R0),@#TTFILL MOV T.OWNR(R3),T.OWNR(R0) CLR T.OWNR(R3) .IF NE BF .IF EQ SYT$K MOV FCNTXT-BKCNSL(R2),R3 BEQ 4$ ASL R1 BEQ 4$ .ASSUME CONSL$ EQ 100000 .ASSUME SHARE$ NE 100000 MOV R0,I.CNSL(R3) MOV @SP,I.CLUN(R3) .IFF MOV T.CNT(R3),T.CNT(R0) CLR T.CNT(R3) ASL R1 BEQ 4$ .ASSUME CONSL$ EQ 100000 .ASSUME SHARE$ NE 100000 ADD #$IMPUR+MXJBNM+2-BKCNSL,R2 3$: MOV -(R2),R1 BEQ 3$ INC R1 BEQ 4$ CMP I.CNSL-1(R1),R3 BNE 3$ MOV R0,I.CNSL-1(R1) MOV @SP,I.CLUN-1(R1) BR 3$ .ENDC .ENDC 4$: TST (SP)+ .IF NE BF OSPL 0 RETURN .IFF MOV @SP,-(SP) CLR 2(SP) 5$: RTI .ENDC 6$: KMEROR 7$: KMEROR .DSABL LSB .ENDC .IF NE BF!MTT$Y .ENABL LSB SETTTS: BR 1$ NOP BIC R3,(PC)+ SET58$: .WORD 0 RETURN 1$: BIS R3,SET58$ RETURN SETTTW: MOVB R0,(PC)+ SET59$: .WORD 0 CMPB R0,R3 RETURN .DSABL LSB .IFF .ENABL LSB SETSCO: CLR R3 NOP ADDR SCOP,R3,ADD MOV @#SYSPTR,R1 ADD #SCOP$2-$RMON,R1 1$: MOV (R3)+,(R1)+ CMP @R3,#-1 BNE 1$ TST (R3)+ MOV (R3)+,SCOP$1-SCOP$2-SCOP2(R1) MOV @R3,TTCNFG-SCOP$2-SCOP2(R1) RETURN SCOP: .WORD 4367 .WORD ECHO-SCOP$3 .BYTE BS,SPACE MOV #BS,R4 NOP NOP SCOP1: .WORD -1 .WORD 401 .WORD VT05$ NOSCOP: CMPB R0,@R1 BEQ 2$ .WORD 4767 .WORD TTORUB-SCOP$3-4 MOV R0,@R1 2$: MOVB @(R5),R4 .WORD -1 .WORD 4767 .WORD 0 SCOP2=SCOP1-SCOP .DSABL LSB .ENDC .ENABL LSB SETMOF: .RAD50 /EDI/ .WORD 1$-. .WORD PROGDF-$RMON .RAD50 /EDI/ .WORD $$EDIT .RAD50 /TEC/ .WORD $$TECO .RAD50 /KED/ .WORD $$KED .RAD50 /K52/ .WORD $$K52 .IF NE MMG$T .RAD50 /KEX/ .WORD $$KEX .ENDC .WORD 0 1$: .RAD50 /WIL/ .WORD 2$-. .WORD PROGDF+2-$RMON .RAD50 /IMP/ .WORD 1 .RAD50 /EXP/ .WORD 0 .WORD 0 2$: .RAD50 /ERR/ .WORD 0 .WORD ERRLEV-$RMON .RAD50 /WAR/ .WORD WARN$!ERROR$!FATAL$!UNCON$ .RAD50 /ERR/ .WORD ERROR$!FATAL$!UNCON$ .RAD50 /FAT/ .WORD FATAL$!UNCON$ .RAD50 /SEV/ .WORD UNCON$ .RAD50 /NON/ .WORD 200!UNCON$ .WORD 0 .ENDC .DSABL LSB .SBTTL INSTALL .IF NE B$$!E$$!D$$!INST$$ OVERLAY .ENDC .IF NE B$$ OVCMD B CALLR OB .ENDC .IF NE D$$ OVCMD D CALLR OD .ENDC .IF NE E$$ OVCMD E CALLR OE .ENDC .IF NE INST$$ SYNTAX INSTALL PROMPT $DEVICE REQBLNK END SWITS INSTALL ENDNO NOS ENDS OVCMD INSTALL ITBLE 0 OJSR PC,INITIT .ENABL LSB OINSTAL:CALL NMCK CMP @R2,#<^RBA > BEQ 10$ CMP @R2,#<^RTT > BEQ 10$ MOV @R2,-(SP) .DSTAT R2,R2 BCC 25$ 5$: TST (R1)+ BEQ FNDSLT TST (R3)+ CMP R3,#$SLOT*2 BLO 5$ KMEROR 10$: OJMP BADHAN 15$: BR OINSTALL FNDSLT: OINST MOV .SYIND,R4,* MOV @R4,-(SP) OINST ADD .$PNAM,@SP,* MOVB SYUNIT+1-SYINDX(R4),R4 ADD #<^R 0>,R4 ADD @(SP)+,R4 MOV R4,(R2)+ MOV @SP,@R2 MOV @#SYSPTR,R0 ADD HSUFFX-$RMON(R0),(R2)+ CLR (R2)+ MOV #<^RSYS>,@R2 SUB #6,R2 MOV #3*400+CHOVLY,R0 EMT 374 MOV R2,R0 MOV R3,-(SP) OJSR PC,COPYFN MOV (SP)+,R3 .LOOKUP CHOVLY BCS 30$ OINST MOV .USRBUF,R4,* CLR @<.BLKEY-OVLY>-<.+4-OVLYST>(PC) CLR R0 .READW CHOVLY,R4,#256. BCS 35$ MOV @#SYSPTR,R0 CMPB H.GEN(R4),SYSGEN-$RMON(R0) BNE 40$ ADD R3,R0 MOV R0,-(SP) MOV R4,R1 ADD #176,R1 ADDR TRPTST,R3 ADDR 50$,R0 MOV R0,-(SP) .TRPSET ,R3,CODE=SET TST @(R1)+ BCS 45$ TST @R1 BEQ 20$ MOV R5,-(SP) MOV R4,-(SP) CALL @R1 BCS 45$ MOV (SP)+,R4 MOV (SP)+,R5 20$: MOV (SP)+,R0 .TRPSET ,#0 OADDR BLOCK,R2 .SAVEST CHOVLY,R2 MOV (SP)+,R0 MOV SP,@<.EXTFL-OVLY>-<.+4-OVLYST>(PC) ADD #H.SIZ,R4 MOV (R4)+,$HSIZE-$RMON(R0) MOV (R4)+,$DVSIZ-$RMON(R0) MOV (R4)+,$STAT-$RMON(R0) MOV 2(R2),$DVREC-$RMON(R0) INC $DVREC-$RMON(R0) CLR $ENTRY-$RMON(R0) MOV (SP)+,$PNAME-$RMON(R0) CLR @<.EXTFL-OVLY>-<.+4-OVLYST>(PC) CMPB @R5,#COMMA BEQ 15$ TSTB @R5 BEQ PCRTS OJMP BADCOM 25$: KMRTMG ,WARN$ 30$: OJMP NOTFND 35$: OJMP FIPERR 40$: KMEROR 45$: KMRTMG ,,PFILE 50$: .BLKW 2 TRPTST: BIS #1,2(SP) RTI .DSABL LSB .ENABL LSB NMCK: MOV #<-3>,R3 5$: CMPB #<'a>,-(R5) BHI 10$ CMPB #<'z>,@R5 BLO 10$ BICB #<40>,@R5 10$: MOVB @R5,R2 SUB #<'Z+1>,R2 ADD #<'Z+1-'A>,R2 INC R3 BEQ 20$ BCS 5$ 15$: OJMP BADCOM 20$: BCS 15$ SUB #<'9+1-'A>,R2 ADD #<'9+1-'0>,R2 BCS 15$ ADD #<3>,R5 OADDR DEVSTS,R2 OJSR PC,GETNAM OJSR PC,OPTCOL OINST MOV .$PNAM,R1,* PCRTS: OINST MOV @R2,INPFN,,* RETURN .DSABL LSB .ENDC .SBTTL BASE, EXAMINE .ENABL LSB .IF NE B$$ OB: CALL EBDSB1 TSTB @R5 BNE 11$ BIC #1,@SP MOV (SP)+,-<.+4-OVLYST>(PC) .ENDC .IF NE B$$!E$$ 1$: RETURN .ENDC .IF NE E$$ OE: CALL EBDSUB BIC #1,@SP CLR R1 TSTB @R5 BEQ 2$ CMPB #MINUS,@R5 BNE 11$ OJSR PC,OCTNUM TSTB @R5 BNE 11$ MOV (SP)+,R1 SUB @SP,R1 BLO 11$ ROR R1 2$: ADD (SP)+,R3 3$: MOV #10,R4 4$: CALL ADTRAN TST (R3)+ MOV @R2,R2 OPRINT: MOV #30,R0 SEC 5$: ROL R2 ROLB R0 .TTYOUT MOV #206,R0 6$: ASL R2 BEQ 7$ ROLB R0 BCS 6$ BR 5$ 7$: DEC R1 BMI 1$ .TTYOUT #SPACE DEC R4 BNE 4$ OJSR PC,KCRLF BR 3$ .ENDC .IF NE D$$ .SBTTL DEPOSIT OD: CALL EBDSUB ADD (SP)+,R3 BIC #1,R3 CMPB @R5,#EQUALS BEQ 9$ 8$: TSTB @R5 BEQ SAVEVC BR 11$ 9$: MOV R3,R2 MOV @#SYSPTR,R0 ADD #CCB-$RMON,R0 OJSR PC,SETBIT CALL ADTRAN CMP R3,R2 BEQ 10$ OINST INC SAVSWT,,* 10$: OJSR PC,OCTNUM MOV (SP)+,@R2 TST (R3)+ CMPB @R5,#COMMA BEQ 9$ BR 8$ .ENDC .IF NE D$$!E$$!B$$ 11$: OJMP BADCOM EBDSUB: OINST MOV #-1,BLOKWG,,* OINST MOV BASE,R3,* EBDSB1: CMPB @R5,#SPACE BEQ 12$ TSTB @R5 BNE 11$ 12$: MOV @SP,-(SP) OJSR PC,OCTNUM MOV (SP)+,2(SP) RETURN .ENDC .DSABL LSB .IF NE D$$!E$$ .SBTTL ADTRAN & SAVEVC .ENABL LSB ADTRAN: MOV @#SYSPTR,R2 CMP R3,SYSLOW-$RMON(R2) ..EMON == . BHIS 4$ BHIS 1$ OADDR KMON,R2 BIC #777,R2 SUB R3,R2 BLOS 2$ 1$: MOV R3,R2 RETURN 2$: OADDR SYSIOB-2,R5,PUSH NEG R2 CLRB R2 SWAB R2 ASR R2 CMP R2,(R5)+ BEQ 3$ CALL SAVEVC NEG 2(R5) MOV R2,R0 MOV R0,-<.+4-OVLYST>(PC) OJSR PC,SYSK 3$: MOV R3,R2 BIC #^C<777>,R2 ADD @R5,R2 BR 5$ 4$: KMEROR
SAVEVC: MOV #-400,-<.+6-OVLYST>(PC) OADDR SAVSWT,R5,PUSH TST (R5)+ BEQ 5$ MOV (R5)+,R0 OJSR PC,SYSK 5$: MOV (SP)+,R5 RETURN .DSABL LSB .ENDC .IF NE SUSP$$!RESU$$!ASSI$$!DEAS$$!ABOR$$ OVERLAY .ENDC .SBTTL SUSPEND / RESUME .IF NE BF .IF NE ABOR$$ OVCMD ABORT CALLR ABO1 .ENDC .ENDC .IF NE SUSP$$ OVCMD SUSPEND CALLR SUSP1 .ENDC .IF NE RESU$$ OVCMD RESUME CALLR RESU1 .ENDC .IF NE ASSI$$ OVCMD ASSIGN CALLR ASSIG1 .ENDC .IF NE DEAS$$ OVCMD DEASSIGN CALLR DEASS1 .ENDC .IF NE DISM$$ SYNTAX DISMOUNT PROMPT $DEVICE REQBLNK END SWITS DISMOUNT ENDNO NOS ENDS OVCMD DISMOUNT MOV R5,-(SP) ITBLE 0 OJSR PC,INITIT MOV (SP)+,R5 CALL GTNAM BCS 1$ TSTB @R5 BNE 1$ CLR R5 BR LDCOM 1$: OJMP BADCOM .ENDC .IF NE MOUN$$ .SBTTL MOUNT command SYNTAX MOUNT PROMPT $DEVICE SCALL GSWIT,<1> REQBLNK INSPEC SCALL GSWIT,<1> PROMPT $FILEE SCALL RINSPC,<1> EOLGOT MNTB SCALL RINSPC,<1> MNTB: END SWITS MOUNT SWIT WRITE 1 - - W ENDNO NOS SWIT NOWRITE 1 - - R ENDS .ENABL LSB OVCMD MOUNT CLR (PC)+ SVOPT: .WORD 0 MOV R5,-(SP) ITBLE 3 OJSR PC,INITIT OINST CMPB NSWITS,#1,* BHI 6$ BNE 1$ OADDR STRANT,R2 MOVB @R2,SVOPT 1$: MOV (SP)+,R5 CALL CKOPT CALL GTNAM BCS 6$ CMPB #,@R5 BNE 6$ CALL CKOPT .ENDC .IF NE MOUN$$!DISM$$ LDCOM: MOV @R2,R3 OINST MOV @R2,INPFN,,* .DSTAT R2,R2 BCS 14$ CMPB @R2,#46 BNE 14$ MOV R3,@R2 2$: SUB #<^RLD >,R3 BEQ 7$ SUB #<^R 0>,R3 BLO 3$ CMP R3,#7 BLOS 7$ 3$: MOV #$SLOT,R0 ADD #$UNAM2+<2*$SLOT>-$RMON,R4 4$: CMP @R2,-(R4) BEQ 5$ DEC R0 BNE 4$ 5$: MOV $UNAM1-$UNAM2(R4),R3 BR 2$ 6$: OJMP BADCOM 7$: ADD #60,R3 MOV #522,R1 TST R5 BEQ 13$ .IF NE MOUN$$ 8$: MOVB -(R5),(R1)+ BEQ 11$ CMPB #,@R5 BEQ 9$ CMPB #'/,@R5 BNE 8$ TSTB -(R1) 9$: CALL CKOPT TSTB @R5 BEQ 12$ MOV R5,(PC)+ BSAV: .WORD 0 CALL GTNAM BCS 6$ MOV R5,R2 CALL CKOPT TSTB @R5 BNE 6$ MOV BSAV,R5 TSTB -(R1) ADDR SLSHA,R0 .REPT 3 MOVB (R0)+,(R1)+ .ENDR 10$: MOVB -(R5),(R1)+ CMP R5,R2 BNE 10$ 11$: TSTB -(R1) 12$: TST SVOPT BEQ 13$ MOVB #'/,(R1)+ MOVB SVOPT,(R1)+ MOVB #':,(R1)+ MOVB R3,(R1)+ .ENDC 13$: ADDR SLSHL,R0 .REPT 5 MOVB (R0)+,(R1)+ .ENDR MOVB R3,(R1)+ CLRB @R1 MOV #500,R1 MOV #<^RSY >,(R1)+ MOV #<^RLD >,@R1 MOV @#SYSPTR,R4 ADD HSUFFX-$RMON(R4),(R1)+ CLR (R1)+ MOV #<^RSYS>,(R1)+ CLR (R1)+ CLR @R1 CALLR CHANTO 14$: OJMP BADHAN CKOPT: TST SVOPT BEQ 16$ CMPB #'/,@R5 BEQ 15$ CMPB #'/,-1(R5) BNE 16$ 15$: TSTB @R5 BEQ 16$ CMPB #,-(R5) BNE 15$ 16$: RETURN .DSABL LSB SLSHL: .ASCIZ %/$/L:% .IF NE MOUN$$ SLSHA: .ASCIZ %/A:% .ENDC .ENDC .IF NE DEAS$$!ASSI$$ .SBTTL ASSIGN, DEASSIGN .ENABL LSB .ENABL LSB DEASS1: CALL ADSUB BNE 2$ ADD #$UNAM2-$RMON,R4 MOV #$SLOT,R1 1$: CLR (R4)+ DEC R1 BNE 1$ RETURN 2$: CLR (R2)+ BR PERNM .DSABL LSB SYNTAX ASSIGN PROMPT $PHYSICAL REQBLNK INSPEC PROMPT $LOGICAL REQBLNK END SWITS ASSIGN ENDNO NOS ENDS .ENABL LSB ASSIG1: MOV R5,-(SP) ITBLE 2 OJSR PC,INITIT MOV (SP)+,R5 CALL GTNAM BCS 1$ TST (R2)+ CMPB @R5,#SPACE BEQ PERNM 1$: OJMP BADCOM PERNM: CALL GTNAM1 BCS 1$ TSTB @R5 BNE 1$ OINST MOV @R2,INPFN,,* CMP @R2,#<^RSY > ..ASSY == . BEQ 1$ MOV -2(R2),R5 BEQ 6$ CMP @R2,#<^RBA > BEQ HANERK MOV R4,R0 ADD #$UNAM2-$RMON,R0 MOV #$SLOT+3,R1 2$: DEC R1 BEQ 3$ CMP R5,(R0)+ BNE 2$ MOV $UNAM1-$UNAM2-2(R0),R5 3$: MOV R4,R0 ADD #$PNAME-$RMON,R0 MOV #$SLOT,R1 4$: MOV R5,R3 OINST MOV R5,INPFN,,* SUB (R0)+,R3 BLO 5$ BEQ 6$ SUB #<^R 0>,R3 BLO 5$ CMP R3,#7 BLOS 6$ 5$: DEC R1 BNE 4$ HANERK: OJMP BADHAN 6$: MOV #$SLOT,R1 ADD #$UNAM2+<2*$SLOT>-$RMON,R4 CLR R3 7$: CMP @R2,-(R4) BEQ 10$ TST @R4 BNE 8$ MOV R4,R3 8$: DEC R1 BNE 7$ TST R5 BEQ 11$ MOV R3,R4 BEQ 12$ MOV @R2,@R4 9$: MOV R5,$UNAM1-$UNAM2(R4) RETURN 10$: TST R5 BNE 9$ CLR @R4 RETURN 11$: KMRTMG ,WARN$ 12$: KMEROR .DSABL LSB .ENDC .IF NE MOUN$$!DISM$$!ASSI$$!DEAS$$ ADSUB: OADDR BLOCK,R2 MOV @#SYSPTR,R4 TSTB @R5 RETURN GTNAM: CALL ADSUB GTNAM1: OJSR PC,GETNAM BEQ 13$ OJSR PC,OPTCOL TST 2(R2) BNE 13$ TST (PC)+ 13$: SEC RETURN .ENDC .IF NE SUSP$$!RESU$$ .IF EQ SYT$K SUSP1: TST (PC)+ RESU1: SEC MOVB @R5,R1 BEQ SPNRSU OJMP BADCOM SPNRSU: MOV @#SYSPTR,R1 MOV FCNTXT-$RMON(R1),R2 BEQ 2$ BCS 1$ BIS #KSPND$,I.BLOK(R2) RETURN 1$: BIC #KSPND$,I.BLOK(R2) MOVB #MXJBNM/2+200,INTACT-$RMON(R1) .EXIT 2$: KMEROR .IFF SUSP1: CALL GLJNM BIS #KSPND$,I.BLOK(R5) RETURN RESU1: CALL GLJNM BIC #KSPND$,I.BLOK(R5) MOV @#SYSPTR,R3 MOVB #MXJBNM/2+200,INTACT-$RMON(R3) .EXIT GLJNM: ADDR NMBUF,R0 MOV R0,-(SP) CLR (R0)+ CLR (R0)+ CLR (R0)+ MOV @SP,R0 MOV #6,R1 TSTB -(R5) BNE 3$ MOVB #'F,@R0 BR 4$ 2$: TSTB -(R5) BEQ 4$ 3$: MOVB @R5,(R0)+ DEC R1 BNE 2$ 4$: MOV (SP)+,R0 5$: MOV @#SYSPTR,R5 CALL FNDJOB-$RMON(R5) BEQ 6$ MOV @R5,R5 RETURN 6$: KMEROR NMBUF: .BLKW 3 .ENDC .ENDC .IF NE BF .IF NE ABOR$$ .SBTTL ABORT command SYNTAX ABORT PROMPT $JOB REQBLNK END SWITS ABORT ENDNO NOS ENDS .ENABL LSB ABO1: MOV R5,(PC)+ SVNM: .WORD 0 ITBLE 0 OJSR PC,INITIT DEC SVNM OADDR BLOCK+6,R0 CLR -(R0) CLR -(R0) CLR -(R0) MOV R0,-(SP) MOV #7,R1 TSTB @R5 BEQ 2$ 1$: MOVB -(R5),(R0)+ BEQ 3$ DEC R1 BNE 1$ 2$: OJMP BADCOM 3$: MOV (SP)+,R0 MOV @#SYSPTR,R1 .IF EQ SYT$K BIC #20040,@R0 CMP #'F,@R0 BNE 7$ MOV FCNTXT-$RMON(R1),R2 .IFF CALL FNDJOB-$RMON(R1) BEQ 7$ .ENDC MOV I.SCCA(R2),R5 BEQ 6$ .IF NE MMG$T MOV I.SCC1(R2),5$ BIC #CMODE,@#PS JSR R0,@P1EXT-$RMON(R1) 4$: .WORD 5$-4$ .IFTF BIS #100000,@R5 .IFT 5$: .WORD 0 BIS #CMODE,@#PS .ENDC RETURN 6$: BIS #100000,INTACT-$RMON(R1) BIS #ABPND$,@R2 RETURN 7$: MOV SVNM,R4 CLRB @R3 KMRTMG ,,BCKASZ .DSABL LSB .ENDC .ENDC .IF NE MOUN$$!DISM$$ CHANTO: .IF NE BF .SRESET .IF NE MMG$T BIC #,@#JSW .ENDC .IFF OJSR PC,RSTSRS .ENDC .CHAIN .ENDC .IF NE MOUN$$ .IRP NUM,<\$OPTX> OPTX'NUM:: .ENDR .BYTE -1 .DSABL CRF $SCNT=0 SWTDEF FLGTXT .EVEN .ENABL CRF NEXTL .ENDC .IF NE EDIT$$!TECO$$!MAKE$$!MUNG$$DIFF$$!SQUE$$!HELP$$ OVERLAY .ENDC .IF NE DIFF$$ OVCMD DIFFERENCES CALLR DIF1 .ENDC .IF NE SQUE$$ OVCMD SQUEEZE CALLR SQU1 .ENDC .IF NE HELP$$ OVCMD HELP CALLR HELP1 .ENDC .SBTTL EDIT command .IF NE TECO$$ OVCMD TECO .ENDC .IF NE MAKE$$ OVCMD MAKE .ENDC .IF NE MUNG$$ OVCMD MUNG .ENDC .IF NE TECO$$!MAKE$$!MUNG$$ ADDR NMTECO,R0 MOV #500,R1 MOV (R0)+,(R1)+ MOV (R0)+,(R1)+ MOV (R0)+,(R1)+ MOV (R0)+,(R1)+ MOV #-1,(R1)+ OADDR KMCBUF,R0 1$: MOVB -(R0),(R1)+ BNE 1$ BR CHNLNK ..TECN == . NMTECO: .RAD50 "SY TECO SAV" .ENDC .IF NE EDIT$$ SYNTAX EDIT PROMPT $FILEE SCALL GSWIT,<1> REQBLNK SCALL ROUSPC,<1> EOLSEQ EDIT,EDIT END SWITS EDIT ENDNO SWIT TECO 1 - TECO - SWIT EDIT 1 - EDIT - SWIT KED 1 - KED - SWIT K52 1 - K52 - SWIT KEX 1 - KEX - SWIT EXECUTE 1 TECO - TEX SWIT CREATE 1 - - CRE SWIT OUTPUT 1 - - PUT SWIT ALLOCATE 1 - - ALL SWIT INSPECT 1 - - INS NOS ENDS OVCMD EDIT CLR @#510 ITBLE 2 OJSR PC,INITIT ADDR EDTCHN-4,R0 1$: CMP (R0)+,(R0)+ MOV (R0)+,R1 BEQ EDTCSI OINST CMPB FORCEP,R1,* BNE 1$ MOV #500,R5 ..EDDV == .+2 MOV #<^RSY >,(R5)+ MOV (R0)+,(R5)+ MOV (R0)+,(R5)+ MOV #<^RSAV>,(R5)+ TST (R5)+ MOVB #FOTYP,R4 OINST MOVB R5,GENFLG,,* CALL SETDTP OJSR PC,DOENT CLRB @R5 DECB R4 MOV #540,R5 OJSR PC,DOENT CLRB @R5 .ENDC .IF NE EDIT$$!TECO$$!MAKE$$!MUNG$$!HELP$$ CHNLNK: .IF NE BF .SRESET .IF NE MMG$T BIC #VIRT$,@#JSW .ENDC .IFF OJSR PC,RSTSRS .ENDC .CHAIN .ENDC .IF NE HELP$$ HELP1: CLRB @#512 CLRB @#540 MOV #500,R0 ADDR HLPBLK,R1 MOV (R1)+,(R0)+ MOV (R1)+,(R0)+ MOV (R1)+,(R0)+ MOV (R1)+,(R0)+ MOV #600,R0 INC R5 1$: MOVB -(R5),(R0)+ BNE 1$ BR CHNLNK ..HELF == . HLPBLK: .RAD50 "SY HELP SAV" .ENDC .IF NE EDIT$$!TECO$$!MAKE$$!MUNG$$ EDTCSI: MOV #510,R5 TST @R5 BPL 2$ TSTB @R5 BPL 6$ 1$: OJMP CNFSWT 2$: TSTB @R5 BMI 6$ OINST CMPB FILNUM,#2,* BEQ 4$ OADDR FILST,R0 MOV R0,R1 ADD #FSIZ,R1 MOV #FSZFLD/2,R2 OINST INCB FILNUM,,* 3$: MOV (R0)+,(R1)+ DEC R2 BNE 3$ MOV R1,R0 BR 8$ 4$: OADDR FILST+STFLG,R0 CMPB @R0,#DTYP BEQ 5$ ADD #FSIZ,R0 MOVB #FOTYP,@R0 BR 7$ 5$: MOVB #FOTYP,(R0)+ ADD #FSZFLD,R0 BR 8$ 6$: OINST CMPB FILNUM,#2,* BEQ 1$ TST @R5 BMI 9$ MOV #'I,R2 OJSR PC,SETSW1 7$: OADDR FILST+FSZFLD,R0 8$: OJSR PC,ZFALLF MOVB #ITYP,@R0 9$: OJMP CMDEXE EDTCHN: .WORD $$EDIT ..EDIF == . .RAD50 "EDIT " .WORD $$TECO ..TECF == . .RAD50 "TECO " .WORD 0 EFTYP: .BYTE 0,0,0,0 .ENDC .IF NE EDIT$$ SETDTP: OADDR FILST+FTPFLD,R2 CALL @PC TST @R2 BNE 50$ MOV EFTYP,@R2 MOV EFTYP+2,2(R2) ADD #FSIZ,R2 50$: RETURN OVACRE: BIS #100000,@#510 RETURN OVAINS: BIS #200,@#510 RETURN OVAPUT: CMPB #':,@R5 BNE 2$ OJSR PC,OUTSPEC MOVB #DTYP,-(R0) 2$: RETURN OVATEX: MOV #377,@#510 MOV #".T,EFTYP MOV #"EC,EFTYP+2 ADDR EXSTR,R1 MOV #600,R0 1$: MOVB (R1)+,(R0)+ BNE 1$ DEC R0 CMPB #':,@R5 BNE 3$ CMPB #'',-(R5) BNE 5$ 2$: CMPB #'',-(R5) BNE 4$ CMPB #'',-(R5) BEQ 4$ 3$: MOVB (R1)+,(R0)+ BNE 3$ RETURN 4$: MOVB @R5,(R0)+ BNE 2$ OJMP BADCOM 5$: INC R5 6$: CMPB #' ,-(R5) BEQ 3$ MOVB @R5,(R0)+ BNE 6$ BR 3$ EXSTR: .ASCIZ \YHXZHK@I\<3> .ASCIZ <3>\MZ\ .EVEN .ENDC .IF NE DIFF$$ .SBTTL DIFFERENCES COMMAND SYNTAX DIFFERENCES PROMPT $FILE1 DEFILE FSTARF SCALL GSWIT,<1> REQBLNK SCALL SPISPC,<1> PROMPT $FILE2 FLDBEG DSYN1 REQCOMMA OPTEND GOTO DSYN2 DSYN1: REQBLNK DSYN2: SCALL SPISPC,<1> DEFOSPC $TTSPC EOLSEQ SRCCOM END SWITS DIFFERENCES SWIT COMMENTS 1 SRCCOM - - SWIT SPACES 1 SRCCOM - - SWIT TRIM 1 SRCCOM - - ENDNO SWIT BLANKLINES 1 SRCCOM - B SWIT FORMFEED 1 SRCCOM - F SWIT MATCH 1 SRCCOM - L,,DVAL SWIT SLP 1 SRCCOM - SOT SWIT CHANGEBAR 1 SRCCOM - D SWIT AUDITTRAIL 1 SRCCOM - A SWIT PRINTER 1 - - PRI SWIT TERMINAL 1 - - TER SWIT OUTPUT 1 - - OUT SWIT ALLOCATE 1 - - ALL SWIT BINARY 1 - BINCOM - SWIT BYTES 1 BINCOM - B SWIT START 1 BINCOM - S,,VAL SWIT END 1 BINCOM - E,,VAL SWIT QUIET 1 BINCOM - Q SWIT SIPP 1 BINCOM - SOT SWIT ALWAYS 1 BINCOM - O SWIT DEVICE 1 BINCOM - D NOS SWIT NOCOMMENTS 1 SRCCOM - C SWIT NOSPACES 1 SRCCOM - S SWIT NOTRIM 1 SRCCOM - T ENDS DIF1: ITBLE 5 OJSR PC,INITIT OINST MOV FORCEP,R0,* BIC #^C<37>,R0 CMP #$$BINC,R0 BNE 1$ OINST BISB #ESTARF,DEFILB,,* 1$: OJMP CMDEXE .ENDC .IF NE SQUE$$ .SBTTL SQUEEZE command SYNTAX SQUEEZE PROMPT $DEVICE DEFILE FSTARF SCALL GSWIT,<1> REQBLNK SCALL RINSPC,<1> EOLSEQ DUP SETSWIT S END SWITS SQUEEZE SWIT QUERY 1 DUP - - ENDNO SWIT OUTPUT 1 DUP - SOU SWIT WAIT 1 DUP - W NOS SWIT NOQUERY 1 - - Y ENDS SQU1: ITBLE 2 OJSR PC,INITIT OJMP CMDEXE OVASOU: CMPB #':,@R5 BNE 1$ OJSR PC,SPISPEC MOVB #FOTYP,-(R0) 1$: RETURN .ENDC .IF NE EDIT$$!DIFF$$!SQUE$$ .IRP NUM,<\$OPTX> OPTX'NUM:: .ENDR .BYTE -1 .DSABL CRF $SCNT=0 SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT .EVEN .ENABL CRF NEXTL .ENDC .IF NE DELE$$!PRIN$$!TYPE$$!CREA$$ OVERLAY .ENDC .IF NE DELE$$ OVCMD DELETE CALLR DEL1 .ENDC .IF NE TYPE$$ .SBTTL TYPE command SYNTAX TYPE PROMPT $FILE SCALL GSWIT,<1,2> REQBLNK DEFILE FSTARF DEFINX $.LST SCALL SPISPC,<1> FLDBEG SCALL CSPISPC,<1> ITEREND DEFOSPC $TTSPC EOLSEQ PIP SETSWIT A WILDEF PIP,W,LOG,ASK,NLG,NLG,$WILD0 COMPDEF APLYDEF PIP,LOG,W APLYDEF PIP,ASK,Q END SWITS TYPE SWIT LOG 1 PIP - - LOG ENDNO SWIT QUERY 1 PIP - - ASK SWIT COPIES 1 PIP - K,,DVAL SWIT DELETE 2 PIP - D SWIT NEWFILES 1 PIP - C SWIT BEFORE 1 PIP - J,,DVAL SWIT DATE 1 PIP - C,,DVAL SWIT SINCE 1 PIP - I,,DVAL SWIT INFORMATION 1 PIP - X SWIT WAIT 1 PIP - E NOS SWIT NOLOG 1 - - - NLG ENDS OVCMD TYPE ITBLE 7 .IF EQ CREA$$ OJSR PC,INITIT OJMP CMDEXE .IFF BR COMONC .ENDC .ENDC .IF NE CREA$$ .SBTTL CREATE COMMAND SYNTAX CREATE PROMPT $FILEE SCALL GSWIT,<1> REQBLNK SCALL ROUSPC,<1,2> ROUTINE ATE SETSWIT C EOLSEQ DUP END SWITS CREATE ENDNO SWIT START 1 DUP - G,,DVAL SWIT EXTENSION 1 - DUP T,,DVAL SWIT ALLOCATE 2 DUP - ALL NOS ENDS OVCMD CREATE ITBLE 1 COMONC: OJSR PC,INITIT OJMP CMDEXE OVAATE: OINST TST FORCEP,,* BPL 1$ CMPB (R4)+,(R4)+ 1$: RETURN .ENDC .IF NE PRIN$$ .SBTTL PRINT command SYNTAX PRINT PROMPT $FILE SCALL GSWIT,<1> REQBLNK FILQUAL DEFILE FSTARF DEFINX $.LST SPISPEC SAVNAM SCALL GSWIT,<1> FLDBEG SCALL CSPISPC,<1> ITEREND DEFOSPC $LPWLD ROUTINE QPD EOLSEQ PIP WILDEF PIP,W,LOG,ASK,NLG,NLG,$WILD0 COMPDEF APLYDEF PIP,LOG,W APLYDEF QUEMAN,LOG,W APLYDEF PIP,ASK,Q APLYDEF QUEMAN,ASK,Q END SWITS PRINT SWIT LOG 1 - - - LOG SWIT FLAGPAGE 1 - QUEMAN H,,DVAL ENDNO SWIT QUERY 1 - - - ASK SWIT COPIES 1 - - K,,DVAL SWIT DELETE 1 - - D SWIT NEWFILES 1 - - C SWIT BEFORE 1 - - J,,DVAL SWIT SINCE 1 - - I,,DVAL SWIT DATE 1 - - C,,DVAL SWIT INFORMATION 1 - - X SWIT WAIT 1 PIP - E SWIT PROMPT 1 - QUEMAN / SWIT NAME 1 - QUEMAN QNM SWIT PRINTER 1 - - - NOS SWIT NOLOG 1 - - - NLG SWIT NOFLAGPAGE 1 - QUEMAN N ENDS OVCMD PRINT .ENABL LSB ITBLE 8. OJSR PC,INITIT MOV @#SYSPTR,R5 BIT #,SPSTAT-$RMON(R5) BEQ 25$ MOV PC,-(SP) MOV #'N,R3 CALL DELSWT BCS 5$ CLR @SP 5$: MOV #'H,R3 CALL DELSWT BCC 10$ TST @SP BEQ 15$ BR 20$ 10$: TST @SP BEQ 40$ CLR @SP CMPB #':,(R2)+ BNE 20$ MOVB (R2)+,@SP BIC #60,@SP CMPB #6,@SP BLO 45$ CMPB #'.,@R2 BNE 45$ 15$: SWAB @SP COM @SP BIC #^C<3400>,@SP BIS @SP,SPSTAT-$RMON(R5) 20$: TST (SP)+ OINST MOVB #<$$PIP>,FORCEP,,* 25$: CALL DETPRG BEQ 30$ MOV (PC)+,R3 .BYTE '/,'D CALL FNDSWT BCC 35$ SWAB R3 CALL FNDSWT BCS 30$ TSTB @R1 BEQ 30$ OINST CMPB FILNUM,#2,* BGT 35$ 30$: OJMP CMDEXE 35$: OJMP ILSWIT 40$: OJMP CNFSWT 45$: OJMP ILVALU .DSABL LSB .ENDC .IF NE DELE$$ .SBTTL DELETE command SYNTAX DELETE PROMPT $FILE SCALL GSWIT,<1,2> REQBLNK FILQUAL DEFILE ESTARF+FSTARF SPISPEC SAVNAM SCALL GSWIT,<1> FLDBEG SCALL CSPISPC,<1> ITEREND EOLSEQ PIP APLYDEF PIP,,D APLYDEF FILEX,,D WILDEF PIP,Q,LOG,ASK,DIT,DIT,$WILD0 COMPDEF APLYDEF PIP,ASK,Q APLYDEF FILEX,ASK,Q APLYDEF PIP,LOG,W APLYDEF PIP,WAI,E APLYDEF FILEX,WAI,W END SWITS DELETE SWIT QUERY 1 PIP - - ASK ENDNO SWIT LOG 1 PIP - - LOG SWIT SYSTEM 1 PIP - Y SWIT NEWFILES 1 PIP - C SWIT DATE 1 PIP - C,,DVAL SWIT SINCE 1 PIP - I,,DVAL SWIT BEFORE 1 PIP - J,,DVAL SWIT EXCLUDE 1 PIP - P SWIT POSITION 1 PIP - M,,DVAL SWIT INFORMATION 1 PIP - X SWIT WAIT 1 - - - WAI SWIT DOS 1 - FILEX S SWIT INTERCHANGE 1 - FILEX U SWIT ENTRY 2 - QUEMAN M NOS SWIT NOQUERY 1 - - - DIT ENDS DEL1: ITBLE 7 OJSR PC,INITIT CALL DETPRG BNE 1$ MOVB #'M,R3 CALL FNDSWT BCS 1$ TSTB @R1 BNE 1$ CALL PUTOUT 1$: OJMP CMDEXE .ENDC .IF NE PRIN$$!DELE$$ OVAQNM: MOV @#SYSPTR,R1 BIT #,SPSTAT-$RMON(R1) BNE 1$ BIT #,CONFIG-$RMON(R1) BNE 2$ 1$: OJMP ILSWIT 2$: OINST MOV DEFDEV,-(SP),* OINST MOV DEFDEV+2,-(SP),* OINST MOV LPDEV,DEFDEV,,* OINST MOV LPDEV+2,DEFDEV+2,,* OJSR PC,ACTFOT OINST TSTB FOTFLG,,* BEQ 3$ TSTB FTPFLD-FSIZ+1(R0) BNE BADEXT 3$: OINST MOV (SP)+,DEFDEV+2,,* OINST MOV (SP)+,DEFDEV,,* RETURN BADEXT: OJMP BADCOM ..QULP == . LPDEV: .ASCIZ "LP:" .EVEN FOTIND: .WORD <-2-FOTYP>*OFBSIZ OVAQPD: OINST MOV FORCEP,R0,* BIC #^C<37>,R0 BNE 1$ MOV @#SYSPTR,R0 BIT #QUEUE$,CONFIG-$RMON(R0) BEQ 1$ MOVB #200!$$QUEM,R0 BIC #340,R0 OINST MOV R0,FORCEP,,* 1$: RETURN DETPRG: OINST MOV FORCEP,R0,* BIC #^C<37>,R0 CMPB #$$QUEM,R0 BNE 1$ MOV R0,-(SP) ADDR FOTIND,R4 OINST MOV LPDEV,DEFDEV,,* OINST MOV LPDEV+2,DEFDEV+2,,* OJSR PC,MAKOFL MOV (SP)+,R0 SEZ 1$: RETURN FNDSWT: CLR R0 OADDR TRANSW-1,R1 1$: TSTB (R1)+ INC R0 OINST CMPB R0,NSWITS,,* BGT 2$ MOVB (R1)+,R2 OADDR STRANT,R2,ADD CMPB (R2)+,R3 BNE 1$ TST (PC)+ 2$: SEC RETURN PUTOUT: CLR R2 OADDR FILST-1,R0 1$: INC R2 ADD #FSIZ,R0 CMPB @R0,#FOTYP BNE 1$ MOVB R2,@R1 RETURN DELSWT: CALL FNDSWT BCS 1$ OJSR PC,REMSWT CLC 1$: RETURN .ENDC .IF NE DELE$$!PRIN$$!TYPE$$ .IRP NUM,<\$OPTX> OPTX'NUM:: .ENDR .BYTE -1 .DSABL CRF $SCNT=0 SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT .EVEN .ENABL CRF NEXTL .ENDC .IF NE RENA$$!PROT$$!UNPR$$!INIT$$!DUMP$$!BOOT$$!FORM$$ OVERLAY .ENDC .IF NE BOOT$$ OVCMD BOOT CALLR BOT1 .ENDC .IF NE DUMP$$ OVCMD DUMP CALLR DUM1 .ENDC .IF NE FORM$$ OVCMD FORMAT CALLR FOR1 .ENDC .IF NE RENA$$ .SBTTL RENAME command SYNTAX RENAME PROMPT $FROM DEFILE FSTARF+ESTARF SCALL GSWIT,<1> REQBLNK SCALL SPISPC,<1> FLDBEG SCALL CSPISPC,<1> ITEREND PROMPT $TO SCALL SPOSPC,<1> EOLSEQ PIP SETSWIT R WILDEF PIP,W,LOG,ASK,NLG,NLG,$WILD0 COMPDEF APLYDEF PIP,LOG,W APLYDEF PIP,ASK,Q END SWITS RENAME SWIT LOG 1 PIP - - LOG SWIT REPLACE 1 PIP - - SWIT PROTECTION 1 PIP - F ENDNO SWIT QUERY 1 PIP - - ASK SWIT SYSTEM 1 PIP - Y SWIT NEWFILES 1 PIP - C SWIT DATE 1 PIP - C,,DVAL SWIT SINCE 1 PIP - I,,DVAL SWIT BEFORE 1 PIP - J,,DVAL SWIT SETDATE 1 PIP - T,,DVAL SWIT INFORMATION 1 PIP - X SWIT WAIT 1 PIP - E NOS SWIT NOLOG 1 - - - NLG SWIT NOREPLACE 1 PIP - N SWIT NOPROTECTION 1 PIP - Z ENDS OVCMD RENAME ITBLE 7 OJSR PC,INITIT OJMP CMDEXE .ENDC .IF NE PROT$$ .SBTTL PROTECT command SYNTAX PROTECT PROMPT $FILE SCALL GSWIT,<1> REQBLNK FILQUAL DEFILE FSTARF+ESTARF SPISPEC SAVNAM SCALL GSWIT,<1> FLDBEG SCALL CSPISPC,<1> ITEREND EOLSEQ PIP SETSWIT F WILDEF PIP,W,LOG,ASK,NLG,NLG,$WILD0 COMPDEF APLYDEF PIP,LOG,W APLYDEF PIP,ASK,Q END SWITS PROTECT SWIT LOG 1 PIP - - LOG ENDNO SWIT QUERY 1 PIP - - ASK SWIT SYSTEM 1 PIP - Y SWIT NEWFILES 1 PIP - C SWIT DATE 1 PIP - C,,DVAL SWIT SINCE 1 PIP - I,,DVAL SWIT BEFORE 1 PIP - J,,DVAL SWIT EXCLUDE 1 PIP - P SWIT WAIT 1 PIP - E SWIT INFORMATION 1 PIP - X SWIT SETDATE 1 PIP - T,,DVAL NOS SWIT NOLOG 1 - - - NLG ENDS OVCMD PROTECT ITBLE 7 OJSR PC,INITIT OJMP CMDEXE .ENDC .IF NE UNPR$$ .SBTTL UNPROTECT command SYNTAX UNPROTECT PROMPT $FILE SCALL GSWIT,<1> REQBLNK DEFILE FSTARF+ESTARF SPISPEC SAVNAM SCALL GSWIT,<1> FLDBEG SCALL CSPISPC,<1> ITEREND EOLSEQ PIP SETSWIT Z WILDEF PIP,W,LOG,ASK,NLG,NLG,$WILD0 COMPDEF APLYDEF PIP,LOG,W APLYDEF PIP,ASK,Q END SWITS UNPROTECT SWIT LOG 1 PIP - - LOG ENDNO SWIT QUERY 1 PIP - - ASK SWIT SYSTEM 1 PIP - Y SWIT NEWFILES 1 PIP - C SWIT DATE 1 PIP - C,,DVAL SWIT SINCE 1 PIP - I,,DVAL SWIT BEFORE 1 PIP - J,,DVAL SWIT EXCLUDE 1 PIP - P SWIT WAIT 1 PIP - E SWIT INFORMATION 1 PIP - X SWIT SETDATE 1 PIP - T,,DVAL NOS SWIT NOLOG 1 - - - NLG ENDS OVCMD UNPROTECT ITBLE 7 OJSR PC,INITIT OJMP CMDEXE .ENDC .IF NE INIT$$ .SBTTL INITIALIZE COMMAND SYNTAX INITIALIZE PROMPT $DEVICE DEFILE FSTARF DEFINX $.BOT SCALL GSWIT,<1> REQBLNK SCALL SPOSPC,<1> EOLSEQ DUP SETSWIT Z COMPDEF APLYDEF DUP,WAI,W APLYDEF FILEX,WAI,W END SWITS INITIALIZE SWIT QUERY 1 - - - ENDNO SWIT FILE 1 DUP - FIN SWIT SEGMENTS 1 DUP - N,,DVAL SWIT DOS 1 - FILEX S SWIT INTERCHANGE 1 - FILEX U SWIT VOLUMEID 1 - - V,,VAL SWIT BADBLOCKS 1 DUP - B,,VAL SWIT REPLACE 1 DUP - R,,VAL SWIT WAIT 1 - - - WAI SWIT RESTORE 1 DUP - D SWIT BACKUP 1 - BUP - NOS SWIT NOQUERY 1 - - Y ENDS OVCMD INITIALIZE INI1: ITBLE 2 OJSR PC,INITIT OJMP CMDEXE OVAFIN: CMPB #':,@R5 BNE 1$ OJSR PC,INSPEC 1$: RETURN .ENDC .IF NE DUMP$$ .SBTTL DUMP COMMAND SYNTAX DUMP PROMPT $DVOFL SCALL GSWIT,<1> REQBLNK SCALL RINSPC,<1> DEFOSPC $LPSPC EOLSEQ DUMP END SWITS DUMP SWIT ASCII 1 DUMP - - ENDNO SWIT WORDS 1 DUMP - W SWIT BYTES 1 DUMP - B SWIT RAD50 1 DUMP - X SWIT ONLY 1 DUMP - O,,VAL SWIT START 1 DUMP - S,,VAL SWIT END 1 DUMP - E,,VAL SWIT IGNORE 1 DUMP - G SWIT FOREIGN 1 DUMP - T SWIT TERMINAL 1 - - TER SWIT PRINTER 1 - - PRI SWIT OUTPUT 1 - - OUT SWIT ALLOCATE 1 - - ALL NOS SWIT NOASCII 1 DUMP - N ENDS DUM1: ITBLE 3 OJSR PC,INITIT OJMP CMDEXE .ENDC .IF NE BOOT$$ SYNTAX BOOT PROMPT $DVOFL DEFDV $SY DEFINX $.SYS SCALL GSWIT,<1> REQBLNK SCALL RINSPC,<1> EOLSEQ DUP SETSWIT O END SWITS BOOT ENDNO SWIT WAIT 1 DUP - W SWIT FOREIGN 1 DUP - Q NOS ENDS BOT1: ITBLE 1 OJSR PC,INITIT OJMP CMDEXE .ENDC .IF NE FORM$$ .SBTTL FORMAT COMMAND SYNTAX FORMAT PROMPT $DEVICE SCALL GSWIT,<1> REQBLNK SCALL RINSPC,<1> EOLSEQ FORMAT END SWITS FORMAT SWIT QUERY 1 FORMAT - - ENDNO SWIT WAIT 1 FORMAT - W SWIT SINGLEDENSITY 1 FORMAT - S SWIT VERIFY 1 FORMAT - V,,VAL SWIT PATTERN 1 FORMAT - P,,VAL NOS SWIT NOQUERY 1 FORMAT - Y ENDS FOR1: ITBLE 1 OJSR PC,INITIT OJMP CMDEXE .ENDC .IF NE RENA$$!PROT$$!UNPR$$!INIT$$!DUMP$$!BOOT$$!FORM$$ .IRP NUM,<\$OPTX> OPTX'NUM:: .ENDR .BYTE -1 .DSABL CRF $SCNT=0 SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT .EVEN .ENABL CRF NEXTL .ENDC .IF NE FORT$$!COMP$$!MACR$$!DIBO$$ .SBTTL FORTRAN OVERLAY .ENDC .IF NE FORT$$ OVCMD FORTRAN CALLR FORT .ENDC .IF NE COMP$$ OVCMD COMPILE CALLR COMPL1 .ENDC .IF NE MACR$$ .SBTTL MACRO COMMAND SYNTAX MACRO SCALL GSWIT,<1> FLDBEG MINIT1 TSTCFLG OPTEND REQCOMMA GOTO MINIT2 MINIT1: PROMPT $FILE REQBLNK MINIT2: FILQUAL INSPEC SAVNAM SCALL GSWIT,<1,2> FLDBEG REQPLUS SCALL RINSPC,<1,2> ITEREND MAKOFL FOTYP MAKOFL SOTYP CEOLSEQ MACRO END SWITS MACRO SWIT OBJECT 1 - - FOT SWIT SHOW 1 MACRO - L,,VAL ENDNO SWIT LIST 1 - - SOT SWIT ENABLE 1 MACRO - E,,VAL SWIT DISABLE 1 MACRO - D,,VAL SWIT CROSSREFERENCE 1 MACRO - C,,VAL SWIT LIBRARY 2 MACRO - M SWIT PASS 2 MACRO - P,,DVAL SWIT ALLOCATE 1 - - ALL NOS SWIT NOOBJECT 1 - - NOO SWIT NOSHOW 1 MACRO - N,,VAL ENDS MACMOR: OINST MOV CNMPTR,R5,* OVCMD MACRO OINST MOV R5,CNMPTR,,* ITBLE 9. OJSR PC,INITIT OINST INCB COMPFL,,* OINST MOV R5,CSTPTR,,* OJSR PC,CMDMAK OINST TSTB @CSTPTR,,* BNE MACMOR OJMP STRT .ENDC .IF NE DIBO$$ .SBTTL DIBOL COMMAND SYNTAX DIBOL SCALL GSWIT,<1> FLDBEG DINIT1 TSTCFLG OPTEND REQCOMMA GOTO DINIT2 DINIT1: PROMPT $FILE REQBLNK DINIT2: FILQUAL INSPEC SAVNAM SCALL GSWIT,<1> FLDBEG REQPLUS SCALL RINSPC,<1> ITEREND MAKOFL FOTYP MAKOFL SOTYP CEOLSEQ DICOMP END SWITS DIBOL SWIT OBJECT 1 - - FOT SWIT WARNINGS 1 - - - SWIT LINENUMBERS 1 - - - ENDNO SWIT LIST 1 - - SOT SWIT ALPHABETIZE 1 - - A SWIT ONDEBUG 1 - - D SWIT CROSSREFERENCE 1 - - C SWIT ALLOCATE 1 - - ALL SWIT LOG 1 - - G SWIT PAGE 1 - - P,,DVAL SWIT TABLES 1 - - S NOS SWIT NOOBJECT 1 - - NOO SWIT NOWARNINGS 1 - - W SWIT NOLINENUMBERS 1 - - O ENDS DIBMOR: OINST MOV CNMPTR,R5,* OVCMD DIBOL OINST MOV R5,CNMPTR,,* ITBLE 9. OJSR PC,INITIT OINST INCB COMPFL,,* OINST MOV R5,CSTPTR,,* OJSR PC,CMDMAK OINST TSTB @CSTPTR,,* BNE DIBMOR OJMP STRT .ENDC .IF NE FORT$$ .SBTTL FORTRAN COMMAND SYNTAX FORTRAN SCALL GSWIT,<1> FLDBEG FORT1 TSTCFLG OPTEND REQCOMMA GOTO FORT2 FORT1: PROMPT $FILE REQBLNK FORT2: FILQUAL INSPEC SAVNAM SCALL GSWIT,<1> FLDBEG REQPLUS SCALL RINSPC,<1> ITEREND MAKOFL FOTYP MAKOFL SOTYP CEOLSEQ FORTRAN,FORTRAN END SWITS FORTRAN SWIT OBJECT 1 - - FOT SWIT LINENUMBERS 1 FORTRA - - SWIT SWAP 1 - - - SWIT VECTORS 1 FORTRA - - SWIT OPTIMIZE 1 FORTRA - P,,VAL SWIT WARNINGS 1 FORTRA - W ENDNO SWIT FORTRAN 1 - FORTRA - SWIT ONDEBUG 1 - - D SWIT EXTEND 1 FORTRA - E SWIT STATISTICS 1 FORTRA - A SWIT UNITS 1 - - N,,DVAL SWIT HEADER 1 FORTRA - O SWIT DIAGNOSE 1 FORTRA - B,,VAL SWIT CODE 1 FORTRA - I,,VAL SWIT RECORD 1 - - R,,DVAL SWIT LIST 1 - - SOT SWIT I4 1 - - T SWIT SHOW 1 - - L,,VAL SWIT ALLOCATE 1 - - ALL NOS SWIT NOOBJECT 1 - - NOO SWIT NOLINENUMBERS 1 FORTRA - S SWIT NOSWAP 1 - - U SWIT NOVECTORS 1 FORTRA - V SWIT NOOPTIMIZE 1 FORTRA - M,,VAL SWIT NOWARNINGS 1 FORTRA - - ENDS FORMOR: OINST MOV CNMPTR,R5,* FORT: OINST MOV R5,CNMPTR,,* ITBLE 9. OJSR PC,INITIT OINST INCB COMPFL,,* OINST MOV R5,CSTPTR,,* OJSR PC,CMDMAK OINST TSTB @CSTPTR,,* BNE FORMOR OJMP STRT .ENDC .IF NE COMP$$ .SBTTL COMPILE COMMAND SYNTAX COMPILE SCALL GSWIT,<1> FLDBEG COMP1 TSTCFLG OPTEND REQCOMMA GOTO COMP2 COMP1: PROMPT $FILE REQBLNK COMP2: FILQUAL INSPEC SAVNAM SCALL GSWIT,<1,2> FLDBEG REQPLUS SCALL RINSPC,<1,2> ITEREND MAKOFL FOTYP MAKOFL SOTYP FILTYPR $COMPSTR CEOLSEQ FORTRAN,FORTRAN COMPDEF APLYDEF FORTRAN,NMS,S APLYDEF DICOMP,NMS,O APLYDEF FORTRAN,WRP,W APLYDEF DICOMP,WRN,W END SWITS COMPILE SWIT OBJECT 1 - - FOT SWIT SHOW 1 - - L,,VAL SWIT LINENUMBERS 1 - - - SWIT SWAP 1 - - - SWIT VECTORS 1 FORTRA - - SWIT OPTIMIZE 1 FORTRA - P,,VAL SWIT WARNINGS 1 - - - WRP ENDNO SWIT FORTRAN 1 - FORTRAN - SWIT MACRO 1 - MACRO - SWIT DIBOL 1 - DICOMP - SWIT LIST 1 - - SOT SWIT ENABLE 1 MACRO - E,,VAL SWIT DISABLE 1 MACRO - D,,VAL SWIT CROSSREFERENCE 1 - - C,,VAL SWIT ALPHABETIZE 1 DICOMP - A SWIT LOG 1 DICOMP - G SWIT PAGE 1 DICOMP - P,,DVAL SWIT TABLES 1 DICOMP - S SWIT ONDEBUG 1 - - D SWIT EXTEND 1 FORTRA - E SWIT STATISTICS 1 FORTRA - A SWIT UNITS 1 - - N,,DVAL SWIT HEADER 1 FORTRA - O SWIT CODE 1 FORTRA - I,,VAL SWIT DIAGNOSE 1 FORTRA - B,,VAL SWIT RECORD 1 - - R,,DVAL SWIT I4 1 - - T SWIT LIBRARY 2 MACRO - M SWIT PASS 2 MACRO - P,,DVAL SWIT ALLOCATE 1 - - ALL NOS SWIT NOOBJECT 1 - - NOO SWIT NOSHOW 1 MACRO - N,,VAL SWIT NOLINENUMBERS 1 - - - NMS SWIT NOSWAP 1 - - U SWIT NOVECTORS 1 FORTRA - V SWIT NOOPTIMIZE 1 FORTRA - M,,VAL SWIT NOWARNINGS 1 - - - WRN ENDS COMMOR: OINST MOV CNMPTR,R5,* COMPL1: OINST MOV R5,CNMPTR,,* ITBLE 9. OJSR PC,INITIT OINST INCB COMPFL,,* OINST MOV R5,CSTPTR,,* OJSR PC,CMDMAK OINST TSTB @CSTPTR,,* BNE COMMOR OJMP STRT .ENDC .IF NE COMP$$!MACR$$!FORT$$!DIBO$$ .IRP NUM,<\$OPTX> OPTX'NUM:: .ENDR .BYTE -1 .DSABL CRF $SCNT=0 SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF
FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT .EVEN .ENABL CRF NEXTL .ENDC .IF NE EXEC$$ .SBTTL EXECUTE COMMAND OVERLAY SYNTAX EXECUTE SCALL GSWIT,<1> FLDBEG EXEC1 TSTCFLG OPTEND REQCOMMA GOTO EXEC2 EXEC1: PROMPT $FILE REQBLNK EXEC2: FILQUAL INSPEC SAVNAM SCALL GSWIT,<1,2> FLDBEG REQPLUS SCALL RINSPC,<1,2> ITEREND MAKOFL FOTYP MAKOFL SOTYP FILTYPR $COMPSTR CEOLSEQ FORTRAN,FORTRAN COMPDEF APLYDEF FORTRAN,NMS,S APLYDEF DICOMP,NMS,O APLYDEF FORTRAN,WRP,W APLYDEF DICOMP,WRN,W END SWITS EXECUTE SWIT SHOW 1 - - L,,VAL SWIT LINENUMBERS 1 - - - SWIT SWAP 1 - - - SWIT VECTORS 1 FORTRA - - SWIT OPTIMIZE 1 FORTRA - P,,VAL SWIT WARNINGS 1 - - - WRP SWIT RUN 1 - - - ENDNO SWIT FORTRAN 1 - FORTRAN - SWIT MACRO 1 - MACRO - SWIT DIBOL 1 - DICOMP - SWIT OBJECT 1 - - FOT SWIT LIST 1 - - SOT SWIT ENABLE 1 MACRO - E,,VAL SWIT DISABLE 1 MACRO - D,,VAL SWIT CROSSREFERENCE 1 - - C,,VAL SWIT ALPHABETIZE 1 DICOMP - A SWIT LOG 1 DICOMP - G SWIT PAGE 1 DICOMP - P,,DVAL SWIT TABLES 1 DICOMP - S SWIT ONDEBUG 1 - - D SWIT EXTEND 1 FORTRA - E SWIT STATISTICS 1 FORTRA - A SWIT UNITS 1 - - N,,DVAL SWIT HEADER 1 FORTRA - O SWIT CODE 1 FORTRA - I,,VAL SWIT DIAGNOSE 1 FORTRA - B,,VAL SWIT RECORD 1 - - R,,DVAL SWIT I4 1 - - T SWIT LIBRARY 2 MACRO - M SWIT PASS 2 MACRO - P,,DVAL SWIT ALLOCATE 1 - - ALL SWIT PROMPT 1 - - LNK SWIT WIDE 1 - - LNK SWIT BOTTOM 1 - - LNK SWIT LINKLIBRARY 1 - - LNK SWIT DEBUG 1 - - LNK SWIT EXECUTE 1 - - LNK SWIT MAP 1 - - LNK SWIT DUPLICATE 1 - - LNK SWIT GLOBAL 1 - - LNK NOS SWIT NOSHOW 1 MACRO - N,,VAL SWIT NOLINENUMBERS 1 - - - NMS SWIT NOSWAP 1 - - U SWIT NOVECTORS 1 FORTRA - V SWIT NOOPTIMIZE 1 FORTRA - M,,VAL SWIT NOWARNINGS 1 - - - WRN SWIT NORUN 1 - - NOR ENDS .ENABL LSB 1$: OINST MOV CNMPTR,R5,* OVCMD EXECUTE OINST MOV R5,CNMPTR,,* CLRB EXEOPT ITBLE 9. OJSR PC,INITIT OINST INCB EXEFLG,,* OINST INCB COMPFL,,* OINST MOV R5,CSTPTR,,* MOV (SP)+,R4 JSR R4,8$ MOV R1,-(SP) OINST MOVB EXEDEL,R0,* OINST MOVB #COMMA,EXEDEL,,* 2$: CMPB #'[,R0 BEQ 4$ CALL EXECHR 3$: MOVB (R1)+,R0 BEQ 3$ BPL 2$ 4$: ADDR EXEOPT,R1 5$: MOVB (R1)+,R0 BEQ 6$ CALL EXECHR BR 5$ 6$: MOV (SP)+,R1 7$: RETURN 8$: OINST MOV R4,EXEESC,,* OJSR PC,CMDMAK OINST TSTB @CSTPTR,,* BNE 1$ OINST TSTB RUNFLG,,* BNE 11$ MOV (SP)+,R1 JSR R1,10$ .ASCIZ "/RU" 9$: CALL EXECHR 10$: MOVB (R1)+,R0 BNE 9$ 11$: CLR R0 CALL EXECHR ADDR 13$,R1 OADDR KMCBUF,R5 MOV R5,R0 12$: MOVB -(R1),-(R0) BNE 12$ CLRB -(R0) OJMP CMDREC EXELSZ = 120. EXECHR: JSR R0,13$ .BLKB EXELSZ .ASCII "KNIL" 13$: OINST ADD EXEPTR,R0,* MOVB (SP)+,@R0 OINST DECB EXEPTR,,* BGE 7$ 14$: OJMP TCERR OVALNK: INC R5 15$: CMPB #'/,(R5)+ BNE 15$ MOVB -(R5),R0 16$: OINST TSTB QUALFL,,* BEQ 17$ OINST MOVB EXEPT2,R1,* CMPB #EXEND-EXEOPT,R1 BLE 14$ ADDR EXEOPT,R1,ADD MOVB R0,(R1)+ CLRB @R1 OINST INCB EXEPT2,,* BR 18$ 17$: OINST TSTB COMPFL,,* BNE 18$ CALL EXECHR 18$: MOVB -(R5),R0 BEQ 19$ CMPB #'/,R0 BEQ 19$ CMPB #' ,R0 BEQ 19$ CMPB #',,R0 BEQ 19$ CMPB #'+,R0 BNE 16$ 19$: RETURN EXEOPT: .BLKB 59. EXEND: .BYTE 0 .DSABL LSB .IRP NUM,<\$OPTX> OPTX'NUM:: .ENDR .BYTE -1 .DSABL CRF $SCNT=0 SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF
FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT .EVEN .ENABL CRF NEXTL .ENDC .SBTTL LINK OVERLAY .IIF EQ LNK$IF, .NLIST .IF NE LNK$IF OVCMD LAT1 CALLR LAT1A OVCMD LAT2 CALLR LAT2A .ENDC .IIF EQ LNK$IF, .LIST .IF NE LINK$$ SYNTAX LINK SCALL GSWIT,<1> PROMPT $FILE REQBLNK FILQUAL INSPEC SAVNAM SCALL GSWIT,<1> FLDBEG REQCOMMA SCALL RINSPC,<1> ITEREND MAKOFL FOTYP MAKOFL SOTYP MAKOFL TOTYP EOLSEQ LINK END SWITS LINK SWIT EXECUTE 1 - - FOT SWIT BITMAP 1 - - - ENDNO SWIT MAP 1 - - SOT SWIT SYMBOLTABLE 1 - - TOT SWIT LIBRARY 1 - - LIB SWIT LINKLIBRARY 1 - - LIB SWIT DEBUG 1 - - DEB SWIT RUN 1 - - NOR SWIT INCLUDE 1 - - I SWIT FOREGROUND 1 - - R,,VAL SWIT FILL 1 - - Z,,VAL SWIT WIDE 1 - - W SWIT SLOWLY 1 - - S SWIT LDA 1 - - L SWIT STACK 1 - - M,,VAL SWIT BOTTOM 1 - - B,,VAL SWIT TRANSFER 1 - - T,,VAL SWIT EXTEND 1 - - E,,VAL SWIT ROUND 1 - - U,,VAL SWIT BOUNDARY 1 - - Y,,VAL SWIT ALPHABETIZE 1 - - A SWIT TOP 1 - - H,,VAL SWIT ALLOCATE 1 - - ALL SWIT PROMPT 1 - - / SWIT XM 1 - - V,,VAL SWIT GLOBAL 1 - - N SWIT DUPLICATE 1 - - D SWIT LIMIT 1 - - K,,DVAL NOS SWIT NOEXECUTE 1 - - NOO SWIT NOBITMAP 1 - - X ENDS OVCMD LINK ITBLE 9. OJSR PC,INITIT OINST INCB LNKFLG,,* OINST TSTB RUNFLG,,* BNE 1$ OJMP CMDEXE 1$: OINST CLRB EXEFLG,,* CALL 10$ MOV R1,-(SP) MOV R2,-(SP) ADDR LNKSAV,R0 3$: MOVB (R1)+,R2 BEQ 3$ BMI 5$ CMPB #'[,R2 BEQ 5$ MOVB R2,(R0)+ BR 3$ 5$: CLRB @R0 MOV (SP)+,R2 MOV (SP)+,R1 RETURN 10$: OINST MOV (SP)+,EXEESC,,* OJSR PC,CMDMAK ADDR RUNCMD,R1 CLR R0 11$: INC R0 TSTB (R1)+ BNE 11$ OJSR PC,DCLSPC ADDR RUNCMD,R0 14$: MOVB (R0)+,(R1)+ BNE 14$ OJMP STRT RUNCMD: .ASCII "RUN " LNKSAV: .BLKB 16. .EVEN OVADEB: OJSR PC,MULSZI MOV R0,R1 OADDR FILST,R2 ADD #FSIZ,R1 BR 2$ 1$: MOVB -(R0),-(R1) 2$: CMP R0,R2 BNE 1$ CLR R1 CMPB #':,@R5 BEQ 3$ MOV R5,-(SP) OADDR DUMYNM,R5 OJSR PC,INSPC1 MOV (SP)+,R5 RETURN 3$: OJMP INSPC1 OVALIB: CMPB #':,@R5 BEQ 1$ RETURN 1$: OJMP INSPEC .ENDC .IIF EQ LINK$$,.LIST .IF NE LIBR$$ .SBTTL LIBRARY COMMAND SYNTAX LIBRARY .IIF LE 50-$QUAL, .ERROR $QUAL = 50 SCALL GSWIT,<1> PROMPT $LIBR REQBLNK ROUTINE FIC FILQUAL INSPEC SAVNAM SCALL GSWIT,<1> CMDQUAL PROMPT $FILEE CNDROUT FIL,EXT PROMPT $FILE CNDROUT FIL,CRL CNDROUT FIL,INL FLDBEG LIBR1 REQBLNK SCALL RINSPC,<1,2> OPTEND FLDBEG REQCOMMA SCALL RINSPC,<1,2> ITEREND LIBR1: CNDROUT EXT,EXT CNDROUT CRL,CRL MAKOFL SOTYP ROUTINE LST ROUTINE LOB EOLSEQ LIBR END SWITS LIBRARY SWIT OBJECT 1 - - FOT ENDNO SWIT INSERT 1 - - - INL SWIT DELETE 1 - - D SWIT REMOVE 1 - - G SWIT CREATE 1 - - - CRL SWIT LIST 1 - - SOT SWIT MACRO 1 - - MAC,,DVAL SWIT EXTRACT 1 - - - EXT SWIT ALLOCATE 1 - - ALL SWIT PROMPT 1 - - / SWIT REPLACE 2 - - R SWIT UPDATE 2 - - U NOS SWIT NOOBJECT 1 - - NOO ENDS OVCMD LIBRARY ITBLE 9. OJSR PC,INITIT OINST INCB LNKFLG,,* OJMP CMDEXE OVACRL: CALL FNDIN CLRB @R1 RETURN OVAMAC: OINST BISB #$CRL50,DEFMSK,,* MOVB #'M,R2 OJMP ESWIT OVAEXT: CALL FNDIN CALL FNDIN2 BNE 1$ MOVB #FOTYP,@R1 1$: OINST INCB FOTFLG,,* MOVB #'E,R2 CLR R1 CLR R3 OJMP ESWIT FNDIN: OADDR FILST+STFLG-FSIZ,R1 OINST MOVB FILNUM,R2,* FNDIN2: DECB R2 BMI 1$ ADD #FSIZ,R1 CMPB #ITYP,@R1 BNE FNDIN2 1$: RETURN OVAFIC: OINST TSTB SCNTFL,,* BNE 1$ OINST BISB #$INL50,DEFMSK,,* 1$: RETURN OVALST: OINST CMPB SCNTFL,#1,* BNE 1$ OINST TSTB SOTFLG,,* BMI 1$ OINST INCB FOTFLG,,* 1$: RETURN OVAFIL: OJMP REQBLNK OVALOB: OINST TSTB FOTFLG,,* BNE 2$ MOV R5,-(SP) OADDR DUMYNM,R5 OJSR PC,OUTSPEC MOV (SP)+,R5 MOV R0,R1 SUB #FSIZ,R1 OADDR SAVNM,R3 MOV (R3)+,(R1)+ MOV (R3)+,(R1)+ OINST MOV FOTDV1,R2,* BEQ 1$ MOV R2,-4(R1) OINST MOV FOTDV2,-2(R1),* 1$: MOV (R3)+,(R1)+ MOV (R3)+,(R1)+ MOV (R3)+,(R1)+ MOV (R3)+,(R1)+ MOV (R3)+,(R1)+ MOVB #FOTYP,-(R0) 2$: RETURN .ENDC .IIF EQ LNK$IF, .NLIST .IF NE LNK$IF .SBTTL LINK OVERLAY INDIRECT FILE SUPPORT (CONT'D) .ENABL LSB LAT1A: MOV (SP)+,R0 OADDR KMCBUF,R5 MOV R5,R1 MOV R5,R3 ADD #KMCBFLN,R3 1$: TSTB -(R5) BNE 1$ 2$: MOVB (R5)+,(R3)+ CMP R5,R1 BNE 2$ OINST MOV R3,OLDLIN,,* MOV R1,-(SP) SUB R3,@SP MOV @SP,R1 OINST MOV (SP)+,KBFLN,,* OINST BIS #IFLIF,@.STATWD,,* OINST CLR ACCUM,,* DEC R1 BMI 6$ MOVB #ATSIGN,-(R5) 3$: DEC R1 BMI 6$ MOVB (R0)+,-(R5) BMI 4$ BNE 3$ CMPB (R1)+,(R5)+ BR 3$ 4$: CLRB (R5)+ OADDR KMCBUF,R5 OJMP LNKAT1 LAT2A: MOV (SP)+,R0 SUB R0,@SP OADDR KMCBUF,R5 OINST MOV OLDLIN,R3,* SUB R0,R3 5$: MOVB -(R3),-(R5) BNE 5$ OADDR KMCBUF,R5 RETURN 6$: OJMP LTL .DSABL LSB .ENDC .IIF EQ LNK$IF, .LIST .IF NE LIBR$$!LINK$$ .IRP NUM,<\$OPTX> OPTX'NUM:: .ENDR .BYTE -1 .DSABL CRF $SCNT=0 SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT .EVEN .ENABL CRF NEXTL .ENDC OVERLAY .SBTTL SHOW and BACKUP .IF NE BACK$$ OVCMD BACKUP CALLR BAC1 .ENDC .IF NE SHOW$$ SYNTAX SHOW FLDBEG SHOWA SCALL GSWIT1,<1> OPTEND GOTO SHOWB SHOWA: SETSWIT L EOLSEQ RESORC SHOWB: END SWITS SHOW ENDNO SWIT DEVICES 1 - RESORC DEV SWIT CONFIGURATION 1 - RESORC Z SWIT TERMINALS 1 - RESORC T SWIT JOBS 1 - RESORC J SWIT ALL 1 - RESORC A SWIT SUBSET 1 - RESORC S SWIT MEMORY 1 - RESORC X SWIT QUEUE 1 - RESORC Q SWIT USERS 1 - RESORC U SWIT ERRORS 1 - ERROUT - SWIT COMMANDS 1 - UCL - NOS ENDS .ENABL LSB OVCMD SHOW TSTB @R5 BEQ 1$ CMPB @R5,#SPACE BNE 2$ MOVB #SLASH,@R5 1$: ITBLE 1 OJSR PC,INITIT OINST MOV FORCEP,R0,* BIC #^C<37>,R0 CMPB #$$ERRO,R0 BEQ SHWERR CMPB #<$$UCL>,R0 BEQ SHWCMD TSTB @R5 BEQ 3$ 2$: OJMP BADCOM 3$: OJMP CMDEXE OVADEV: CMPB #':,@R5 BNE 4$ OJSR PC,INSPEC 4$: MOVB #'D,R2 CLR R1 CLR R3 OJMP ESWIT .DSABL LSB .IRP NUM,<\$OPTX> OPTX'NUM:: .ENDR .BYTE -1 .DSABL CRF $SCNT=0 SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT .EVEN .ENABL CRF NEXTL SYNTAX SHWCMD SCALL GSWIT,<1> DEFOSPC $TTSPC EOLSEQ UCL END SWITS SHWCMD ENDNO SWIT PRINTER 1 UCL - PRI SWIT TERMINAL 1 UCL - TER SWIT OUTPUT 1 UCL - OUT NOS ENDS SHWCMD: ITBLE 2 OJSR PC,INITIT OJMP CMDEXE .IRP NUM,<\$OPTX> OPTX'NUM:: .ENDR .BYTE -1 .DSABL CRF $SCNT=0 SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT .EVEN .ENABL CRF NEXTL SYNTAX SHWERR SCALL GSWIT,<1> DEFOSPC $TTSPC EOLSEQ ERROUT END SWITS SHWERR ENDNO SWIT ALL 1 ERROUT - A SWIT SUMMARY 1 ERROUT - S SWIT FROM 1 ERROUT - F,,DVAL SWIT TO 1 ERROUT - T,,DVAL SWIT PRINTER 1 ERROUT - PRI SWIT TERMINAL 1 ERROUT - TER SWIT OUTPUT 1 ERROUT - OUT SWIT FILE 1 ERROUT - ELF NOS ENDS SHWERR: ITBLE 3 CLR ELINSP OJSR PC,INITIT OINST CMPB FILNUM,#3,* BNE 1$ TST ELINSP BNE 1$ OJMP CNFSWT 1$: OJMP CMDEXE OVAELF: CMPB #':,@R5 BNE 1$ OJSR PC,INSPEC INC ELINSP 1$: RETURN ELINSP: .WORD 0 .IRP NUM,<\$OPTX> OPTX'NUM:: .ENDR .BYTE -1 .DSABL CRF $SCNT=0 SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT .EVEN .ENABL CRF NEXTL .ENDC .IF NE BACK$$ .SBTTL BACKUP SYNTAX BACKUP PROMPT $FROM SCALL GSWIT,<1> REQBLNK SCALL RINSPC,<1> FLDBEG SCALL CSPISPC,<1> ITEREND PROMPT $TO FLDBEG BACK1 OPTEND GOTO BACK2 BACK1: REQBLNK BACK2: SCALL ROUSPC,<1> EOLSEQ BUP END SWITS BACKUP SWIT LOG 1 - - - SWIT REWIND 1 - - - SWIT SCAN 1 - - - SWIT QUERY 1 - - - ENDNO SWIT DEVICE 1 - - I SWIT RESTORE 1 - - X SWIT VERIFY 1 - - V,,VAL SWIT FILES 1 - - F SWIT INITIALIZE 1 - - Z SWIT SAVESET 1 - - S NOS SWIT NOLOG 1 - - W SWIT NOREWIND 1 - - M SWIT NOSCAN 1 - - G SWIT NOQUERY 1 - - Y ENDS BAC1: ITBLE 3 OJSR PC,INITIT OJMP CMDEXE .IRP NUM,<\$OPTX> OPTX'NUM:: .ENDR .BYTE -1 .DSABL CRF $SCNT=0 SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT SWTDEF FLGTXT .EVEN .ENABL CRF NEXTL .ENDC .SBTTL REENTER & START OVERLAY .ENABL LSB .IF NE REEN$$ OVCMD REENTER BIT #,@#JSW BEQ BDCOM MOV #<-2>,R2 BR STRE .ENDC .IF NE STAR$$ OVCMD START CMPB @R5,# BEQ 5$ INC R5 5$: OJSR PC,OCTNUM TSTB @R5 BNE BDCOM MOV (SP)+,R2 BNE GOTADR .ENDC OVCMD STRE ADD @#USERPC,R2 GOTADR: MOV PC,-(SP) ADD #-<.-OVLYST>,@SP .IF NE MMG$T OINST SUB VBIAS,@SP,* .ENDC BIC #<777>,@SP OINST MOV @.$SWPBL,-(SP),* MOV R0,-(SP) OVCMD RUNCHK .Assume IN$IND EQ 200 OINST TSTB @.INDSTA,,* BPL 10$ OADDR INPFN+2,R0 CMP #<^RIND>,(R0)+ BNE 10$ TST (R0)+ BNE 10$ CMP #<^RSAV>,(R0)+ BEQ INVCNS 10$: MOV (SP)+,R0 BIT #CHAIN$,@#JSW BNE 15$ .IF NE BF .SRESET .IFF MOV R2,-(SP) OJSR PC,RSTSRS MOV (SP)+,R2 .ENDC 15$: MOV (SP)+,R1 MOV (SP)+,R3 MOV @#SYSPTR,R5 OJMP BEGIN INVCNS: KMEROR BDCOM: OJMP BADCOM .DSABL LSB .SBTTL GET PART 2 (ALSO USED BY RUN) .ENABL LSB .IF NE U$CL OVCMD GETUCL .IF NE BF .SRESET .IFF MOV R2,-(SP) OJSR PC,RSTSRS MOV (SP)+,R2 .ENDC .ENDC OVCMD GET1 MOV (SP)+,R0 OJSR PC,COPYFN OADDR KMCBUF,R2 .LOOKUP CHOVLY BCC 10$ CMP #,@R2 BEQ 5$ MOV #,@R2 .IF EQ U$CL BR BDCOM .IFF OVCMD UCL MOV @#SYSPTR,R0 BITB #UCLON,CLIFLG-$RMON(R0) BEQ BDCOM MOVB #UCLRUN,CLITYP-$RMON(R0) MOV R2,-(SP) CALL STUFIT ADDR UCLNAM,R0 BR 3$ OVCMD UCF MOV R2,-(SP) CALL STUFIT ADDR UCFNAM,R0 3$: MOV R0,R3 OJMP UCLROT .ENDC 5$: OJMP NOTFND 10$: MOV #,@R2 BIT #CHAIN$,@#JSW BNE 45$ TSTB @R5 BEQ 15$ MOV #-1,@#506 15$: INC R5 20$: OJSR PC,ALPHNT BCS 20$ MOV R5,R2 CALL STUFIT TSTB @R5 BEQ 45$ CMPB #SPACE,@R5 BNE BDCOM OADDR FILST,R0 MOV R0,R2 MOV R5,R4 25$: TSTB -(R5) BEQ 35$ CMPB #SPACE,@R5 BNE 25$ CLRB @R5 30$: MOVB -(R5),(R0)+ BNE 30$ MOVB #'=,-1(R0) 35$: MOVB -(R4),(R0)+ BNE 35$ MOVB #'C&77,(R0)+ CLRB (R0)+ SUB R2,R0 MOV R0,R5 OJSR PC,DCLSPC SUB R0,R2 SUB R0,@SP 40$: MOVB (R2)+,(R1)+ DEC R5 BNE 40$ 45$: OJSR PC,CCBB0 CLR R5 ASL R1 MOV #200,R4 CLRSB: CLR R0 GETBIT: RORB R4 BCS ORCCB INC R5 BITB R4,@R2 BEQ GETBNU TST R0 BNE GETBIT MOV R5,R0 BR GETBIT GETBNU: TST R0 BEQ GETBIT OADDR KMON,R4,PUSH MOV R5,-(SP) .IF NE MMG$T OINST SUB VBIAS,R4,* .ENDC CLRB R4 SWAB R4 ASR R4 CMP R5,R4 BLE NOSCRA CMP R0,R4 BGE ALSCRA MOV R4,R5 CALL READSF MOV R4,R0 ALSCRA: SUB R4,R0 ADD R0,R4 ALSCR1: MOV @SP,R5 SUB R4,R5 BLE ENDSCR MOV R5,-(SP) ADD R0,@SP CMP (SP)+,#SWAPSZ BHI OVERC1 MOV R0,-(SP) MOV R4,R0 CLR -(SP) MOV #1000,-(SP) DEC R5 BNE 50$ ASR @SP 50$: OADDR SYSIOB+2,R5 MOV @SP,@R5 NEG @R5 MOV -(R5),-(SP) EMT 200+CHOVLY SFELNK: BCS SFERR1 MOV @SP,R0 OJSR PC,SYSK MOV (SP)+,R0 CMPB (R0)+,(R0)+ CMPB (R4)+,(R4)+ BR ALSCR1 NOSCRA: CALL READSF ENDSCR: MOV (SP)+,R5 MOV (SP)+,R4 BR CLRSB ORCCB: BISB (R2)+,(R3)+ DEC R1 BNE GETBIT RETRED: RETURN READSF: CLR -(SP) SUB R0,R5 SWAB R5 MOV R5,-(SP) MOV R0,-(SP) SWAB @SP ASL @SP .IF NE MMG$T OINST ADD VBIAS,@SP,* .ENDC EMT 200+CHOVLY SFELK1: BCC RETRED SFERR1: OJMP FIPERR OVERC1: OJMP OVERC .DSABL LSB .SBTTL Scan line for @file (continued) .ENABL LSB OVCMD AT2 MOV R5,-(SP) TSTB (R5)+ CMPB (R5)+,# BNE 5$ TSTB (R5)+ 5$: CMPB -(R5),# BNE 10$ MOVB #,@R5 10$: MOV (SP)+,R5 MOV R5,-(SP) INC @SP 15$: CMPB -(R5),# BEQ 15$ INC R5 OINST MOV .STATWD,R3,* BIT #,@R3 BNE 25$ OINST BITB #,@.INDSTA,,* BEQ 20$ OINST BITB #,@.INDSTA,,* BNE 25$ 20$: OADDR KMCBUF,R2 CMP R2,@SP BNE 25$ BIT #,@R3 BNE 40$ 25$: OINST BICB #,@.INDSTA,,* OINST CLR @.CURLEV,,* BIC #,@R3 BIT #,@R3 BEQ 30$ OJSR PC,SVST CMP -(R2),-(R2) CMPB -(R2),-(R2) BEQ 65$ MOV @R2,-(SP) ADD #IFSVSZ,R2 MOV (SP)+,@R2 INC (R2)+ CLR (R2)+ CLR (R2)+ OINST MOV R2,@.IFSVST,,* ..ATDK == .+2 30$: MOV #<^RDK >,R3 OJSR PC,IFILE INC R5 35$: CMPB -(R5),#SPACE BEQ 35$ TSTB @R5 BNE 60$ OINST MOV ACCUM,-(SP),* OJMP AT3 40$: TSTB -1(R5) BEQ 70$ OINST MOV SP,@.CURLEV,,* MOV #,R1 OADDR INDCNT+2,R0 MOV (R0)+,(R1)+ MOV (R0)+,(R1)+ OINST MOV NMIND,R0,* CALL INDDNM 45$: CMPB #,-(R1) BEQ 45$ TSTB (R1)+ OADDR INDCNT+11,R0 50$: MOVB (R0)+,(R1)+ BNE 50$ MOVB #,-1(R1) 55$: MOVB -(R5),(R1)+ BNE 55$ SUB #,R1 MOV R1,@#CHAINA BIS #,@#JSW .IF NE MMG$T BIC #,@#JSW .ENDC CLR R0 .EXIT 60$: OJMP BADCOM 65$: KMEROR 70$: OJMP NOFILE .DSABL LSB .SBTTL INDDNM - RAD50 to ASCII conversion routine .WORD 0,1,50 TBL: .WORD 50*50 .ENABL LSB INDDNM: MOV R4,-(SP) MOV R3,-(SP) 5$: ADDR TBL,R3 10$: MOV #<-1>,R4 CMP #<174777>,R0 BLO 20$ 15$: INC R4 SUB @R3,R0 BCC 15$ ADD @R3,R0 TST R4 BEQ 25$ CMP #<33>,R4 BLO 30$ BEQ 35$ 20$: ADD #<40>,R4 25$: ADD #<16>,R4 30$: ADD #<11>,R4 35$: ADD #<11>,R4 MOVB R4,(R1)+ TST -(R3) BNE 10$ MOV (SP)+,R3 MOV (SP)+,R4 RETURN .DSABL LSB .SBTTL UCL/UCF customizations and copy routine .IF NE U$CL ..UCFD == . ..UCFF == .+2 UCFNAM: .RAD50 /SY UCF SAV/ ..UCLD == . ..UCLF == .+2 UCLNAM: .RAD50 /SY UCL SAV/ .ENDC .ENABL LSB STUFIT: MOV #,R0 5$: MOVB -(R2),(R0)+ BNE 5$ SUB #,R0 MOV R0,@# RETURN .DSABL LSB .SBTTL FACTOR - Factoring expander routine OVERLAY .IF NE SAVE$$ OVCMD SAV1 CALLR SAVP2 .ENDC .ENABL LSB OVCMD FACTOR MOV R5,R0 1$: INC R5 CALL TESTD1 BNE 1$ MOV R5,R1 OADDR FILST,R5 MOV R5,R3 MOV R0,R4 2$: MOVB -(R4),(R5)+ BNE 2$ MOV R3,R5 3$: CALL TESTD2 INC R5 BCC 3$ MOV R5,R4 MOV R1,R5 4$: MOV R1,R2 5$: CMP R5,@SP BLO 11$ MOVB -(R2),-(R5) CMP R2,R0 BNE 5$ INC R5 6$: CMP R5,@SP BLO 11$ MOVB (R3)+,-(R5) BEQ 12$ CALL TESTD2 BNE 6$ INC R5 BCS 9$ MOV R4,R2 7$: CMP R5,@SP BLO 11$ MOVB (R2)+,-(R5) CALL TESTD1 BEQ 8$ CMPB #'/,@R5 BNE 7$ 8$: MOVB -1(R3),@R5 BR 4$ 9$: MOV R5,R1 10$: CMP R1,@SP BLO 11$ MOVB (R3)+,-(R1) BNE 10$ OJMP SCNLIN 11$: OJMP LTL 12$: OJMP CLASIFY .DSABL LSB .ENABL LSB TESTD2: CMPB #'),@R5 BEQ 1$ TESTD1: CMPB #',,@R5 BEQ 2$ CMPB #SPACE,@R5 BEQ 2$ CMPB #'+,@R5 BEQ 2$ TSTB @R5 BNE 2$ 1$: SEC 2$: RETURN .DSABL LSB .IF NE SAVE$$ .SBTTL SAVE (PART 2) SAVP2: MOV #9.*400+8.,R4 OADDR FILST,R1 MOV @#USERTOP,(R1)+ MOV @#SYSPTR,R3 ADD #CCB-$RMON,R3 2$: MOV (R3)+,(R1)+ DECB R4 BNE 2$ TSTB @R5 BEQ DOSAVE SWAB R4 3$: CLR -(R1) DEC R4 BNE 3$ MOV R1,R3 4$: TSTB @R5 BEQ DOSAVE CMPB #' ,@R5 BEQ 5$ CMPB #',,@R5 BNE BADSAV 5$: CALL SAVNUM MOV R4,R2 CMPB @R5,#'- BNE 6$ CALL SAVNUM CMP R4,R2 BLO BADSAV 6$: MOV R3,R0 CMP (R0)+,R4 BHI 7$ MOV @#SYSPTR,R1 CMP R4,SYSLOW-$RMON(R1) BHIS BADSAV MOV R4,@R3 7$: OJSR PC,NOTHIR BR 4$ DOSAVE: OADDR KMON,R4 CLRB R4 SWAB R4 ASR R4 OINST MOV FILST,R1,* BEQ BADSAV ADD #511.,R1 CLRB R1 SWAB R1 ASR R1 MOV #3*400+CHOVLY,R0 EMT 374 MOV @SP,R0 OJSR PC,COPYFN .ENTER CHOVLY,(SP)+,R1 BCS ENTERR SUB R4,R1 BPL 1$ ADD R1,R4 1$: MOV #1000,R0 OINST MOV .USRTOP,R3,* OINST CLR @.BLKEY,,* 2$: MOV -(R0),-(R3) TST R0 BNE 2$ OADDR FILST,R2 MOV (R2)+,USERTOP(R3) MOV R3,R5 ADD #360,R5 MOV #8.,R0 3$: MOV (R2)+,(R5)+ DEC R0 BNE 3$ .WRITW CHOVLY,R3,#400 BCS WSVERR DEC R4 BLE 4$ CLR -(SP) MOV R4,-(SP) SWAB @SP MOV #1000,-(SP) MOV #1,R0 EMT 220+CHOVLY BCS WSVERR 4$: CLR R3 INC R4 5$: DEC R1 BMI 7$ CLR -(SP) MOV #1000,-(SP) DEC R1 BPL 6$ ASR @SP 6$: OADDR SYSIOB+2,R5 MOV @SP,@R5 MOV -(R5),-(SP) MOV R3,R0 OJSR PC,SYSK MOV R4,R0 EMT 220+CHOVLY BCS WSVERR TST (R3)+ CMPB (R4)+,(R4)+ BR 5$ 7$: .CLOSE CHOVLY BCC SVRTS KMRTMG ,WARN$,PFILE SVRTS: RETURN SAVNUM: MOV R5,-(SP) DEC @SP OJSR PC,OCTNUM MOV (SP)+,R4 CMP (SP)+,R5 BNE SVRTS BADSAV: KMEROR WSVERR: KMRTMG ,,PFILE ENTERR: CMPB @#ERRBYT,#3 BNE FROOM KMRTMG ,,PFILE FROOM: KMRTMG ,,PFILE .ENDC .SBTTL INDIRECT FILE EXPANSION (CONT'D) OVERLAY .IF NE GT$$ OVCMD GT TST GTOK BNE 1$ CALLR GTCMD 1$: OINST CLR OVLIOB,,* OVLINK GT GTOK: .WORD 0 .ENDC OVCMD INDF1 .ENABL LSB INDF1: OINST MOV @.IFSVST,R2,* OINST TST IFOPN,,* BNE 1$ MOV #3*400+CHOVLY,R0 EMT 374 .REOPEN CHOVLY,R2 OINST MOV SP,IFOPN,,* 1$: OADDR IFBUFR,R3 MOV -(R2),R1 OINST CMP IFBN,R1,* BEQ 2$ .IF NE GT$$ MOV SP,GTOK .ENDC .READW CHOVLY,R3,#IFBFSZ*400,R1 BCS IFRDER OINST MOV R1,IFBN,,* 2$: MOV -(R2),R4 ADD R3,R4 3$: CMP @R2,#IFBFSZ*1000-1 BLOS 4$ CLR (R2)+ INC (R2)+ BR 1$ .ASSUME IFBFSZ EQ 1 4$: INC @R2 MOVB (R4)+,R0 BEQ 3$ INDF2: MOV (SP)+,R3 MOV (SP)+,R1 OINST MOV SP,DATAFG,,* OJSR R2,CHARC1 BR 10$ OJSR R2,CNTCK BR 9$ CMP R5,R3 BNE 5$ INC R1 OINST CMPB CMNTF,#XPOINT,* BEQ 8$ 5$: MOV R5,-(SP) 6$: TSTB -(R5) BNE 7$ SCNDN1: OJMP SCNDUN 7$: CMPB @R5,#ATSIGN BNE 6$ OINST CLR DATAFG,,* .IIF EQ LNK$IF, .NLIST .IF NE LNK$IF OINST BIT #IFLIF,@.STATWD,,* BNE IFNERR .ENDC .IIF EQ LNK$IF, .LIST BR 6$ 8$: OINST TST IFOPN,,* BNE 10$ OINST MOV .STATWD,R3,* BR IFEOF2 9$: OINST TST IFOPN,,* BNE 10$ OJMP ILCNT 10$: MOV R1,-(SP) MOV R3,-(SP) BR 3$ .DSABL LSB IFRDER: TSTB @#ERRBYT BEQ IFEOF1 IFERR: KMEROR ,,UNCON$ .IIF EQ LNK$IF, .NLIST .IF NE LNK$IF IFNERR: KMEROR .ENDC .IIF EQ LNK$IF, .LIST .ENABL LSB IFEOF1: OJSR PC,SVST OINST MOV #-1,IFBN,,* SUB #6,R2 OINST MOV .STATWD,R3,* .IIF EQ LNK$IF, .NLIST .IF NE LNK$IF BIT #IFLIF,@R3 BEQ 1$ BIS #IFLEOF,@R3 .ENDC .IIF EQ LNK$IF, .LIST 1$: TSTB @R2 BEQ 2$ OINST CMPB @.INBFPT,#177,* BEQ 2$ OINST SUB #IFSVSZ,@.IFSVST,,* .IIF EQ LNK$IF, .NLIST .IF NE LNK$IF BIT #IFLEOF,@R3 BNE 3$ .ENDC .IIF EQ LNK$IF, .LIST BR INDF1 2$: OINST BIS #IFEOF$,@.STATWD,,* MOV R2,R4 MOV R1,-(SP) OINST MOV SP,@.EXTFL,,* OINST CLR @.IFSVST,,* OJSR PC,PUTBLK MOV (SP)+,R1 BCC 3$ ADD R0,R5 ADD R0,@SP 3$: OINST CLR @.EXTFL,,* MOV #LF,R0 CMP R5,@SP BNE INDF2 CMP (SP)+,(SP)+ IFEOF2: OINST CLR DATAFG,,* 4$: BIC #IFACTV!IFEOF$!IFLEOF,@R3 .IIF EQ LNK$IF, .NLIST .IF NE LNK$IF BIT #IFLIF,@R3 BNE 5$ .ENDC .IIF EQ LNK$IF, .LIST OJMP STRT .IIF EQ LNK$IF, .NLIST .IF NE LNK$IF 5$: OJMP SCN2 .ENDC .IIF EQ LNK$IF, .LIST .DSABL LSB OVCMD SCN0 .ENABL LSB SCN0: MOV R5,R0 SUB R4,R0 BEQ 66$ MOV R0,-(SP) CMPB -(R5),#CTRLC BNE 1$ OINST CLR DATAFG,,* 1$: .IIF EQ LNK$IF, .NLIST .IF NE LNK$IF OINST BIT #IFLIF,@.STATWD,,* BNE 2$ .ENDC .IIF EQ LNK$IF, .LIST BISB #200,@R5 2$: INC R5 SCN1: OINST BIT #IFEOF$,@.STATWD,,* BEQ 3$ OINST BIC #IFEOF$!IFACTV,@.STATWD,,* OINST CLR DATAFG,,* 3$: .IIF EQ LNK$IF, .NLIST .IF NE LNK$IF OINST BIT #IFLIF,@.STATWD,,* BNE 4$ .ENDC .IIF EQ LNK$IF, .LIST OINST CLRB ATFLAG,,* 4$: MOV @SP,R0 OJSR PC,DCLSP1 SUB R0,R5 MOV (SP)+,R0 5$: MOVB -(R5),(R1)+ DEC R0 BNE 5$ OINST MOV R1,ENBFPT,,* OJSR PC,SVST 66$: OJMP SCN3 .DSABL LSB .SBTTL SCAN LINE FOR @FILE (CONT'D) OVCMD AT4 AT4: MOV (SP)+,R3 MOV R3,R0 .LOOKUP CHOVLY BCS CMDFNF OINST MOV SP,IFOPN,,* OINST MOV #-1,IFBN,,* OINST BIT #IFACTV,@.STATWD,,* BNE 3$ CLR R4 OINST BISB @.IFMXNST,R4,* MOV #IFSVSZ,R0 1$: DEC R4 BEQ 2$ ADD #IFSVSZ,R0 BR 1$ 2$: OINST MOV SP,@.EXTFL,,* OJSR PC,GETBLK CLRB (R4)+ OINST MOVB @.IFMXNST,@R4,* DECB (R4)+ CLR (R4)+ CLR (R4)+ OINST MOV R4,@.IFSVST,,* 3$: OINST CLR @.EXTFL,,* OINST BIS #IFACTV,@.STATWD,,* OINST SUB ACCUM,@SP,* MOV (SP)+,R0 MOV (SP)+,R3 MOV (SP)+,R1 SUB R3,R5 SUB R5,R1 MOV (SP)+,R5 SUB R0,R5 SUB R0,R3 OJMP INDFIL CMDFNF: OINST TST @.IFSVST,,* BEQ 4$ OINST SUB #,@.IFSVST,,* 4$: MOV R3,R0 OJSR PC,COPYFN OJMP NOTFND .IIF GT <.-OVLYST>-<1000>, .ERROR .IF EQ GT$$ OVERLAY .IFF .SBTTL GT ON/OFF GTCMD: MOV @#SYSPTR,R1 ADD #CONFIG-$RMON,R1 BIT #HWDSP$,(R1)+ BEQ BCELNK .IF NE BF MOV FCNTXT-SCROLL(R1),R4 BEQ 20$ BIT #NORUN$,@R4 BEQ BCELNK 20$: .ENDC OADDR DEVSTS,R2 OJSR PC,GETNAM CMP #<^RON >,@R2 BEQ GTON TSTB @R5 BNE BCELNK CMP #<^ROFF>,@R2 BEQ GTOFF BCELNK: OJMP BADCOM .ENABL LSB GTON: TST @R1 BNE BCELNK CALL VSTOP ADDR TSTIT,R0 MOV R0,@#DPC 2$: MOV @#DSR,R0 BPL 2$ BIT #40,R0 BEQ 3$ MOV (PC)+,R3 YPS12: .WORD 1350 MOV (PC)+,R4 LCT12: .WORD 37 .IF EQ BF MOV #72.,-(SP) .ENDC BR 4$ 3$: MOV (PC)+,R3 YPS17: .WORD 1750 MOV (PC)+,R4 LCT17: .WORD 50 .IF EQ BF MOV #80.,-(SP) .ENDC 4$: .DSABL LSB .ENABL LSB 1$: TSTB @R5 BEQ 5$ 2$: CMPB #'/,@R5 BNE BCELNK MOVB -(R5),R0 CMPB #':,-(R5) BNE BCELNK MOV R5,-(SP) OJSR PC,DECNUM DEC R5 CMPB 1(R5),#PERIOD BEQ 6$ TST (SP)+ MOV @SP,R5 OJSR PC,OCTNUM 6$: MOV (SP)+,@SP CMPB #'T,R0 BNE 4$ MOV (SP)+,R3 BEQ BCELNK CMP #1777,R3 BLT BCELNK BR 1$ 4$: CMPB #'L,R0 BNE BCELNK MOV (SP)+,R4 BEQ BCELNK CMP #41.,R4 BLT BCELNK BR 1$ 5$: MOV R3,-(SP) MOV R4,-(SP) MOV #SCRSIZ,R0 ADD (PC)+,R0 BUFSIZ: .WORD 4000 MOV R1,-(SP) MOV SP,@<.EXTFL-OVLY>-<.+4-OVLYST>(PC) OJSR PC,GETBLK MOV (SP)+,R1 BCC 7$ .IF NE BF SUB R0,4(SP) .IFF SUB R0,6(SP) .ENDC 7$: CLR @<.EXTFL-OVLY>-<.+4-OVLYST>(PC) ADDR SCRIOB,R5 MOV R4,@R5 MOV (PC)+,R0 .WORD SCRBLK + <$RTEND - RMNUSR +777 / 1000> ADD @<.$MONB-OVLY>-<.+4-OVLYST>(PC),R0 .IF EQ MMG$T CALL @<.$SYS-OVLY>-<.+4-OVLYST>(PC) .IFF OJSR PC,RWSYS .ENDC BCS 10$ MOV BUFSIZ,R0 CALLR (R4) 10$: OJSR PC,PUTBLK OJMP SYRDER .DSABL LSB GTOFF: MOV @R1,R4 BEQ 2$ CALL VSTOP OINTOF 3$ CLR @R1 BICB #14,LOWMAP+15-SCROLL(R1) MOV #SCNOP-SCROLL,R2 ADD R1,R2 MOV R2,(R1) .IF EQ BF MOV #42704,(R1) MOV #177600,(R1) .ENDC MOV (R4),(R1) MOV (R4),(R1) OINTON 3$ .IF NE BF MOV @#SYSPTR,R1 MOV GTVECT-$RMON(R1),R1 ADD #10,R1 ADDR UN.AREA,R2 .UNPROT R2,R1 .ENDC OJSR PC,PUTBLK BCC 2$ ADD R0,@SP 2$: RETURN 3$: RTI DPC=172000 DSR=172002 VSTOP: ADDR STPIT,R2 1$: MOV R2,@#DPC TST @#DSR BPL 1$ RETURN .IF NE BF UN.AREA:.BLKW 5 .ENDC TSTIT: 114000 0 1350 104000 77 STPIT: 173000 SCRIOB: .WORD 0 .WORD SCRTOT .WORD 0 .ENDC .IF NE GT$$ .SBTTL VT11 SHIFT OUT INTERRUPT SERVICE OVERLAY SCRBLK=OVLYN SCBGIN=. SCTPS: .WORD 0 SCTPB: .WORD 0 SCMAX: .WORD 0 SCLINK: DJMP SCTOP-SCTPS SCTC: .WORD SCTRLC-SCTPS SCPVEC: .WORD V.TPS SCECHO: .BYTE 1 SCTTF: .BYTE 0 SCSTOP: SCHEAD-2-SCTPS SCHDP: .WORD SCHEAD-SCTPS SCCHMX: .WORD 0 SCMCNT: .WORD 0 SCADVF: .BYTE 0 SCLOCK: .BYTE 0 SCPSSV: .WORD 0 SCPBSV: .WORD 0 $SCINT: MOV @#SYSPTR,-(SP) JSR R5,@(SP)+ .WORD ^C&PR7 MOV R3,-(SP) MOV SCTPB,R3 SC1MOR: MOV SCTRLR,R5 TSTB SCTTF BNE 8$ TSTB SCADVF BNE SCRESM CLR @SCPSSV TST SCTPS BEQ SCRESM 1$: TST SCTPB BNE 2$ CLR -(SP) MOV @SCPVEC,R4 CALL @R4 2$: MOV SCTPB,R3 .IF NE BF .IFTF CMP #10,R3 BNE 4$ DEC R5 CMP R5,SCBUFS BHIS 3$ MOV SCBUFE,R5 3$: CMPB #12,@R5 BEQ 5$ DEC SCCHCT CLR R3 CLR SCTPB CLRB @R5 .IFF DEC SC72CT .IFTF BR SCTRLR-2 4$: CMPB #16,R3 BNE 6$ 5$: CLR R3 6$: CMPB #7,R3 BEQ 7$ TSTB SCECHO BPL 10$ 7$: INCB SCTTF 8$: TSTB @SCPSSV BEQ SCRESM CLRB SCTTF MOV R3,@SCPBSV 10$: CLR SCTPB TST R3 BEQ SCRESM CALL SCNSRT .ENABL LSB .IFF CMPB #CR,R3 BNE 1$ CLR SC72CT 1$: .IFTF CMPB #LF,R3 BNE 2$ CALL SCPACK 2$: .IFF CMP SC72CT,SCLWID BLT 5$ MOV (PC)+,R3 .ASCII CALL SCNSRT SWAB R3 CALL SCNSRT CALL SCPACK CLR SC72CT 5$: .IFTF MOV R5,(PC)+ SCTRLR: .WORD SCBUFR-SCTPS CLRB (R5)+ BIC #1,R5 CALL SCWRAP MOV #SOCODE,@R5 TST SCLF BEQ SC1MOR CLR SCLF SCRESM: MOV (SP)+,R3 SCSTRT: MOV SCHDP,@#DPC RETURN .IFF SCLWID: .WORD 72. .IFTF .DSABL LSB .ENABL LSB SCNSRT: MOVB R3,(R5)+ INC (PC)+ SCCHCT: .WORD 0 .IFF CMPB R3,#40 BLT 1$ INC (PC)+ SC72CT: .WORD 0 .IFTF 1$: CMP SCCHCT,SCCHMX BLT 3$ TST SCLNCT BNE 2$ MOVB #LF,-(R5) INC SCLNCT 2$: CALL SCDEL 3$: CALL SCWRAP RETURN .DSABL LSB .ENDC SCPACK: INC (PC)+ SCLF: .WORD 0 INC (PC)+ SCLNCT: .WORD 0 CLR R3 BIT #1,R5 BEQ 2$ CALL SCNSRT 2$: CMP SCLNCT,SCMAX BLT 3$ CALL SCDEL BR 2$ 3$: RETURN .ENABL LSB SCWRAP: CMP R5,SCBUFE BLO 1$ MOV (PC)+,R5 SCBUFS: .WORD SCBUFR-SCTPS 1$: RETURN .DSABL LSB .ENABL LSB SCDEL: MOV SCPNTR,R4 1$: MOVB @R4,-(SP) CALL SCCLR CMPB #LF,(SP)+ BNE 1$ DEC SCLNCT BIT #1,R4 BEQ 2$ CALL SCCLR 2$: MOV R4,SCPNTR TSTB SCLOCK BEQ 5$ INC (PC)+ SCPGCT: .WORD 1 CMP SCPGCT,SCMAX BLT 5$ INCB SCADVF 5$: RETURN .DSABL LSB SCCLR: DEC SCCHCT CLRB (R4)+ CMP R4,(PC)+ SCBUFE: .WORD 0 BLO 1$ MOV SCBUFS,R4 1$: RETURN .SBTTL CONTROL CHARACTER INTERCEPT ROUTINE .ENABL LSB SCEXAM: .IF NE BF MOV @#30,-(SP) SUB #2,@SP TSTB @(SP)+ BPL 99$ .ENDC CMP #'A-100,R0 BEQ 3$ CMP #'Q-100,R0 BEQ 2$ CMP #'S-100,R0 BEQ 4$ 99$: CMP #'C-100,R0 BEQ 1$ CMP #'E-100,R0 BNE 7$ NEGB SCECHO BR 6$ 1$: .IF NE BF TST I.SCCA(R5) .IFF TST I.SCCA-TTIBUF-4(R5) .ENDC BNE 7$ CALL SCDSTP CLR SCADVF .IF EQ BF CALL SCTRLC .IFF CALL SCSTRT .ENDC 7$: TST R0 RETURN 2$: CLRB SCLOCK 3$: MOV #1,SCPGCT CLR R0 BR 5$ 4$: MOVB R0,SCLOCK 5$: MOVB R0,SCADVF 6$: CLR R0 RETURN .DSABL LSB SCTRLC: MOV #SCTOP-SCTPS,SCLINK+2 MOV SCMCNT,SCMAX MOV R1,-(SP) MOV @#54,R1 BIC #GTLNK$,(R1) MOV (R1),R1 CLR (R1)+ CLR (R1)+ CLR (R1)+ CLR (R1)+ MOV (PC)+,(R1)+ SCILOC: .WORD $SCINT-SCTPS MOV (PC)+,@R1 .WORD PR7 MOV (SP)+,R1 SCSLNK: CALLR SCSTRT SCDSUP: MOV SCSTOP,@#DPC SCDSTP: BIT #100100,@#DSR BEQ SCDSUP RETURN .IF EQ BF SCSTIT: BIC #177600,R4 TST @#DPC BEQ SCSLNK RETURN .ENDC .SBTTL HEAD OF SCROLL BUFFER SHORTV=104000 STATSA=170000 SCSYNC=4 MAXSX=17600 MAXSY=77 MISVX=20000 MISVY=100 DNOP=164000 DSTOP=173400 DJMP=160000 CHAR=100000 POINT=114000 INT4=3000 LPOFF=100 BLKON=30 BLKOFF=20 SOCODE=77416 JSRABS=004737 173000 SCHEAD: CHAR!BLKON .WORD 77417 POINT!BLKOFF!LPOFF!INT4 .WORD 0 SCYPS: .WORD 0 DJMP SCLINK-SCTPS SCTOP: .REPT 18. SHORTV MAXSX+MAXSY+MISVY SHORTV MAXSX+MAXSY+MISVX .ENDR CHAR!BLKOFF!LPOFF V60.INT: .IF EQ VS60$ 171040 .IFF 171040 DNOP DNOP DNOP 164350 164650 155264 .ENDC DJMP SCPNTR: .WORD SCBUFR-SCTPS SLT.V60: SCBUFR: DNOP .WORD SOCODE .MACRO RELOC TAG ADD R4,TAG .ENDM SCINIT: MOV @#SYSPTR,R2 BIT #VS6$0,CONFG2-$RMON(R2) BNE 1$ .IF NE VS60$ ADDR V60.INT,R2 MOV #171040,(R2)+ .REPT 6 MOV #DNOP,(R2)+ .ENDR .ENDC MOV #DNOP,SLT.V60 BR 2$ 1$: MOV #STATSA+SCSYNC,SLT.V60 2$: MOV (SP)+,(R4) MOV (SP)+,(R4) .IF EQ BF MOV (SP)+,(R4) .ENDC MOV R4,@R1 MOV R0,(R4) RELOC SCTC RELOC SCLINK+2 RELOC SCTRLR RELOC SCBUFS RELOC SCPNTR RELOC SCSTOP RELOC SCHDP RELOC SCYPS+4 RELOC SCILOC RELOC SCTRLC+2 MOV SCPNTR,R3 ADD SCCHMX,R3 SUB #2,SCCHMX MOV R3,SCBUFE MOV #DJMP,(R3)+ MOV SCPNTR,(R3)+ MOV @#SYSPTR,R0 MOV #PR7,-(SP) MOV R0,-(SP) ADD #$MTPS-$RMON,@SP CALL @(SP)+ .IF EQ BF MOV R4,R3 ADD #SCSTIT-SCTPS,R3 MOV #TTSCRL-$RMON,R2 ADD R0,R2 MOV #JSRABS,(R2)+ MOV R3,@R2 .IFTF MOV R4,R3 ADD #SCEXAM-SCTPS,R3 MOV R0,R2 ADD #SCLNK2-$RMON,R2 .ENDC MOV R3,@R2 MOV (R1),SCPSSV MOV R4,(R1) TST (R4)+ MOV (R1),SCPBSV MOV R4,(R1) MOV (R1),R2 ADD #10,R2 MOV #1,R4 MOV R1,R0 ADD #LOWMAP-SCROLL,R0 MOV (R1),R1 CALL (R1) CALL SCTRLC CALL SCSTRT MOV @SP,-(SP) CLR 2(SP) MOV @#SYSPTR,-(SP) ADD #$MTPS-$RMON,@SP CALLR @(SP)+ SCEND=. SCRSIZ=SCBUFR-SCBGIN+4 SCRTOT=/2 .ENDC .SBTTL END .IIF DF NLOVLY, .LIST .END .MCALL .MODULE .MODULE MTTEMT,VERSION=04,COMMENT= ; COPYRIGHT (c) 1984, 1985, 1986 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. .SBTTL .SBTTL ******************************************** .SBTTL * * .SBTTL * MULTI-TERMINAL EMT SERVICE * .IF EQ BF .SBTTL * FOR THE SINGLE JOB MONITOR * .IFF .IF EQ MMG$T .SBTTL * FOR THE FOREGROUND/BACKGROUND MONITOR * .IFF .SBTTL * FOR THE EXTENDED MEMORY MONITOR * .ENDC .ENDC .SBTTL * * .SBTTL ******************************************** .SBTTL .SBTTL Definitions DSECT GLOBAL=NO DS M.TSTS,,,GLOBAL DS M.TST2,,,GLOBAL DS M.TFIL,,BYTE,GLOBAL DS M.FCNT,,BYTE,GLOBAL DS M.TWID,,BYTE,GLOBAL DS M.TSTW,,BYTE,GLOBAL M.BLGH = ..TEMP .SBTTL Multi-terminal EMT dispatcher .PSECT MTEMT$ .ENABL LSB M$TTIO::CMP #MTTIMX,R4 BLOS 8$ MOVB (R1)+,R3 CMP #TCBMAX,R3 BLOS 7$ CLR R2 BISB @R1,R2 MOV R0,@SP .IF NE MMG$T MOV R4,R1 ASR R1 ADD PC,R1 MOVB BLKSIZ-.(R1),R1 .ENDC CMP #10*2,R4 BEQ 1$ ASL R3 ADD PC,R3 MOV TCBLST-.(R3),R3 TST T.CSR(R3) BEQ 7$ CMP #5*2,R4 BEQ 5$ CMP #1*2,R4 BEQ 1$ .IF NE BF CMP R5,T.OWNR(R3) BNE 6$ .IFF TST T.OWNR(R3) BEQ 6$ .ENDC 1$: .IF NE MMG$T CMP R4,#1*2 BLOS 4$ CMP R4,#3*2 BHI 3$ MOV R2,-(SP) BEQ 2$ MOV R2,R1 2$: JSR PC,ACHBKM MOV (SP)+,R2 BCS 9$ BR 5$ 3$: CMP R4,#6*2 BLOS 5$ 4$: JSR PC,ACHBKM BCS 9$ .ENDC 5$: ADD PC,R4 MOV MTTLST-.(R4),-(SP) ADD PC,@SP MTTDSP: JSR PC,@(SP)+ BCC 10$ EMTERR+0 MOVB R1,@#ERRBYT 10$: .IF NE BF JMP EMTRTI .IFF JMP EMTDON .ENDC 6$: EMTERR+1 BR 10$ 7$: EMTERR+2 BR 10$ 8$: EMTERR+3 BR 10$ EMTERR+4 BR 10$ .IF NE MMG$T 9$: EMTERR+5 BR 10$ .ENDC .DSABL LSB .SBTTL Multi-terminal dispatch tables MTTLST: .WORD M$TTST-MTTDSP .WORD M$TTGT-MTTDSP .WORD M$TTIN-MTTDSP .WORD M$TOUT-MTTDSP .WORD M$RSTO-MTTDSP .WORD M$ATCH-MTTDSP .WORD M$DTCH-MTTDSP .WORD M$PRNT-MTTDSP .WORD M$STAT-MTTDSP MTTIMX = . - MTTLST .IF NE MMG$T BLKSIZ: .BYTE M.BLGH .BYTE M.BLGH .BYTE 1 .BYTE 1 .BYTE 0 .BYTE 2 .BYTE 0 .BYTE 1 .BYTE 20 .EVEN .ENDC .SBTTL .MTSET - Set terminal characteristics EMT M$TTST::MOV R3,R1 MOV @R1,-(SP) BIC #^C,@SP MOV (R0)+,R2 BIC #REMOT$,R2 BIS (SP)+,R2 MOV R2,(R1)+ TST T.STAT(R3) BPL 1$ BIC (PC)+,R2 .WORD ^C MOV @#JSW,-(SP) BIC (PC)+,@SP .WORD BIS R2,@SP MOV (SP)+,@#JSW 1$: MOV (R0)+,(R1)+ MOV (R0)+,(R1)+ MOVB @R0,@R1 JSR PC,TTRSEC .IF NE DZ11$N BIT #DZ11$,T.STAT(R3) BEQ 3$ MOV @R3,R1 BIC #^C,R1 BISB T.CNF2(R3),R1 ASLB R1 ASLB R1 ASLB R1 BISB T.PUN(R3),R1 BIS #DZRCO$,R1 MOV T.CSR(R3),R2 .IF EQ BF 2$: TSTB T.OCTR(R3) BNE 2$ .IFF JSR PC,TTOEWT .ENDC MOV R1,DZ.LPR(R2) 3$: .ENDC CLC RTS PC .SBTTL .MTGET - Get status EMT M$TTGT::MOV R3,R1 MOV (R1)+,(R0)+ MOV (R1)+,(R0)+ MOV (R1)+,(R0)+ MOVB (R1)+,(R0)+ MOVB T.STAT+1(R3),@R0 MOV T.OWNR(R3),R2 BEQ MTTER1 .IF EQ BF CLC .IFF CMP R5,R2 BNE MTTER4 .ENDC BIC #CTRLC$,T.STAT(R3) RTS PC MTTER1: MOV #1,R1 MTTERC: SEC RTS PC .SBTTL .MTIN - Character input EMT .ENABL LSB M$TTIN::MOV R0,R4 MOV R2,-(SP) 1$: JSR PC,MTTIN BCS 5$ BNE 2$ TST T.STAT(R3) BPL 2$ .IF NE BF TST I.SCCA(R5) .IFF TST I.SCCA .ENDC BEQ 4$ 2$: MOVB R0,(R4)+ INC 4(SP) DEC @SP BGT 1$ 3$: TST (SP)+ RTS PC 4$: CMP (SP)+,(SP)+ JMP GOEXIT 5$: CLR R1 COM (SP)+ RTS PC .SBTTL .MTOUT - Single character output EMT M$TOUT::MOV R0,-(SP) JSR PC,TTRSEC 6$: MOV @SP,R0 MOVB @R0,R0 MOV R2,-(SP) JSR R1,MTTPUT .WORD TCBIT$ MOV (SP)+,R2 BCS 5$ INC @SP INC 4(SP) DEC R2 BGT 6$ BR 3$ .DSABL LSB .SBTTL .MTRCTO - Reset CTRL/O EMT M$RSTO::JSR PC,TTRSEC .IF NE BF BPL 1$ CLRB I.OCTR+1(R5) RTS PC 1$: .ENDC CLRB T.OCTR+1(R3) RTS PC .SBTTL .MTATCH - Attach to terminal EMT .ENABL LSB M$ATCH:: .IF NE BF MOV R5,R2 MOV SP,R1 ENSYS 4$ BIT #SHARE$,T.STAT(R3) BEQ 1$ CMP R3,I.CNSL(R2) BNE 3$ 1$: MOV R2,R5 MOV T.OWNR(R3),R2 BEQ 2$ CMP R5,R2 BNE 3$ 2$: MOVB I.JNUM(R5),T.JOB(R3) MOV R5,T.OWNR(R3) CLR R1 3$: RTS PC 4$: TST R1 BNE MTTER4 .IFF MOV R5,T.OWNR(R3) .ENDC .IF NE MAT$S .IF EQ MMG$T MOV R0,T.AST(R3) .IFF MOV R0,R2 BEQ 5$ JSR PC,$RELOC 5$: MOV R2,T.AST(R3) MOV R1,T.AST+2(R3) .ENDC .ENDC JMP TTRSEC .IF NE BF MTTER4: MOV I.JNUM(R2),2(SP) MOV #4,R1 BR MTTERC .ENDC .DSABL LSB .SBTTL .MTDTCH - Detach from a terminal EMT M$DTCH:: .IF EQ BF TST T.STAT(R3) BMI 1$ .IFF BIT #SHARE$,T.STAT(R3) BNE 5$ .ENDC BIS #DTACH$,T.STAT(R3) TSTB @R3 BPL 1$ .ASSUME PAGE$ EQ 200 MOV R4,-(SP) MOV T.CSR(R3),R4 JSR PC,CTRL.Q MOV (SP)+,R4 1$: .IF EQ BF TSTB T.OCTR(R3) BNE 1$ TST T.STAT(R3) BMI 6$ .IFF JSR PC,TTOEWT TST T.STAT(R3) BMI 6$ .ENDC MOV R3,R2 ADD #T.TTLC,R2 CLR (R2)+ MOV (R2)+,(R2)+ CLR (R2)+ MOV -4(R2),@R2 BIC #TCBIT$!TTSPC$!TTLC$,@R3 5$: SPL 7 CLR T.OWNR(R3) 6$: .IF NE MAT$S CLR T.AST(R3) .ENDC SPL 0 BIC #RPALL$!WPALL$,T.CNF2(R3) BIC #DTACH$,T.STAT(R3) RTS PC .SBTTL .MTPRNT - Print message EMT M$PRNT::MOV R0,R2 1$: MOVB (R2)+,R0 BEQ 2$ CMPB R0,#200 BEQ 3$ MOV R2,-(SP) JSR R1,MTTPUT .WORD 0 MOV (SP)+,R2 BR 1$ 2$: ADDR PRCRLF,R2 BR 1$ 3$: RTS PC PRCRLF: .ASCII <200> .EVEN .SBTTL .MTSTAT - Return multi-terminal system status EMT M$STAT::MOV #DLTCB-$RMON,(R0)+ .IF NE BF MOV I.CNSL(R5),@R0 .IFF MOV I.CNSL,@R0 .ENDC SUB @#SYSPTR,(R0)+ MOV #TCBMAX,@R0 DEC (R0)+ MOV #TCBSZ,(R0)+ RTS PC .SBTTL MTTIN - Single character input .ENABL LSB MTTIN:: .IF NE BF MOV R5,R1 ADD #I.TTLC,R1 .ENDC JSR PC,TTRSEC .IF NE BF BMI 1$ .ENDC MOV R3,R1 ADD #T.TTLC,R1 1$: MOV R1,R2 BIT #TTSPC$,@R3 BEQ 2$ ADD #T.ICTR-T.TTLC,R2 2$: TST @R2 BNE 3$ BIT #TCBIT$,@R3 SEC BNE 7$ .IF NE BF JSR R4,$SYSWT .WORD TTIWT$ CMP @R2,#1 JSR PC,@(SP)+ .IFF BR 2$ .ENDC 3$: ADD #T.IGET-T.TTLC,R1 .BR MTTGET .SBTTL MTTGET - Get a character from the ring buffer MTTGET:: JSR PC,GETPSW SPL 5 INC @R1 CMP (R1)+,@R1 BNE 4$ SUB #TTYIN,-2(R1) 4$: MOVB @-(R1),R0 DEC -(R1) .IF NE MAT$S BNE 5$ JSR PC,CLRIN 5$: .ENDC JSR PC,EOLTST BNE 6$ DEC T.TTLC-T.ICTR(R1) MTTHOK:: 6$: JSR PC,PUTPSW CMPB #CTRLC,R0 CLC 7$: RTS PC .DSABL LSB .SBTTL TTRSET - Reset terminal status bits .ENABL LSB TTRSEC: TST T.STAT(R3) BPL 2$ TTRSET::MOV @#JSW,R0 BIC (PC)+,R0 .WORD ^C MOV @R3,-(SP) BIC (PC)+,@SP .WORD BIS R0,@SP MOV (SP)+,@R3 .IF NE BF MOV @R3,I.TERM(R5) .ENDC CMP R3,BKCNSL BNE 1$ MOV @#TTFILL,T.TFIL(R3) 1$: TST T.STAT(R3) 2$: RTS PC .DSABL LSB .SBTTL MTTPUT - Single character output MTTPUT::MOV R5,-(SP) 1$: MOV @SP,R5 .IF NE BF MOV R5,R2 ADD #I.ICTR,R2 TST T.STAT(R3) BMI 2$ .ENDC MOV R3,R2 ADD #T.ICTR,R2 2$: MOV T.CSR(R3),R4 .IF NE SYT$K 3$: TSTB T.XFLG(R3) BNE 4$ .ENDC MOV R2,-(SP) JSR PC,TTOPT2 MOV (SP)+,R2 BCC 6$ 4$: BIT @R1,@R3 BNE 6$ .IF NE BF .IF NE SYT$K TSTB T.XFLG(R3) BEQ 5$ ENSYS 3$ JMP QWAIT 5$: .ENDC JSR R4,$SYSWT .WORD TTOWT$ CMPB #TTYOUT-1,T.OCTR-T.ICTR(R2) JSR PC,@(SP)+ .ENDC BR 1$ 6$: BIT (R1)+,R0 MOV (SP)+,R5 RTS R1 .SBTTL MTRSET - Stop and detach all terminals attached to a job MTRSET::JSR R3,SAVE30 MOV R4,-(SP) MOV R5,-(SP) .IF NE BF MOV CNTXT,R5 .ENDC ADDR TCBLST,R4 MOV #TCBMAX,R0 1$: MOV (R4)+,R3 BEQ 2$ .IF EQ BF TST T.OWNR(R3) BEQ 2$ .IFF CMP R5,T.OWNR(R3) BNE 2$ .ENDC JSR PC,M$DTCH 2$: DEC R0 BGT 1$ MOV (SP)+,R5 MOV (SP)+,R4 RTS PC .IF NE BF .SBTTL TTOEWT - Wait for terminal output buffer to empty TTOEWT::JSR R4,$SYSWT .WORD TTOEM$ MOVB I.OCTR(R5),-(SP) TST T.STAT(R3) BMI 1$ MOVB T.OCTR(R3),@SP 1$: NEGB (SP)+ JSR PC,@(SP)+ RTS PC .ENDC .END .MCALL .MODULE .MODULE MTTINT,VERSION=23,COMMENT= ; COPYRIGHT (c) 1987 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. .SBTTL .SBTTL ******************************************** .SBTTL * * .SBTTL * MULTI-TERMINAL INTERRUPT SERVICE * .IF EQ BF .SBTTL * FOR THE SINGLE JOB MONITOR * .IFF .IF EQ MMG$T .SBTTL * FOR THE FOREGROUND/BACKGROUND MONITOR * .IFF .SBTTL * FOR THE EXTENDED MEMORY MONITOR * .ENDC .ENDC .SBTTL * * .SBTTL ******************************************** .SBTTL .SBTTL Macro definitions .MACRO SPL N .IIF NDF PSWMTI, PSW1ST: .IF NE .-PSW1ST .WORD PSWMTI .IFF .WORD PSWLST .ENDC PSWMTI == .-2 .IF EQ N .WORD -2 .IFF .WORD N*40,PS .ENDC .ENDM SPL .MACRO GETPSW .IIF NDF PSWMTI, PSW1ST: .IF NE .-PSW1ST .WORD PSWMTI .IFF .WORD PSWLST .ENDC .WORD -4 PSWMTI == .-4 .ENDM GETPSW .MACRO PUTPSW .IIF NDF PSWMTI, PSW1ST: .IF NE .-PSW1ST .WORD PSWMTI .IFF .WORD PSWLST .ENDC .WORD -6 PSWMTI == .-4 .ENDM PUTPSW .SBTTL Definition of symbols .PSECT MTINT$ T.TKS ==: 0 T.TKB ==: 2 T.TPS ==: 4 T.TPB ==: 6 DL.DTR ==: 2 DL.RTS ==: 4 DL.DIE ==: 40 DL.SRD ==: 2000 DL.CAR ==: 10000 DL.CSD ==: 20000 DL.RNG ==: 40000 DL.DIN ==: 100000 DL.CHR ==: 377 DL.PAR ==: 10000 DL.FRM ==: 20000 DL.OVR ==: 40000 DL.ERR ==: 100000 .IF NE DZ11$N DZ.CSR == 0 DZMNT$ == 10 DZCLR$ == 20 DZMSE$ == 40 DZRCV$ == 100 DZRDN$ == 200 DZTRL$ == 3400 DZSAE$ == 10000 DZSAL$ == 20000 DZTIE$ == 40000 DZTRD$ == 100000 DZ.RBUF == 2 DZICH$ == 377 DZRCL$ == 3400 DZPAR$ == 10000 DZFRM$ == 20000 DZOVR$ == 40000 DZDVD$ == 100000 DZ.LPR == 2 DZLIN$ == 7 DZLEN$ == 30 DZSTP$ == 40 DZNPR$ == 100 DZEPR$ == 200 DZSPD$ == 7400 DZRCO$ == 10000 DZANS$ = DZST$P!DZLE$N!DZSP$D!DZRCO$ DZ.TCR == 4 DZ.DTR == 5 DZ.RNG == 6 DZ.TDR == 6 DZ.CAR == 7 DZ.BRK == 7 .ENDC .SBTTL DLIINT - DL11 input interrupt service .ENABL LSB DLIINT:: TTIINT:: .IF GT DL11$N-1 GETPSW MOV (SP)+,DLTMP .ENDC DLIHOK:: JSR R5,$INTEN .WORD ^C&PR7 TTIIN2:: .IF EQ HSR$B JSR R3,SAVE30 .IF GT DL11$N-1 MOV DLTMP,R4 BIC #^C<17>,R4 ASL R4 MOV DLTBL(R4),R3 PDLTB0 == .-2 .IFF MOV DLTBL,R3 .ENDC MOV T.CSR(R3),R4 .IF NE DL11$M BIT #REMOT$,@R3 BEQ 1$ MOV @R4,R0 BMI DLMCTL .ASSUME DL.DIN EQ 100000 1$: .ENDC HKPC08 == . MOV T.TKB(R4),R0 .ASSUME .-HKPC08 EQ 4 TSTB T.CNF2(R3) BMI 8$ .ASSUME RPALL$ EQ 200 TST R0 .ASSUME DL.ERR EQ 100000 BPL 2$ BIT #DL.PAR!DL.FRM,R0 BNE SCNOP 2$: BIC #^C<177>,R0 BEQ SCNOP .IFF .IF GT DL11$N-1 MOVB DLTMP,R4 BIC #^C<17>,R4 ASL R4 PHSRRB == .+2 MOV DLTBL(R4),R4 .IFF MOV DLTBL,R4 .ENDC .IF NE DL11$M BIT #REMOT$,@R4 BEQ 3$ MOV @T.CSR(R4),R5 BPL 3$ .ASSUME DL.DIN EQ 100000 JSR R3,SAVE30 MOV R4,R3 MOV R5,R0 MOV T.CSR(R3),R4 BR DLMCTL 3$: .ENDC MOV T.CSR(R4),R5 HKPC09 == . MOV T.TKB(R5),-(SP) .ASSUME .-HKPC09 EQ 4 MOV HSRB,R5 MOV R4,(R5)+ MOV (SP)+,(R5)+ PHSRRT == .+2 CMP R5,#HSRBUE BLO 4$ MOV HSRBRP,R5 4$: MOV R5,HSRB INC HSRBCC BNE SCNOP FRQHOK:: JSR R5,$FORK .WORD TIFBLK-. 5$: MOV HSRBGP,R1 MOV (R1)+,R3 MOV (R1)+,R0 CMP R1,HSRBEP BLO 6$ MOV HSRBRP,R1 6$: MOV R1,HSRBGP MOV T.CSR(R3),R4 TSTB T.CNF2(R3) BMI 8$ .ASSUME RPALL$ EQ 200 TST R0 BPL 7$ .ASSUME DL.ERR EQ 100000 BIT #DL.PAR!DL.FRM,R0 BNE 11$ 7$: BIC #^C<177>,R0 BEQ 11$ .ENDC 8$: JSR PC,INPTR BEQ 10$ INTCOM: .IF NE BF MOV @R3,-(SP) BIT #SHARE$,T.STAT(R3) BEQ 9$ MOV I.TERM(R5),@R3 9$: .ENDC JSR PC,INCHAR .IF NE BF MOV (SP)+,@R3 .ENDC 10$: .IF NE HSR$B .IF NE DZ11$N BIT #DZ11$,T.STAT(R3) BNE SCNOP .ENDC 11$: DEC HSRBCC BPL 5$ .ENDC SCNOP:: RTS PC .DSABL LSB .IF NE DL11$M .SBTTL DLMCTL - DL11E modem control routine .ENABL LSB DLMCTL::BIT #DL.RNG,R0 BNE DLRNG BIT #DL.CAR,R0 BNE DLCAR BIT #HNGUP$,T.STAT(R3) BNE 2$ BIT #,R0 BNE 2$ .IF NE U.K. ..UKDL == . BR DLWCR1 .ENDC JSR R1,QTIMR .WORD 2*CLOCK DLCRP1:: .WORD DLWCAR BR 2$ DLCAR: BIT #SHARE$,T.STAT(R3) BNE 15$ TST T.OWNR(R3) BEQ 2$ 15$: JSR PC,CTIMR 1$: BIC #HNGUP$,T.STAT(R3) .IF NE MAT$S JSR PC,CARON .ENDC BR 2$ DLWCAR::JSR R5,SAVE52 MOVB R0,R3 ADD PC,R3 MOV TCBLST-.(R3),R3 DLWCR1: MOV T.CSR(R3),R4 BIS #HNGUP$,T.STAT(R3) BIC #DL.DTR!DL.RTS,@R4 .IF NE MAT$S JSR PC,HNGON .ENDC BR 2$ DLRNG: BIT #SHARE$,T.STAT(R3) BNE 25$ TST T.OWNR(R3) BEQ 2$ 25$: JSR PC,CTIMR BIS #DL.DTR!DL.RTS,@R4 BIT #DL.CAR,@R4 BNE 1$ JSR R1,QTIMR .WORD 30.*CLOCK DLCRP2:: .WORD DLWCAR 2$: RTS PC .DSABL LSB .ENDC .IF NE DL11$M!MTI$M .SBTTL Mark time and cancel mark time routines QTIMR: JSR R5,SAVE52 .IF NE BF MOV T.JOB(R3),T.TBLK+C.JNUM(R3) .ENDC ADD #T.TBLK,R3 CLR (R3)+ MOV (R1)+,(R3)+ MOV (R1)+,C.COMP-C.LINK(R3) MOV R1,12(SP) JMP TIMIO CTIMR: JSR R5,SAVE52 MOV T.TBLK+C.SEQ(R3),R0 .IF NE BF MOVB T.JOB(R3),R2 .ENDC MOV #-1,R1 CLR R5 JMP CMARKT .ENDC .IF NE MTI$M .SBTTL DLMPOL - Routine to poll each DL11 DLMPOL::JSR R5,SAVE52 CLR R2 PDLCS1 == .+2 1$: MOV DLTBL(R2),R3 MOV T.CSR(R3),R4 BEQ 3$ BIT #REMOT$,@R3 BEQ 2$ BIS #DL.DIE,@R4 2$: HKPC01 == . BIS #IENABL,@R4 .ASSUME T.TKS EQ 0 .ASSUME .-HKPC01 EQ 4 BIT #INEXP$,T.STAT(R3) BEQ 3$ INC T.RTRY(R3) CMP #4,T.RTRY(R3) BNE 3$ CLR T.RTRY(R3) CMP @T.VEC(R3),@#SYSPTR BLO 3$ HKPC02 == . BIC #IENABL,T.TPS(R4) BIS #IENABL,T.TPS(R4) .ASSUME .-HKPC02 EQ 14 3$: TST (R2)+ CMP R2,#DL11$N*2 BLO 1$ DLTIMR: MOV DLTMCP,DLTCOM JSR R5,$TIMIO .WORD DLTMBK - . .WORD 0 .WORD 0 .WORD CLOCK/2 RTS PC DLTMBK: .WORD 0,0 .WORD 0,0 .WORD 177444 .WORD -1 DLTCOM: .WORD 0 DLTMCP::.WORD DLMPOL .ENDC .SBTTL INPTR and OUTPTR - Ring pointer set up subroutines .ENABL LSB INPTR: .IF NE BF MOV TTIUSR,R5 .ENDC BIT #DTACH$,T.STAT(R3) BEQ 1$ SEZ RTS PC OUTPTR: .IF NE BF MOV TTOUSR,R5 1$: BIT #SHARE$,T.STAT(R3) BNE 2$ MOV T.OWNR(R3),R5 BEQ 4$ TST T.STAT(R3) .ASSUME CONSL$ EQ 100000 BPL 3$ 2$: MOV R5,R1 ADD #I.ICTR,R1 RTS PC .IFF 1$: .ENDC 3$: MOV R3,R1 ADD #T.ICTR,R1 4$: RTS PC .DSABL LSB .SBTTL Control character input dispatch table .MACRO CTLCHI C .NCHR ......, .IF GT ......-1 INP'C:: .=C*2+TTITBL .WORD INP'C-TTIBAS .=INP'C .SBTTL Process C input .IFF CTRL.'C:: .=''C-100*2+TTITBL .WORD CTRL.'C-TTIBAS .=CTRL.'C .SBTTL Process CTRL/'C input .ENDC .ENDM CTLCHI .WORD ALT-TTIBAS .WORD ALT-TTIBAS .WORD RUB-TTIBAS TTITBL: .REPT 'Z+1-100 .WORD TTINCC-TTIBAS .ENDR .SBTTL INCHAR - Input character processing .ENABL LSB INCHAR:: .IF NE SCCA$G CMPB R0,#CTRLC BNE 10$ BITB #CC$ALL,INDSTA BEQ 10$ .IF NE BF ADDR BKGND,SP CMP R5,(SP)+ BNE 10$ .ENDC RTS PC 10$: .ENDC TSTB T.CNF2(R3) .ASSUME RPALL$ EQ 200 BMI TTINC3 BIT #TTLC$,@R3 BNE 1$ CMPB R0,#'A!40 BLO 1$ CMPB R0,#'Z!40 BHI 1$ BICB #40,R0 1$: CMP R0,#'Z-100 BLOS 2$ ..ALT == .+2 CMP R0,#177 BLO TTINCC SUB #200,R0 2$: ASL R0 TTITPT == .+2 MOV TTITBL(R0),-(SP) ADD PC,@SP TTIBAS: ASR R0 MOV R3,R2 ADD #T.STAT,R2 JMP @(SP)+ CTLCHI CR .IF NE SYT$K TSTB T.XFLG(R3) BNE 11$ .ENDC JSR PC,TTINCC MOV #LF,R0 BR TTINC3 TTINCC: .IF NE SYT$K TSTB T.XFLG(R3) BEQ 12$ 11$: JMP XPROC 12$: .ENDC BIT #TTSPC$,@R3 BNE TTINC3 CMPB T.PTTI(R3),#RUBOUT BNE TTINC3 JSR R5,ECHO .ASCII "\"<0> TTINC3: CMP @R1,#TTYIN BGE 7$ INC @R1 INC -(R1) CMP @R1,6(R1) BNE 3$ SUB #TTYIN,@R1 3$: MOVB R0,@(R1)+ JSR PC,EOLTST BNE 4$ INC T.TTLC-T.ICTR(R1) .IF NE BF CMP TTHIUS,R5 BNE 4$ .IFF TST TTHIUS BEQ 4$ .ENDC TST T.STAT(R3) BPL 4$ JSR PC,TTHIN MOV T.CSR(R3),R4 4$: MOVB R0,T.PTTI(R3) TSTB T.CNF2(R3) BMI 5$ BIT #TTSPC$,@R3 BNE 5$ JSR PC,TTOPT3 .IF NE MAT$S!BF TST T.TTLC-T.ICTR(R1) .ENDC .IF EQ MAT$S BEQ 6$ .IFF BNE 5$ JSR PC,CLRIN BR 6$ .ENDC 5$: .IF NE MAT$S JSR PC,SETIN .ENDC .IF NE BF JSR R4,UNBLOK .WORD TTIWT$ .ENDC 6$: RTS PC 7$: TSTB T.CNF2(R3) BMI 6$ MOVB R0,T.PTTI(R3) DING: MOV #BELL,R0 JMP TTOPT4 .DSABL LSB .SBTTL INPUT CONTROL CHARACTER PROCESSING .ENABL LSB .IF NE BF CTLCHI B JSR PC,SWICTX MOV BCNTXT,R2 XCOM: MOV R2,TTIUSR .IF NE SYT$K TSTB XFLG BNE TTOSET .ENDC CMP R2,TTOUSR BEQ 2$ TTOSET::MOV R2,TTOUSR MOV I.TID(R2),T.TID(R3) JMP TTOENB CTLCHI F JSR PC,SWICTX MOV FCNTXT,R2 BEQ 1$ .IF NE SYT$K CMP I.CNSL(R2),R3 BNE 1$ .ENDC BIT #NORUN$,I.BLOK(R2) BEQ XCOM 1$: JSR R5,ECHO .ASCII "F?" JMP ECHOCL .ENDC ALT: MOV #ESCAPE,R0 BTINC3: BR TTINC3 CTLCHI O MOV R1,R2 ADD #T.OCTR-T.ICTR,R2 CLRB (R2)+ MOVB @R2,-(SP) CLRB (R2)+ MOV @R2,-4(R2) JSR R5,ECHO0C .ASCII COMB @SP MOVB (SP)+,T.OCTR+1-T.ICTR(R1) BEQ 2$ .IF NE BF JSR R4,UNBLOK .WORD TTOWT$!TTOEM$ .ENDC 2$: RTS PC .DSABL LSB CTLCHI C .ENABL LSB .IF NE SYT$K TSTB T.XFLG(R3) BEQ 2$ 1$: JSR R5,ECHO0C .ASCII CLR T.XFLG(R3) RTS PC 2$: .ENDC TST @R2 BPL 3$ .IF NE BF TST I.SCCA(R5) .IFF TST I.SCCA .ENDC BEQ 4$ 3$: BIT #TTSPC$,@R3 BNE 5$ 4$: JSR R5,ECHO0C .ASCII 5$: CMPB R0,T.PTTI(R3) BNE BTINC3 TST T.STAT(R3) .ASSUME CONSL$ EQ 100000 BPL 7$ .IF NE BF MOV I.SCCA(R5),R2 BNE 8$ TST I.JNUM(R5) BNE 6$ BIS #IFABRT,STATWD .IFF MOV I.SCCA,R2 BNE 8$ BIS #IFABRT!IFCTLC,STATWD .ENDC BICB #,INDSTA TST EXTFLG BNE BTINC3 .IF NE BATC$H MOV $ENTRY+BA.NUM,R2 BEQ 6$ CLR BATSW$(R2) .ENDC 6$: JMP $RQABT 7$: BIS #CTRLC$,T.STAT(R3) BR 9$ 8$: .IF NE MMG$T MOV @#KISAR1,-(SP) MOV I.SCC1(R5),@#KISAR1 .ENDC BIS #100000,@R2 .IF NE MMG$T MOV (SP)+,@#KISAR1 .ENDC 9$: .IF NE MAT$S JSR PC,CTCON .ENDC JMP TTINC3 .DSABL LSB .ENABL LSB RUB: ADD #200,R0 CTLCHI U BIT #TTSPC$,@R3 BNE BTINC3 ROR -(SP) .IF NE SYT$K TSTB T.XFLG-T.STAT(R2) BEQ 3$ ADD #T.XFLG+1-T.STAT,R2 TST (SP)+ BMI 1$ CLRB (R2)+ CLR (R2)+ CLR (R2)+ CLR (R2)+ CLR (R2)+ BR 12$ 1$: MOVB (R2)+,R5 BEQ 2$ ADD R2,R5 INC R5 MOVB @R5,R0 CLRB @R5 DECB -1(R2) TST @R3 BMI 7$ CMPB T.XPRE(R3),#RUBOUT BEQ 91$ MOVB #RUBOUT,T.XPRE(R3) BR 9$ 2$: CLRB T.XPRE(R3) BR ECHOCL .ENDC 3$: ADD #T.PTTI-T.STAT,R2 4$: TST @R1 BEQ 11$ MOVB @-(R1),R0 JSR PC,EOLTST BEQ 10$ CMP @R1,-2(R1) BNE 5$ ADD #TTYIN,@R1 5$: DEC (R1)+ DEC @R1 6$: TST @SP BPL 4$ MOV @R3,(SP)+ .ASSUME BKSP$ EQ 100000 BPL 8$ 7$: JSR R5,ECHO .ASCII MOV #BS,R0 .IF EQ SYT$K BR TTOPT4 .IFF JMP TTOPT4 .IFTF 8$: CMPB @R2,#RUBOUT .IFT BEQ TTOPT3 .IFF BEQ 91$ .IFTF MOVB #RUBOUT,@R2 9$: JSR R5,ECHO .ASCII "\"<0> .IFT BR TTOPT3 .IFF 91$: JMP TTOPT3 .ENDC 10$: TST (R1)+ 11$: CLRB @R2 TST (SP)+ BPL 12$ TST @R3 BPL ECHOCL RTS PC 12$: JSR R5,ECHO .ASCII "^U" ECHOCL: JSR R5,ECHO .ASCII RTS PC .DSABL LSB CTLCHI S TSTB @R3 .ASSUME PAGE$ EQ 200 BPL JTINCC BIS #PAGE$,@R2 RTS PC CTLCHI Q BIC #PAGE$,T.STAT(R3) TSTB @R3 BPL JTINCC .IF NE DZ11$N BIT #DZ11$,T.STAT(R3) BEQ 1$ MOVB T.PUN(R3),R2 PBMSK1 == .+2 BICB BITMSK(R2),DZ.TCR(R4) BR DZOENB 1$: .ENDC HKPC03 == . CLR T.TPS(R4) .ASSUME .-HKPC03 EQ 4 BR DLOENB .IF NE BF .ENABL LSB SWICTX: BIT #SHARE$,T.STAT(R3) BEQ 1$ BIT #FBTTY$,@R3 BEQ 1$ .IF NE SYT$K MOV T.XFLG(R3),(PC)+ XFLG: .WORD 0 CLR T.XFLG(R3) .ENDC RTS PC 1$: TST (SP)+ .ENDC JTINCC: JMP TTINCC .DSABL LSB .IF NE SYT$K CTLCHI X JSR PC,SWICTX ADD #T.XFLG-T.STAT,R2 MOV #201,(R2)+ CLR (R2)+ CLR (R2)+ CLR (R2)+ CLR (R2)+ MOV TTIUSR,TTOUSR BR TTOENB .SBTTL XPROC - Process characters in ^X sequence XPROC:: MOV R3,R5 ADD #T.XPRE,R5 CMPB #RUBOUT,@R5 BNE 1$ TST @R3 BMI 1$ JSR R5,ECHO .ASCII "\"<0> 1$: CMPB #CR,R0 BEQ 3$ JSR PC,EOLTST BEQ 3$ MOVB -(R5),R2 CMP #6,R2 BGT 2$ JMP DING 2$: CMPB R0,#'A!40 BLO 21$ CMPB R0,#'Z!40 BHI 21$ BIC #40,R0 21$: INC R2 MOVB R2,(R5)+ MOVB R0,(R5)+ ADD R5,R2 MOVB R0,@R2 BR TTOPT4 3$: TST (R5)+ MOV R5,R0 JSR PC,FNDJOB BEQ 4$ CMP I.CNSL(R2),R3 BNE 4$ BIT #NORUN$,I.BLOK(R2) BNE 4$ CLR T.XFLG(R3) MOV #1,R0 JMP XCOM 4$: JSR R5,ECHO .ASCII "?"<0> JSR PC,ECHOCL CLR T.XFLG(R3) RTS PC .ENDC .SBTTL TTOENB - Enable output interrupt .ENABL LSB TTOENB:: .IF NE DZ11$N BIT #DZ11$,T.STAT(R3) BEQ DLOENB DZOENB: MOVB T.PUN(R3),R2 PBMSK2 == .+2 BISB BITMSK(R2),DZ.TCR(R4) BR 1$ .ENDC DLOENB: .IF NE MTI$M BIS #INEXP$,T.STAT(R3) .ENDC HKPC04 == . MOV #IENABL,T.TPS(R4) .ASSUME .-HKPC04 EQ 6 1$: CLC RTS PC .DSABL LSB .IF NE SYT$K XPROMT: .ASCIZ "Job? " .ENDC .IF NE DZ11$N BITMSK::.BYTE 1,2,4,10,20,40,100,200 .EVEN .ENDC .SBTTL Character output subroutines .ENABL LSB .SBTTL ECHOR0 - Print a control character in "^x" form ECHOR0: MOV R0,-(SP) MOV #UPAROW,R0 JSR PC,TTOPT3 1$: MOV (SP)+,R0 BIS #100,R0 .BR TTOPT3 .SBTTL TTOPT3 - Print a character, check for special changes: TTOPT3::CMPB #CTRLC,R0 BEQ 7$ CMPB #ESCAPE,R0 BNE 2$ MOV #DOLLAR,R0 2$: CMPB #40,R0 BLOS TTOPT4 CMPB #15,R0 BLO ECHOR0 CMPB #11,R0 BHI ECHOR0 .SBTTL TTOPT4 - Print a character, no checking for specials TTOPT4::MOV R1,R2 .SBTTL TTOPT2 - Print a character, no checking for specials TTOPT2::ADD #T.OCTR-T.ICTR,R2 .IF NE SYT$K TSTB T.XFLG(R3) BNE 3$ .ENDC TST @R2 BMI 7$ 3$: TST T.CNF2(R3) BMI 8$ .ASSUME WPALL$ EQ 100000 BICB #^C<177>,R0 8$: CMPB #TTYOUT-1,@R2 BLO 7$ .IF NE MAT$S JSR PC,RGFUL .ENDC CMP 4(R2),-(R2) BHI 4$ SUB #TTYOUT,@R2 4$: MOVB R0,@(R2)+ INC -(R2) INC 2(R2) BR TTOENB .SBTTL ECHO0C - Print control character, then 1 or 2 constant characters ECHO0C: MOV R0,-(SP) JSR PC,ECHOR0 BR 5$ .SBTTL ECHO - Print one or two constant characters ECHO: MOV R0,-(SP) 5$: MOVB (R5)+,R0 JSR PC,TTOPT4 MOVB (R5)+,R0 BEQ 6$ JSR PC,TTOPT4 6$: MOV (SP)+,R0 RTS R5 7$: RTS PC .DSABL LSB .SBTTL EOLTST - Test for end of line EOLTST::CMPB #LF,R0 BEQ 1$ CMPB #'Z-100,R0 BEQ 1$ CMPB #'C-100,R0 1$: RTS PC .SBTTL DLOINT - DL11 output interrupt routine .ENABL LSB TTOINT:: DLOINT:: .IF EQ HSR$O .IF GT DL11$N-1 GETPSW MOV (SP)+,DLTMP .ENDC DLOHOK:: JSR R5,$INTEN .WORD ^C&PR7 JSR R3,SAVE30 .IF GT DL11$N-1 MOV DLTMP,R4 .ENDC .IFF .IF GT DL11$N-1 GETPSW MOVB (SP)+,@HSROPP MOV R0,-(SP) PHSRBO == .+2 MOV #HSROPP,R0 INC @R0 CMP (R0)+,(R0)+ BLO 10$ MOV @R0,HSROPP 10$: MOV (SP)+,R0 .ENDC INC HSROCC BEQ 20$ RTI DLOHOK:: 20$: JSR R5,$INTEN .WORD ^C&PR7 JSR R5,$FORK .WORD TOFBLK-. 30$: .IF GT DL11$N-1 MOV HSROGP,R5 MOVB (R5)+,R4 CMP R5,HSROEP BLO 40$ MOV HSRORP,R5 40$: MOV R5,HSROGP .ENDC JSR PC,50$ DEC HSROCC BPL 30$ RTS PC 50$: .ENDC .IF GT DL11$N-1 BIC #^C<17>,R4 ASL R4 PDLTB1 == .+2 MOV DLTBL(R4),R3 .IFF MOV DLTBL,R3 .ENDC MOV T.CSR(R3),R4 .IF NE MTI$M BIC #INEXP$,T.STAT(R3) CLR T.RTRY(R3) .ENDC JSR PC,OUTPTR BEQ 2$ JSR PC,OUTCHR BCS 2$ .IF NE MTI$M BIS #INEXP$,T.STAT(R3) .ENDC HKPC07 == . MOV R0,T.TPB(R4) .ASSUME .-HKPC07 EQ 4 RTS PC 2$: HKPC05 == . MOV #0,T.TPS(R4) .ASSUME .-HKPC05 EQ 6 RTS PC .DSABL LSB .SBTTL Control character output dispatch table .MACRO CTLCHO C OUP'C:: .=C+TTOTBL .BYTE OUP'C-TTOBAS .=OUP'C .SBTTL Process C output .ENDM CTLCHO TTOTBL:: .REPT 40 .BYTE OUPXXX-TTOBAS .ENDR .SBTTL OUTCHR - Output character processing .ENABL LSB OUTCHR: TSTB T.STAT(R3) BPL 991$ .ASSUME PAGE$ EQ 200 20$: SEC RTS PC 991$: TST T.CNF2(R3) BMI 1$ .ASSUME WPALL$ EQ 100000 TSTB T.NFIL(R3) BEQ 901$ DECB T.NFIL(R3) CLR R0 RTS PC 901$: TSTB T.TNFL(R3) BEQ 1$ INCB T.TNFL(R3) MOVB T.TCTF(R3),R0 BR 18$ 1$: .IF NE BF TSTB T.OCTR-T.ICTR(R1) BNE 902$ JSR R4,UNBLOK .WORD TTOEM$ 902$: MOV T.TID(R3),R2 BEQ 4$ 2$: MOVB (R2)+,R0 BNE 3$ CLR R2 3$: MOV R2,T.TID(R3) BNE 18$ CLRB T.OCHR(R3) 4$: BIT #SHARE$,T.STAT(R3) BEQ 7$ .IF NE SYT$K TSTB T.XFLG(R3) BNE 9$ .ENDC TST T.CNF2(R3) BMI 7$ .ASSUME WPALL$ EQ 100000 CMPB #LF,T.OCHR(R3) BNE 8$ MOV IMPLOC,R2 5$: MOV -(R2),R5 BEQ 5$ CMP #-1,R5 BEQ 20$ BIT #NORUN$,I.BLOK(R5) BNE 5$ .IF NE SYT$K CMP I.CNSL(R5),R3 BNE 5$ .ENDC CMP TTHOUS,R5 BEQ 6$ TSTB I.OCTR(R5) BEQ 5$ 6$: CMP TTOUSR,R5 BEQ 7$ MOV R5,TTOUSR MOV I.TID(R5),T.TID(R3) MOV R5,R1 ADD #I.ICTR,R1 BR 1$ .ENDC 7$: TST T.STAT(R3) .ASSUME CONSL$ EQ 100000 BPL 9$ 8$: .IF NE BF CMP TTHOUS,R5 BEQ TTHOUT .IFF TST TTHOUS BNE TTHOUT .ENDC 9$: .IF NE BF ..TTON == .+4 CMPB T.OCTR-T.ICTR(R1),#TTYOUT BNE 10$ JSR R4,UNBLOK .WORD TTOWT$ 10$: .ENDC ADD #T.OTOP-T.ICTR,R1 CMP @R1,-(R1) BNE 11$ SUB #TTYOUT,@R1 11$: TSTB -2(R1) .IF EQ SYT$K BEQ 20$ .IFF BNE 12$ TSTB T.XFLG(R3) BPL 20$ ASLB T.XFLG(R3) ADDR XPROMT,R2 MOV R2,T.TID(R3) BR 2$ 12$: .ENDC MOVB @(R1)+,R0 13$: TST T.CNF2(R3) BMI OUPXXX .ASSUME WPALL$ EQ 100000 BIC #^C<177>,R0 CMPB #40,R0 BHI SPCHAR CMP R0,#RUBOUT BEQ OUPXXX INCB T.LPOS(R3) BIT #CRLF$,@R3 BEQ OUPXXX CMPB T.LPOS(R3),T.WID(R3) BLOS OUPXXX CLRB T.LPOS(R3) MOVB #CR,R0 MOV #<-1*400>+LF,T.TCTF(R3) 17$: MOVB R0,T.OCHR(R3) 18$: CMPB R0,T.TFIL(R3) BNE 19$ TST T.CNF2(R3) BMI 19$ .ASSUME WPALL$ EQ 100000 MOVB T.FCNT(R3),T.NFIL(R3) 19$: CLC RTS PC CTLCHO CR CLRB T.LPOS(R3) OUPXXX: INC -(R1) DEC -(R1) .IF NE MAT$S TSTB @R1 BNE 17$ CALL RGEMP .ENDC BR 17$ TTOTPT == .+2 SPCHAR: MOVB TTOTBL(R0),R2 ADD R2,PC TTOBAS:: CTLCHO FF BIT #FORM$,@R3 BNE OUPXXX MOV #<-7*400>+LF,T.TCTF(R3) MOV #LF,R0 BR OUPXXX CTLCHO BS TST @R3 .ASSUME BKSP$ EQ 100000 BPL OUPXXX DECB T.LPOS(R3) BR OUPXXX CTLCHO TAB BIT #HWTAB$,@R3 BNE 22$ MOV T.LPOS-1(R3),R0 BIS (PC)+,R0 .BYTE 377,370 ADD #SPACE+1,R0 MOV R0,T.TCTF(R3) MOVB R0,R0 22$: ADD #8.*400,T.LPOS-1(R3) BIC #7*400,T.LPOS-1(R3) BR OUPXXX TTHOUT: MOV R1,R2 TST T.OCTR-T.ICTR(R1) BMI TTHOCM BEQ 23$ BIT #WRWT$,T.STAT(R3) BEQ 9$ 23$: BIS #WRWT$,T.STAT(R3) MOV TTCQE,R1 ADD #Q.BUFF-Q.BLKN,R1 TTHOU1: TST (R1)+ BEQ TTHOCM .IF NE MMG$T MOV @#KISAR1,-(SP) BIT #40000,@R1 BEQ 24$ SUB #20000,@R1 ADD #200,Q.PAR-Q.WCNT(R1) 24$: MOV Q.PAR-Q.WCNT(R1),@#KISAR1 .ENDC MOVB @(R1)+,R0 .IF NE MMG$T MOV (SP)+,@#KISAR1 .ENDC TST T.CNF2(R3) BMI OUPXXX .ASSUME WPALL$ EQ 100000 TST R0 BNE 13$ 25$: INC -(R1) DEC -(R1) BR TTHOU1 TTHOCM: MOV R5,-(SP) MOV R4,-(SP) JSR PC,TTCMPL MOV (SP)+,R4 MOV (SP)+,R5 MOV R2,R1 JMP 991$ .DSABL LSB .IF NE DZ11$N .SBTTL DZIINT - DZ11 input interrupt service DZIINT:: .IF GT DZ11$N-1 GETPSW MOV (SP)+,DZTMP .ENDC JSR R5,$INTEN .WORD ^C&PR7 JSR R3,SAVE30 1$: .IF GT DZ11$N-1 MOV DZTMP,R4 BIC #^C<17>,R4 ASL R4 PDZTB0 == .+2 MOV DZTBL(R4),R3 PDZCS0 == .+2 MOV DZCSR(R4),R4 .IFF MOV DZTBL,R3 MOV DZCSR,R4 .ENDC MOV DZ.RBUF(R4),R0 BPL 3$ .ASSUME DZDVD$ EQ 100000 MOV R0,R5 SWAB R5 BIC #^C<7>,R5 ASL R5 ADD R3,R5 MOV @R5,R3 BEQ 1$ TSTB T.CNF2(R3) BMI 2$ .ASSUME RPALL$ EQ 200 BIC #^C<177>,R0 BEQ 1$ 2$: JSR PC,INPTR BEQ 1$ JSR PC,INTCOM BR 1$ 3$: RTS PC .SBTTL DZOINT - DZ11 output interrupt service DZOINT:: .IF GT DZ11$N-1 GETPSW MOV (SP)+,DZTMP .ENDC JSR R5,$INTEN .WORD ^C&PR7 JSR R3,SAVE30 .IF GT DZ11$N-1 MOV DZTMP,R4 BIC #^C<17>,R4 ASL R4 PDZTB1 == .+2 MOV DZTBL(R4),R3 PDZCS1 == .+2 MOV DZCSR(R4),R4 .IFF MOV DZTBL,R3 MOV DZCSR,R4 .ENDC MOVB 1(R4),R5 BIC #^C<7>,R5 ASL R5 ADD R3,R5 MOV @R5,R3 JSR PC,OUTPTR BEQ 2$ JSR PC,OUTCHR BCS 2$ MOVB R0,DZ.TDR(R4) RTS PC 2$: MOVB T.PUN(R3),R0 PBMSK3 == .+2 BICB BITMSK(R0),DZ.TCR(R4) RTS PC .IF NE DZ11$M .SBTTL DZMCTL -- MULTI-TERMINAL DZ11 MODEM CONTROL DZMCTL::JSR R5,SAVE52 CLR R2 1$: .IF EQ DZV$11 MOV #8.+1,-(SP) .IFF MOV #4.+1,-(SP) .ENDC PDZCS2 == .+2 MOV DZCSR(R2),R4 BEQ 4$ PDZTB2 == .+2 MOV DZTBL(R2),R1 MOVB #377,DZ.DTR(R4) 2$: DEC @SP BEQ 4$ MOV (R1)+,R3 BEQ 2$ BIT #REMOT$,@R3 BEQ 2$ MOVB T.PUN(R3),R0 PBMSK4 == .+2 BITB BITMSK(R0),DZ.CAR(R4) BEQ 3$ BIT #HNGUP$,T.STAT(R3) BEQ 2$ MOV #DZANS$,-(SP) BISB R0,@SP MOV (SP)+,DZ.LPR(R4) BIC #INIST$+HNGUP$,T.STAT(R3) .IF NE MAT$S JSR PC,CARON .ENDC BR 2$ 3$: BIT #HNGUP$,T.STAT(R3) BNE 2$ PBMSK5 == .+2 BICB BITMSK(R0),DZ.DTR(R4) BIS #HNGUP$,T.STAT(R3) .IF NE MAT$S JSR PC,HNGON .ENDC BR 2$ 4$: CMP (SP)+,(R2)+ CMP R2,#DZ11$N*2 BLO 1$ DZTIMR: MOV DZTMCP,DZTCOM JSR R5,$TIMIO .WORD DZTMBK - . .WORD 0 .WORD 0 .WORD CLOCK/2 RTS PC DZTMBK: .WORD 0,0 .WORD 0,0 .WORD 177442 .WORD -1 DZTCOM: .WORD 0 DZTMCP::.WORD DZMCTL .ENDC .ENDC .IIF EQ DZ11$N, .LIST .IF NE DZ11$M!DL11$M!MTI$M .SBTTL SAVE52 - Save registers R5-R2 SAVE52: MOV R4,-(SP) MOV R3,-(SP) MOV R2,-(SP) JSR PC,@R5 MOV (SP)+,R2 MOV (SP)+,R3 MOV (SP)+,R4 MOV (SP)+,R5 RTS PC .ENDC .IF NE MAT$S .SBTTL Report status subroutines CARON:: JSR R1,TRMSTS .WORD AS.HNG .WORD AS.CAR HNGON:: JSR R1,TRMSTS .WORD AS.CAR .WORD AS.HNG CTCON:: JSR R1,TRMSTS .WORD 0 .WORD AS.CTC CLRIN:: JSR R1,TRMSTS .WORD AS.INP .WORD 0 SETIN:: JSR R1,TRMSTS .WORD 0 .WORD AS.INP RGFUL:: JSR R1,TRMSTS .WORD AS.OUT .WORD 0 RGEMP:: JSR R1,TRMSTS .WORD 0 .WORD AS.OUT .SBTTL TRMSTS - Copy terminal status to user TRMSTS: TST T.OWNR(R3) BEQ 1$ TST T.AST(R3) BEQ 1$ .IF NE MMG$T MOV @#KISAR1,-(SP) MOV T.AST+2(R3),@#KISAR1 .ENDC BIC (R1)+,@T.AST(R3) BIS (R1)+,@T.AST(R3) .IF NE MMG$T MOV (SP)+,@#KISAR1 .ENDC 1$: MOV (SP)+,R1 RTS PC .ENDC .SBTTL DATA AREAS .IF NE BF TTOUSR::.WORD BKGND TTIUSR::.WORD BKGND .ENDC TTHOUS::.WORD 0 TTHIUS::.WORD 0 .IF NE HSR$B HSRB:: .WORD HSRBUF HSRBEP::.WORD HSRBUE HSRBRP::.WORD HSRBUF HSRBCC::.WORD -1 HSRBGP::.WORD HSRBUF HSRBUF::.BLKW HSRBSZ*2 HSRBUE:: TIFBLK::BSS F.BSIZ/2 .ENDC .IF NE HSR$O .IF EQ DL11$N-1 HSROCC::.WORD -1 .IFF HSROPP::.WORD HSROBF HSROEP::.WORD HSROBE HSRORP::.WORD HSROBF HSROCC::.WORD -1 HSROGP::.WORD HSROBF HSROBF::.BLKB DL11$N HSROBE:: .EVEN .ENDC TOFBLK::BSS F.BSIZ/2 .ENDC .END .MCALL .MODULE .MODULE RMONFB,VERSION=89,COMMENT= ; COPYRIGHT (c) 1987 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. VENU$C = 1 .IIF NDF VENU$C VENU$C = 0 .IIF DF NLRMON, .NLIST .NLIST BEX .SBTTL ************************** .SBTTL * RMON * .SBTTL ************************** .SBTTL MONITOR DATA BASE .SBTTL MACROS FOR MONITOR ONLY .MACRO SPL N .WORD PSWLST PSWLST == .-2 .IF EQ N .WORD -2 .IFF .WORD N*40,PS .ENDC .ENDM SPL .MACRO GETPSW .WORD PSWLST,-4 PSWLST == .-4 .ENDM GETPSW .MACRO PUTPSW .WORD PSWLST,-6 PSWLST == .-4 .ENDM PUTPSW PSWLST = 0 .MCALL ...CMV .SBTTL MONITOR DATA BASE .PSECT RTDATA $RMON:: JMP $INTEN $CSW:: BSS CHNUM*CHNWDS SB17 == $CSW++2 .IF EQ MTT$Y WRWT$ = 100000 .ENDC $SYSCH::.WORD <100002*MMG$T> .WORD 0 .WORD 0 .WORD 0 .WORD 0 BLKEY:: .WORD 0 CHKEY:: .WORD 0 $DATE:: .WORD 0 DFLG:: .WORD 0 $USRLC::.WORD USRBUF QCOMP:: .WORD COMPLT SPUSR: .WORD 0 SYUNIT::.WORD 0 ...CMV PART=ALL,TYPE=V SYSVER: .BYTE RT$REL SYSUPD: .BYTE RT$VER CONFIG::.WORD FBMON$!CLK50! SCROLL::.WORD 0 TTKS:: .WORD TKS TTKB:: .WORD TKB TTPS:: .WORD TPS TTPB:: .WORD TPB MAXBLK: .WORD -1 E16LST: .WORD LST16-$RMON CNTXT:: .WORD BKGND JOBNUM::.WORD 0 SYNCH:: .WORD $SYNCH LOWMAP::.RADIX 2 .BYTE 11111111,00111100,00001111,11110000 .BYTE 11000011,00000000,00000000,00000000 .BYTE 00000000,00000000,00110000,00000000 .BYTE 00000000,00000000,00000000,00000000 .BYTE 00000000,00000000,00000000,00000000 .RADIX 8. MAPSIZ = <. - LOWMAP> / 2 MAPOFF == LOWMAP - $RMON USRLOC::.WORD USRBUF GTVECT::.WORD VT.VEC ERRCNT: .WORD 0 $MTPS:: BR PUTPSW $MFPS:: BR GETPSW SYINDX::.WORD 2 SYINDO == SYINDX - $RMON STATWD::.WORD 0 CONFG2::.WORD SYSGEN::.WORD SYSOP$ USRARE: .WORD USRSIZE ERRLEV::.BYTE ERROR$!FATAL$!UNCON$ IFMXNS::.BYTE MXN$ST EMTRTN: .WORD EMTRTI-$RMON FORK:: .WORD $FORK-$RMON PNPTR:: .WORD $PNAME-$RMON MONAME::ASCR50 NAME$1,NAME$2,NAME$3 .WORD ...V2 ASCR50 NAME$4,NAME$5,NAME$6 .WORD ...V2 HSUFFX::ASCR50 040,040,SUFX$H .WORD ...V2 SPSTAT::.WORD 0 EXTIND::.BYTE 0 INDSTA::.BYTE 0 $MEMSZ::.WORD 0 CONLOG::.WORD GTIHOK-$RMON .IF EQ MTT$Y $TCFIG::.WORD TTCNFG .IFF $TCFIG::.WORD DLTCB .ENDC $INDDV::.WORD INDDEV MEMPTR::.WORD CORPTR-$RMON .IF NE MMG$T P1EXT:: .WORD $P1EXT $TRPLS:: .WORD TRPLST .IFF P1EXT:: .WORD 0 $TRPLS:: .WORD 0 .ENDC GETVEC:: .WORD ERRRTN DWTYPE:: .WORD 0 TRPSET:: .WORD I.TRAP $NULJB::.WORD ..NULJ IMPLOC::.WORD $IMPUR+MXJBNM+2 KMONIN::.WORD 1 .IF NE MMG$T PROGDF::.BYTE 200!$$KEX .IFF PROGDF::.BYTE 200!$$KED .ENDC .BYTE 200!$$FORTRAN WILDEF::.BYTE 1 .BYTE 0 MAXOFF == . - $RMON USRLVL: .BYTE 0 USROWN: .BYTE 377 USRSWP: .WORD 0 $SWPBL::.WORD 0 EXLIST: .WORD 0 .WORD - .WORD 0 $KMLOC::.WORD KMON .WORD USRLEN+KMLEN .WORD 0 KMLOC:: .WORD KMON $TIME:: BSS 2 $RAMSZ:: .WORD 0 CORPTR::.WORD 0 .WORD CORPTR .IF NE MMG$T CORPTX::.WORD $XMSIZ-$RMON .WORD BGWPTR-BKGND+2 .ENDC .SBTTL GETPSW .ENABL LSB GETPSW::MOV @#PS,-(SP) .IF EQ MMG$T CLRB 1(SP) .ENDC MOV 2(SP),-(SP) MOV 2(SP),4(SP) BR 1$ .SBTTL PUTPSW PUTPSW::MOVB 2(SP),@#PS 1$: MOV (SP)+,@SP RTS PC .DSABL LSB SPSIZE: .WORD 0 CCB:: BSS 10 SWIIOB: .WORD 0,USRLEN,0 SWOIOB: .WORD 0,-USRLEN,0 KMBLK:: BSS 3 .IF NE BF DRVTBL: .WORD 0 .IF NE MMG$T .WORD $RELOC-$RMON .WORD $MPPHY-$RMON .WORD $GETBYT-$RMON .WORD $PUTBYT-$RMON .WORD $PUTWRD-$RMON .ENDC .IF NE ERL$G .WORD $ERLOG-$RMON .ENDC .IF NE TIM$IT .WORD $TIMIO-$RMON .ENDC DRINTN::.WORD $INTEN-$RMON .WORD $FORK-$RMON DRVTSZ = . - DRVTBL .ENDC INBFPT: .WORD 0 IFSVST::.WORD 0 CURLEV::.WORD 0 FRKCQE: .WORD 0 FRKLQE: .WORD 0 SYDVSZ::.WORD 0 $JBLIM:: SYSLOW:: BLIMIT:: .IF EQ MMG$T .WORD $RMON,0 .IFF .WORD USRBUF,0 .ENDC .REPT FJOBS .WORD 0,0 .ENDR .SBTTL DESCRIPTION OF MONITOR DATA BASE .SBTTL MONITOR DEVICE TABLE LAYOUT .PSECT OWNER$ $OWNER:: .PSECT UNAM1$ $UNAM1:: .PSECT UNAM2$ $UNAM2:: .PSECT PNAME$ $PNAME:: .PSECT ENTRY$ $ENTRY:: .PSECT STAT$ $STAT:: .PSECT DVREC$ $DVREC:: .PSECT HSIZE$ $HSIZE:: .PSECT DVSIZ$ $DVSIZ:: .IF NE MMG$T .PSECT DVINT$ $DVINT:: .ENDC .PSECT RMON RTCODE:: .SBTTL IMPURE AREA OFFSET DEFINITONS DSECT GLOBAL=YES DS I.STATE DS I.QHDR DS I.CMPE DS I.CMPL DS I.CHWT DS I.PCHW DS I.PERR .IF EQ MTT$Y DS I.TTLC DS I.PTTI .IFF DS I.CNSL DS ,1 .ENDC DS I.TID DS I.JNUM DS I.CNUM DS I.CSW DS I.IOCT DS I.SCTR DS I.BLOK .IF NE SYT$K DS I.JID,6 DS I.LNAM,3 .IFF DS I.JID,4 .ENDC DS I.NAME,4 DS I.SPLS DS I.TRAP .IF NE FPU$11 DS I.FPP .ENDC .IF NE MMG$T DS I.SPSV .ENDC DS I.SWAP,2 DS I.SP DS I.BITM,MAPSIZ .IF NE MTT$Y DS I.CLUN DS I.TTLC .ENDC DS I.IRNG DS I.IPUT DS I.ICTR DS I.IGET DS I.ITOP DS ,TTYIN BYTES DS I.OPUT DS I.OCTR DS I.OGET DS I.OTOP DS ,TTYOUT BYTES DS I.QUE,QWDSIZ DS I.MSG,2 DS I.SERR,3 DS I.TERM DS I.TRM2 DS I.SCCA .IF NE MMG$T DS I.SCC1,1 .ENDC DS I.DEVL .IF NE MMG$T .IF NE FPU$11 DS I.FPSA .ENDC .IF EQ MTT$Y DS I.SCOM,15. .IFF DS I.SCOM,16. .ENDC DS I.RSAV,8. DS I.WPTR DS I.RGN,RGWDSZ DS I.WNUM DS ,WNWDSZ .IF NE FPU$11 DS I.FSAV,6*4+1 .ENDC DS I.VHI .ENDC .IF NE SPC$PS DS I.ECTR DS I.SPCP .IF NE MMG$T DS I.SPC1 .ENDC .ENDC DS I.SCHP DS I.SYCH,5. IMPSIZ == ..TEMP FMPUR == FCHNM*10. + IMPSIZ+10 .SBTTL BLOCKING CONDITION BIT DEFINITIONS USRWT$ == 20 KSPND$ == 100 EXIT$ == 400 NORUN$ == 1000 SPND$ == 2000 CHNWT$ == 4000 TTOEM$ == 10000 TTOWT$ == 20000 TTIWT$ == 40000 .SBTTL BACKGROUND IMPURE AREA .PSECT RMON BKGND:: .WORD 0 BKGND1::.WORD BAVAIL .WORD 0,0,0,0,0 .IF EQ MTT$Y .WORD 0 .WORD 0 .IFF BKCNSL::.WORD DLTCB .WORD 0 .ENDC BKGND2::.WORD BKGID .WORD 0 .WORD CHNUM BKGND3::.WORD $CSW .WORD 0 .WORD 0 .WORD 0 BKGID: .ASCIZ "B>" .IF NE SYT$K .BLKB BKGID+12.-. .ASCII /*KMON*/ .IFF .BLKB BKGID+8.-. .ENDC BNAME: .WORD 0,0,0,0 .WORD 0 .WORD 0 .IF NE FPU$11 .WORD 0 .ENDC .IF NE MMG$T .WORD 0 .ENDC .WORD 0,0 .WORD 0 BSS MAPSIZ .IF NE MTT$Y .WORD 0 .WORD 0 .ENDC TTIBUF::.WORD IBUFR .WORD IBUFR .WORD 0 .WORD IBUFR .WORD IBUFR+ TTYIN IBUFR: .BLKB TTYIN TTOBUF::.WORD OBUFR .WORD 0 .WORD OBUFR .WORD OBUFR+ TTYOUT OBUFR: .BLKB TTYOUT BAVAIL: BSS QWDSIZ .WORD ACTIV$+ .WORD 0,0,0 .BYTE 0 .BYTE MXJBNM .WORD 0 .WORD 0 .WORD 0 .IF NE MMG$T .WORD 0 .ENDC .WORD 0 .IF NE MMG$T .IF NE FPU$11 BGFPPT::.WORD BGFPSV .ENDC .IF EQ MTT$Y BSS 15. .IFF BSS 16. .ENDC BSS 8. BGWPTR::.WORD BGWNUM BSS RGWDSZ BGWNUM: .WORD W.NNUM BSS WNWDSZ .IF NE FPU$11 BGFPSV: BSS 6*4+1 .ENDC BGVHI:: .WORD 0 .ENDC .IF NE SPC$PS .WORD 0 .WORD 0 .IF NE MMG$T .WORD 0 .ENDC .ENDC PBSYCH:: .WORD $SYSCH .IF NE <. - BKGND> - IMPSIZ+CHSIZ .ERROR .ENDC .SBTTL IMPURE AREA POINTERS .WORD -1 $IMPUR:: BCNTXT::.WORD BKGND .REPT FJOBS .WORD 0 .ENDR FCNTXT == . - 2 MXJBNM = . - $IMPUR - 2 .SBTTL EMT DISPATCH TABLE .MACRO EMTDEF ENTRY,R0CHK=NO,R1CHK=NO,ABBR .GLOBL ENTRY .IF NB ABBR ..'ABBR == ..TEMP .ENDC ..TEMP = ..TEMP + 1 .WORD <+R1CHK>*2+R0CHK .ENDM EMTDEF ..TEMP = 0 NO = 0 YES = 1 .SBTTL EMT 375 DISPATCH TABLE EMTLST: 10$: EMTDEF D$LETE NO NO EMTDEF L$OOK NO NO EMTDEF E$NTER NO NO EMTDEF S$TRAP YES NO EMTDEF R$NAME NO NO EMTDEF S$AVST YES NO EMTDEF R$OPEN YES NO EMTDEF C$LOSE NO NO EMTDEF R$EAD NO YES EMTDEF W$RITE NO YES EMTDEF W$AIT NO NO EMTDEF C$PYCH NO NO EMTDEF D$VICE YES NO EMTDEF C$DFN YES NO EMTDEF EMT16 NO NO EMTDEF EMT17 NO NO EMTDEF G$TJB YES NO EMTDEF G$TIM YES NO GTIM EMTDEF M$RKT YES YES MRKT EMTDEF C$MKT NO YES CMKT EMTDEF T$WAIT YES NO TWAI EMTDEF S$DAT NO YES EMTDEF R$CVD NO YES EMTDEF C$STAT YES NO EMTDEF S$FPP NO NO EMTDEF P$ROTE NO NO EMTDEF S$PFUN NO YES EMTDEF S$SWAP YES NO EMTDEF G$VAL NO NO EMTDEF S$CCA YES NO EMTDEF P$LAS YES NO EMTDEF M$TTIO NO NO EMTDEF S$DTTM YES NO SDTM EMTDEF S$PCPS YES NO EMTDEF S$FDAT YES NO EMTDEF F$PROT NO NO E375MX = <. - 10$> / 2 .SBTTL EMT 374 DISPATCH TABLE 11$: EMTDEF W$AIT EMTDEF S$SPND EMTDEF R$SUME EMTDEF P$URGE EMTDEF S$ERR EMTDEF H$ERR EMTDEF C$LOSE EMTDEF T$LOCK EMTDEF C$HAIN EMTDEF M$WAIT EMTDEF D$ATE EMTDEF A$BTIO E374MX = <. - 11$> / 2 EMTMAX = <. - 10$> / 2 .SBTTL ERROR LOGGING HOOKS .IF NE ERL$G .ENABL LSB $ERLOG:: .ROM TST $ELHND,GLOBAL=YES BEQ 1$ JSR PC,@$ELHND BCC 1$ MOV R5,-(SP) .ROM MOV $ELIMP,R5,GLOBAL=YES CLR I.SCTR(R5) JSR R4,UNBLOK .WORD SPND$ MOV (SP)+,R5 1$: RTS PC .DSABL LSB .ENDC .SBTTL ERROR PROCESSOR .IF NE FPU$11 .SBTTL FPP ERROR HANDLER .IF NE MMG$T FPPERR::GET SP,R4 BIT #HWFPU$,CONFIG BEQ 1$ TST (R4)+ 1$: GET @R4,R4 .IFF FPPERR::BIT #HWFPU$,CONFIG BEQ 1$ TST (SP)+ 1$: MOV (SP)+,R4 .ENDC MOV #FPP.E,R3 JMP ERRCOM .ENDC .SBTTL POWER FAIL .ENABLE LSB .IF NE PWF$L TRAPPF::ADDR POWRUP,R0 MOV R0,@#V.PWFL BR SYHALT POWRUP::MOV #1000,SP JSR R1,1$ .ASCIZ /?MON-F-Power fail halt/ .EVEN .ENDC .SBTTL FATAL ERROR PROCESSING, SYSTEM HALT FATAL:: RESET .IF NE PWF$L .IF EQ MMG$T .ROM MOV R1,R1SAVE ADDR SHLT,R1 BR 1$ .IFF JSR R1,1$ .ENDC SHLT: .ASCIZ /?MON-F-System halt/ .EVEN 1$: TSTB @TTPS BPL 1$ HKPC13 == . MOVB (R1)+,@TTPB .ASSUME .-HKPC13 EQ 4 BNE 1$ .IF EQ MMG$T MOV R1SAVE,R1 .IFF MOV (SP)+,R1 .ENDC .ENDC SYHALT::HALT BR .-2 .DSABL LSB .SBTTL MEMORY PARITY TRAP HANDLING .IF NE MPT$Y .ENABL LSB TRAPMP::MOV #-2,-(SP) BIT #CACHE$,CONFG2 BEQ 3$ BIT #360,@#177744 BEQ 3$ DEC @SP 3$: .IF NE ERL$G MOV R4,-(SP) MOV 2(SP),R4 .IFTF JSR R5,4$ PARTBL:: BSS 16. 4$: .IFT JSR PC,$ERLOG .IFTF MOV (SP)+,R5 .IFT MOV (SP)+,R4 .ENDC CMP #-3,(SP)+ BNE 5$ RTI 5$: TST INTLVL BPL FATAL .IF EQ MMG$T MOV #MPAR.E,R3 MOV (SP)+,R4 BR ERRCOM .IFF JMP TRPXMP .ENDC .DSABL LSB .ENDC .SBTTL TRAPS TO 4, 10 .ENABL LSB TRAP10:: TRAP4:: ROL @#ERRBYT TST INTLVL BPL FATAL .IF EQ MMG$T CMP #400,SP BHIS 12$ .ENDC SPL 0 .IF EQ MMG$T MOV R5,-(SP) MOV CNTXT,R5 MOV I.TRAP(R5),-(SP) BEQ 11$ CLR I.TRAP(R5) MOV (SP)+,R5 ASR @#ERRBYT RTS R5 .IFF CLR -(SP) MOV R5,-(SP) MOV CNTXT,R5 MOV I.TRAP(R5),-(SP) BEQ 10$ ASR @#ERRBYT ROL 4(SP) CLR I.TRAP(R5) MOV 2(SP),R5 MOV @SP,2(SP) JMP XMRERT 10$: TST (SP)+ .ENDC 11$: CMP (SP)+,(SP)+ 12$: MOV (SP)+,R4 .IF EQ MMG$T MOV @#USERSP,SP .IFF TST (SP)+ BIS #PMODE,@#PS GET @#USERSP,-(SP) PUT (SP)+,SP .ENDC BEQ FATAL SPL 0 ASR @#ERRBYT MOV #TR04.E,R3 ADC R3 .BR ERRCOM .DSABL LSB .SBTTL FATAL ERRORS - COMMON PROCESSING .MACRO ERRMSG CODE,TEXT .ASCII TEXT<200> CODE'.E == ...ERN ...ERN = ...ERN + 1 .ENDM ERRMSG ...ERN = 0 .ENABL LSB ERRCOM::.HRESET .RCTRLO .IF EQ MTT$Y JSR PC,CTRLQ2 .IFF ERRHOK:: .IF EQ PDT$OP BIC #TPS$MK,@TTPS .IFF CLR @TTPS NOP .ENDC BIS #100,@TTPS .ASSUME .-ERRHOK EQ 14 .ENDC JSR R0,2$ .ASCII "?MON-F-"<200> ERRMSG USRX,<"Inv USR"> ERRMSG NODV,<"No dev"> ERRMSG DIRI,<"Dir I/O err"> ERRMSG FETC,<"Bad fetch"> ERRMSG OVLY,<""> ERRMSG DOVR,<"Dir ovflo"> ERRMSG ADDR,<"Inv addr"> ERRMSG CHAN,<"Inv chan"> ERRMSG EMT,<"Inv EMT"> ERRMSG TR04,<"Trap to 4"> ERRMSG TR10,<"Trap to 10"> ERRMSG ILLD,<"Inv dir"> ERRMSG UDRV,<"Unloaded driver"> ERRMSG FPP,<"FPU trap"> ERRMSG MPAR,<"Mem err"> ERRMSG MMUF,<"MMU fault"> ERRMSG ISST,<"Inv SST"> ERRMSG OVER,<"Ovly err"> .EVEN 1$: TSTB (R0)+ BPL 1$ DEC R3 BPL 1$ 2$: .PRINT TST R3 BPL 1$ .TTYOUT #SPACE MOVB #30,R0 SEC 3$: ROL R4 ROLB R0 .TTYOUT MOV #206,R0 4$: ASL R4 BEQ 5$ ROLB R0 BCS 4$ BR 3$ 5$: JSR R0,6$ .ASCII <0>"?MON-W-Directory unsafe" MZEROB: .BYTE 0 .EVEN 6$: CMPB JOBNUM,USROWN BNE 7$ TST DFLG BEQ 7$ INC R0 CLR DFLG 7$: .PRINT TST JOBNUM BNE 8$ BIS #IFABRT,STATWD BISB #,@#USERRB 8$: JMP UABORT .DSABL LSB .SBTTL EMT 376 PROCESSING - MONITOR FATAL TRAPS .ENABL LSB 1$: COM R3 2$: MOV -(R2),R4 .IF NE MMG$T CMP (R2)+,(R2)+ .ENDC MOV R2,SP JMP ERRCOM E376:: MOV SAVEST+2(SP),R1 .IF EQ MMG$T MOVB (R1)+,R2 CMPB @R1,#^C BEQ 3$ ADD SP,R2 ADD #ERRPS,R2 MOVB (R1)+,R3 .IFF GET (R1)+,R3 MOVB R3,R2 ADD SP,R2 ADD #ERRPS,R2 SWAB R3 CMPB R3,#^C BEQ 3$ BIT #CMODE,OLDPS(SP) BNE 4$ MOVB R3,R3 .ENDC BMI 1$ MOV CNTXT,R5 TSTB I.SERR(R5) BEQ 2$ COM R3 MOVB R3,@#ERRBYT BIS #1,@R2 MOV R1,SAVEST+2(SP) JMP EMTRTI 3$: MONERR OVER,,FATAL .IF NE MMG$T 4$: JMP TOOBIG .ENDC .DSABL LSB .SBTTL CONSOLE TTY CONFIGURATION DATA .IF NE,RTE$M CLIFLG::.BYTE UCLON!CCLON!DCLON!UCFON .IFF; NE,RTE$M CLIFLG::.BYTE UCLON!CCLON!DCLON .ENDC; NE,RTE$M CLITYP::.BYTE -1 INDDEV::.ASCII /SY0:/ .IF EQ MTT$Y .IF NE SYT$K XFLAG:: .BYTE 0 XCOUNT: .BYTE 0 XPREV: .WORD 0 XBUFF: .BLKB 6 XPROMT: .ASCIZ /JOB> / .ENDC TTWIDT::.BYTE 80. .BYTE CR FILCHR: .BYTE 0 FILCTR: .BYTE 0 OUTCHR: .BYTE 0 LINPOS: .BYTE 0 TTCNFG::.WORD PAGE$!FBTTY$!HWTAB$!BKSP$ .ENDC .SBTTL EMT PROCESSOR .ENABL LSB EMTPRO::BIC #1,2(SP) MOV R5,-(SP) MOV R4,-(SP) JSR R3,SAVE30 TST (SP)+ .IF NE MMG$T MOV @#KISAR1,@SP MOV R0,-(SP) .ENDC .IF NE SPC$PS MOV CNTXT,R5 INC I.ECTR(R5) .ENDC CLR R2 MOV SAVEST+2(SP),R5 GET -(R5),R4 .IF NE MMG$T BIT #PMODE,@#PS BEQ 2$ MOV #SYSCOM,R1 1$: GET @R1,(R1)+ CMP R1,#SYSPTR BLO 1$ 2$: .ENDC MOV SP,R1 CMPB R4,#374 BHIS NEWEMT .IF EQ MMG$T ADD #SAVEST+6,R1 .IFF BIT #PMODE,@#PS BNE 3$ ADD #SAVEST+6,R1 BR 4$ 3$: GET SP,R0 JSR PC,$RELOM MOV R0,R1 MOV @SP,R0 CLR R2 .ENDC 4$: MOV R4,R5 BIC #^C<17>,R4 BIC #^C<17*20>,R5 ASR R5 ASR R5 ASR R5 BR EMTCOM NEWEMT: BNE 5$ ADD #E375MX*400,R0 BR 7$ 5$: CMPB R4,#376 BHI EMTOUT BEQ E376 .IF NE MMG$T BIT #PMODE,@#PS BEQ 6$ .ENDC JSR R5,CHKSP BR ERRARG .IF NE MMG$T JSR PC,$RELOM .ENDC 6$: MOV #100000,R2 MOV R0,R1 MOV (R1)+,R0 MOV (R1)+,@SP 7$: CLR R4 BISB R0,R4 BEQ 8$ MOV CNTXT,R5 CMPB R4,I.CNUM(R5) BHIS CHANER 8$: MOV R0,R5 CLRB R5 SWAB R5 CMPB #EMTMAX,R5 BLOS TOOBIG ASL R5 MOV @SP,R0 .BR EMTCOM EMTCOM::ADD PC,R5 MOV EMTLST-.(R5),R5 ROR R5 BCC 9$ JSR R5,CHKSP BR ERRARG 9$: ASR R5 BCC 10$ MOV @R1,-(SP) JSR R5,CHKSP BR ERRARH TST (SP)+ 10$: ASL R5 MOV R5,-(SP) MOV CNTXT,R5 ASL R4 MOV R4,R3 ASL R3 ASL R3 ADD R4,R3 ADD I.CSW(R5),R3 CLRB @#ERRBYT ADD (SP)+,PC EMTCAL: TOOBIG::MONERR EMT BR EMTOUT ERRARH: TST (SP)+ ERRARG::MONERR ADDR BR EMTOUT CHANER: MONERR CHAN EMTOUT: JMP EMTDON .DSABL LSB .SBTTL MARKTM - GET A QUEUE ELEMENT AND PLACE IT ON THE TIMER QUEUE .ENABL LSB MARKTM::TST (R5)+ SPL 7 MOV @R5,R3 BEQ 6$ MOV @R3,@R5 SPL 0 GET (R0)+,(R3)+ GET (R0)+,(R3)+ ADD #C.COMP-C.LINK,R3 MOV (R1)+,@R3 CLR -(R3) .IF NE MMG$T CMP #177700,@R1 BNE 1$ MOV #-3,@R3 .ENDC 1$: MOV (R1)+,-(R3) MOV JOBNUM,-(R3) TST -(R3) ENSYS 5$ .BR TIMIO .SBTTL TIMIO - PUT AN ELEMENT ON THE TIMER QUEUE TIMIO:: ADD PSCLOK,-(R3) ADC -(R3) MOV (R3)+,R0 ADDR LKQUE,R2 2$: MOV R2,R1 MOV @R1,R2 BEQ 4$ MOV (R2)+,R4 MOV (R2)+,R5 CMP R0,R4 BNE 3$ CMP @R3,R5 3$: BHIS 2$ 4$: TST -(R3) MOV @R1,C.LINK(R3) MOV R3,@R1 5$: RTS PC 6$: SPL 0 ER0SP: TST (SP)+ ERRLK0: JMP EMTER0 .DSABL LSB .IF NE TIM$IT .SBTTL $TIMIO - DEVICE I/O TIME OUT SERVICE .ENABL LSB $TIMIO::JSR R3,SAVE30 MOV R5,R3 ADD (R5)+,R3 MOV 12(SP),-(SP) MOV R4,-(SP) TST (R5)+ BNE $CANIO MOV (R5)+,(R3)+ MOV (R5)+,(R3)+ MOV R5,16(SP) MOV #-1,C.SYS-C.LINK(R3) ENSYS 1$ BR TIMIO .SBTTL $CANIO - CANCEL DEVICE I/O TIMEOUT $CANIO::MOV R5,16(SP) MOV C.SEQ(R3),R0 MOV #-1,R1 MOV C.JNUM(R3),R2 CLR R5 JSR PC,CMARKT 1$: MOV (SP)+,R4 MOV (SP)+,R5 2$: RTS PC .DSABL LSB .ENDC .SBTTL .CDFN - CHANNEL DEFINE EMT .ENABL LSB C$DFN: MOV @R1,-(SP) .IF NE MMG$T CALL $U2P1 BCC 1$ MOV @SP,R0 CALL PL5WD BCS ER0SP 1$: MOV R2,R0 MOV R2,2(SP) CALL P1SD .ENDC ADD #I.CNUM,R5 MOV I.CSW-I.CNUM(R5),R2 CMPB @SP,@R5 BLOS ER0SP JSR PC,QUIESCE CLR R3 2$: MOV #CHNWDS,R4 CMPB @R5,R3 BHI 4$ 3$: CLR (R0)+ SOB R4,3$ BR 5$ 4$: MOV (R2)+,(R0)+ SOB R4,4$ 5$: INCB R3 CMPB @SP,R3 BHI 2$ MOV (SP)+,(R5)+ BR 12$ .SBTTL .TWAIT - TIMED WAIT EMT FUDGE2::.WORD RESUM .WORD 177700 T$WAIT: MOV (PC)+,R1 FUDGE1:: .WORD FUDGE2 JSR PC,MARKTM .BR S$SPND .SBTTL .SPND - SUSPEND JOB EMT S$SPND: MOV CNTXT,R1 DEC I.SCTR(R1) BPL RTILK0 TST @R1 BMI RTILK0 JSR R4,$SYSWT .WORD SPND$ MOV I.SCTR(R1),R0 ASL R0 JSR PC,@(SP)+ BR RTILK0 RESUM: MOV CNTXT,R0 INC I.SCTR(R0) RTS PC .SBTTL .RSUM - RESUME JOB EMT R$SUME: INC I.SCTR(R5) BR RTILK0 .SBTTL .MRKT - MARK TIME EMT M$RKT: JSR PC,MARKTM BR RTILK0 .SBTTL .CNTXSW - SPECIFY CONTEXT SWITCHED LOCATIONS EMT S$SWAP: TST (R5)+ .IF NE MMG$T TST (R5)+ BIT #WINDW$,I.STATE-4(R5) BNE 6$ .ENDC TST @R0 BNE 7$ 6$: CLR @SP 7$: TST @SP BEQ 10$ 8$: MOV (R0)+,-(SP) CMP #V.MAX,@SP BHI 9$ M$SV11 == .+2 CMP #160000,@SP BLOS 9$ JSR R5,CHKSP CLR @SP 9$: ASR (SP)+ BLOS EMTER0 TST @R0 BNE 8$ .IF NE FPU$11 .BR S$FPP .SBTTL .SFPA - SET FPU EXCEPTION ADDRESS EMT S$FPP: CMP #1,R0 BHIS 10$ JSR R5,CHKSP BR EMTER0 .ENDC 10$: .IF NE FPU$11 TST (R5)+ .ENDC .BR S$TRAP .SBTTL .TRPSET - SET TRAP TO 4/10 INTERCEPT EMT S$TRAP: TST (R5)+ 11$: ADD #I.SPLS,R5 12$: MOV @SP,@R5 .IF EQ FPU$11 S$FPP: .ENDC RTILK0: JMP EMTRTI .SBTTL .DEVICE - SET PROGRAM TERMINATION JAM LIST EMT D$VICE: .IF NE MMG$T BIT #WINDW$,@R5 BEQ 13$ CLR @SP CLR R4 13$: MOV @SP,R0 CALL $USRPH BCC 135$ JMP EMTER0 135$: .ENDC TSTB R4 BEQ 11$ MOV @SP,R0 MOV I.DEVL(R5),@R0 MOV R0,I.DEVL(R5) BR EMTRTI .SBTTL .SCCA - SET CTRL/C AST EMT S$CCA: .IF EQ MMG$T MOV I.SCCA(R5),R0 .IF NE SCCA$G TST JOBNUM BNE 15$ TST R4 BEQ 15$ CLR R0 BITB #CC$GLB,INDSTA BEQ 14$ MOV PC,R0 14$: BICB #CC$GLB,INDSTA TST @SP BEQ 16$ BISB #CC$GLB,INDSTA BR 16$ .ENDC 15$: MOV @SP,I.SCCA(R5) 16$: MOV R0,@SP .IFF JSR R1,17$ SCCATB:: .WORD .-. .REPT FJOBS .WORD .-. .ENDR 17$: .IF NE SCCA$G TST JOBNUM BNE 19$ TST R4 BEQ 19$ CLR 2(SP) BITB #CC$GLB,INDSTA BEQ 18$ INC 2(SP) 18$: TST (SP)+ BICB #CC$GLB,INDSTA TST R0 BEQ 20$ BISB #CC$GLB,INDSTA BR 20$ .ENDC 19$: ADD JOBNUM,R1 MOV @R1,2(SP) MOV R0,@R1 MOV (SP)+,R1 MOV R0,I.SCCA(R5) BEQ RTILK0 JSR PC,$RELOC MOV R2,I.SCCA(R5) MOV R1,I.SCC1(R5) .ENDC 20$: BR RTILK0 .DSABL LSB .SBTTL .TTYIN - TERMINAL INPUT EMT T$TIN:: .IF EQ MTT$Y MOV R5,R2 MOV R5,R1 ADD #I.TTLC,R1 JSR PC,TTRSET TST @R1 BNE 1$ BIT #TCBIT$,@#JSW BNE EMTER0 JSR R4,$SYSWT .WORD TTIWT$ CMP @R1,#1 JSR PC,@(SP)+ 1$: JSR PC,IGET BNE 2$ TST I.SCCA(R5) BEQ 4$ 2$: MOV R4,@SP .IFF MOV I.CNSL(R5),R3 JSR PC,MTTIN BCS EMTER0 BNE 3$ TST I.SCCA(R5) BEQ 4$ 3$: MOV R0,@SP .ENDC BR EMTRTI 4$: TST I.JNUM(R5) BNE 5$ BIS #IFABRT,STATWD 5$: MOV R4,R0 GOEXIT::MOV #..EXIT,R4 JMP EMT16 .SBTTL .TTYOUT - TERMINAL OUTPUT EMT T$TOUT: .IF EQ MTT$Y MOV R0,R4 JSR R0,TTOUT .WORD TCBIT$ .IFF MOV I.CNSL(R5),R3 JSR R1,MTTPUT .WORD TCBIT$ .ENDC BCC EMTRTI EMTER0: EMTERR+0 BR EMTRTI .SBTTL RETURN FROM EMT EMTDON::ASL R2 BEQ EMTRTI MOV SAVEST+2(SP),R3 .IF EQ MMG$T CMP #EMT+374,-(R3) .IFF GET -(R3),-(SP) CMP #EMT+374,(SP)+ .ENDC BLOS EMTRTI .IF NE MMG$T BIT #CMODE,SAVEST+4(SP) BNE 2$ .ENDC MOV SP,R3 ADD #OLDPS+2,R3 ADD R3,R2 1$: MOV -(R3),-(R2) CMP R3,SP BHI 1$ MOV R2,SP .IF NE MMG$T BR EMTRTI 2$: GET SP,-(SP) ADD R2,@SP PUT (SP)+,SP .ENDC .IF EQ MMG$T P$LAS: .ENDC .IF EQ MTT$Y M$TTIO: .ENDC .IF EQ SPC$PS S$PCPS: .ENDC EMTRTI:: .IF NE MMG$T BIT #CMODE,SAVEST+4(SP) BEQ 2$ MOV #SYSCOM,R1 1$: PUT @R1,(R1)+ CMP R1,#SYSPTR BLO 1$ 2$: .ENDC MOV (SP)+,R0 .IF NE MMG$T MOV (SP)+,@#KISAR1 .ENDC MOV (SP)+,R1 MOV (SP)+,R2 MOV (SP)+,R3 .IF NE SPC$PS MOV CNTXT,R5 DEC I.ECTR(R5) BNE 3$ MOV I.SPCP(R5),R4 BEQ 3$ TST @R5 BMI 3$ .IF EQ MMG$T MOV 6(SP),@R4 MOV 4(SP),-(R4) MOV -(R4),4(SP) .IFF MOV @#KISAR1,-(SP) MOV I.SPC1(R5),@#KISAR1 MOV 10(SP),@R4 MOV 6(SP),-(R4) MOV -(R4),6(SP) MOV (SP)+,@#KISAR1 .ENDC SPL 7 CLR I.SPCP(R5) 3$: .ENDC RTICML::JMP RTICMN .SBTTL .SETTOP - SET TOP OF MEMORY IN USE EMT .ENABL LSB S$ETOP: .IF NE MMG$T CLR V$BIAS MOV CNTXT,R4 .IFTF MOV JOBNUM,R2 .IFT CALL XMSTOP .ENDC ASL R2 ADDR $JBLIM+2,R2,ADD CMP R0,@R2 BHIS 1$ MOV @R2,R0 1$: .IF NE MMG$T BIT #VRUN$,@R4 BEQ 2$ CMP R0,#157776 BLOS S$ERTN MOV #157776,R0 BR S$ERTN 2$: .ENDC CMP R0,-(R2) BLO S$EPRV MOV @R2,R0 3$: TST -(R0) S$EPRV::TST JOBNUM BNE S$ERTN JSR PC,ENQUSR CLR USRSWP .IF NE MMG$T CLR KMLOC CMP R0,$KMLOC BLO 5$ .IFF CMP R0,$KMLOC BLO 5$ CLR KMLOC .ENDC CMP R0,$USRLC BLO 5$ BIT #USR$,CONFIG BEQ 4$ MOV $USRLC,R0 BR 3$ 4$: CLR USRLOC MOV SP,USRSWP 5$: TSTB USRLVL BNE S$ERTN JSR PC,DEQUSR S$ERTN:: .IIF NE MMG$T SUB V$BIAS,R0 MOV R0,@SP MOV R0,@#USERTOP BR EMTRTI .DSABL LSB .SBTTL .RCTRLO - RESET CTRL/O EMT R$CTLO: CLRB I.OCTR+1(R5) .IF NE MTT$Y MOV I.CNSL(R5),R3 .ENDC RCTHOK:: JSR PC,TTRSET RTILK3: BR EMTRTI .SBTTL .PRINT - PRINT STRING EMT P$RINT: .IF NE MMG$T JSR PC,PRINTR BR EMTRTI .ENDC PRINTR:: .IF EQ MTT$Y MOVB #LF,OUTCHR .IF NE MMG$T BIT #PMODE,@#PS BEQ 1$ JSR PC,$RELOM 1$: .ENDC 2$: MOVB (R0)+,R4 BEQ 3$ CMP R4,#177600 .IF EQ MMG$T BEQ EMTRTI .IFF BEQ 4$ .ENDC JSR R0,TTOUT .WORD 0 BR 2$ 3$: ADDR 5$,R0 BR 2$ .IFF MOV I.CNSL(R5),R3 MOVB #LF,T.OCHR(R3) .IF NE MMG$T BIT #PMODE,@#PS BEQ 1$ JSR PC,$RELOM 1$: .ENDC MOV R0,R1 2$: MOVB (R1)+,R0 BEQ 3$ CMP R0,#177600 .IF EQ MMG$T BEQ EMTRTI .IFF BEQ 4$ .ENDC JSR R1,MTTPUT .WORD 0 BR 2$ 3$: ADDR 5$,R1 BR 2$ .ENDC .IF NE MMG$T 4$: RTS PC .ENDC 5$: .BYTE CR,LF,200,0 .EVEN .SBTTL .TLOCK - TEST AND LOCK USR EMT T$LOCK: ENSYS 2$ CMPB #377,USROWN BNE 1$ MOVB JOBNUM,USROWN 1$: RTS PC 2$: CMPB JOBNUM,USROWN BEQ L$OCK EMT0ER: EMTERR+0 RTILK2: BR RTILK3 .SBTTL .LOCK - LOCK USR EMT L$OCK: JSR PC,CALUSR BR RTILK3 .SBTTL .UNLOCK - UNLOCK USR EMT .ENABL LSB U$NLOK: CMPB USROWN,JOBNUM BNE RTILK3 TSTB USRLVL BEQ 1$ MONOUT::BIC #USRRN$,@CNTXT DECB USRLVL BNE 2$ 1$: JSR PC,RIDUSR 2$: JMP EMTDON .DSABL LSB .SBTTL INTERNAL ERROR EMT (SET C BIT, ERRBYT) EMT17: ASR R4 MOVB R4,@#ERRBYT BIS #1,ERRPS(SP) BR RTILK2 .SBTTL .SERR - SET SOFT MONITOR ERRORS EMT S$ERR: INC R2 .SBTTL .HERR - DISABLE SOFT MONITOR ERRORS EMT H$ERR: MOVB R2,I.SERR(R5) RTILK1: BR RTILK2 .SBTTL DATE, GVAL, PVAL, POKE, and PEEK EMT's .ENABL LSB D$ATE:: MOV #$DATE-$RMON,R0 CLR R4 BR 1$ G$VAL:: CMP #6,R4 BLO 3$ ASR R4 ASR R4 BCS 2$ 1$: CMP R0,#RMSTAK-$RMON BHIS EMT0ER ADD @#SYSPTR,R0 2$: MOV @R0,@SP ASR R4 BCC RTILK2 MOV @R1,@R0 BR RTILK2 3$: JMP TOOBIG .DSABL LSB .SBTTL .SRESET - SOFT RESET EMT S$RSET: JSR PC,REVERT MOV I.CSW(R3),R1 MOV #CHNUM*CHNWDS,R0 BIT #OVLY$,@#JSW BEQ 1$ SUB #CHNWDS,R0 1$: CLR (R1)+ SOB R0,1$ BR RTILK2 QUIESCE::MOV CNTXT,R3 JSR R4,$SYSWT .WORD EXIT$ MOV I.IOCT(R3),-(SP) NEG (SP)+ JSR PC,@(SP)+ RTS PC .SBTTL EMT 16 SUBCODE DISPATCHER EMT16: TST (R4)+ ADD PC,R4 ADD @R4,PC LST16:: .WORD T$TIN-LST16 .WORD T$TOUT-LST16 .WORD D$STAT-LST16 .WORD F$ETCH-LST16 .WORD C$SIGN-LST16 .WORD C$SISP-LST16 .WORD L$OCK-LST16 .WORD U$NLOK-LST16 ..EXIT = . - LST16 .WORD E$XIT-LST16 .WORD P$RINT-LST16 .WORD S$RSET-LST16 .WORD Q$SET-LST16 .WORD S$ETOP-LST16 .WORD R$CTLO-LST16 .IF NE MMG$T .WORD A$STX-LST16 .IFF .WORD E$XIT-LST16 .ENDC .WORD H$RSET-LST16 .IF NE MMG$T SL$E16: .WORD PRINTR-LST16 .ENDC .SBTTL .CLOSE - CLOSE CHANNEL EMT C$LOSE: MOV @R3,R5 BIC #^C,R5 .ADDR #$STAT,R5,ADD BIT @R5,#SPECL$ BEQ 10$ BIT @R5,#FILST$ BNE 20$ 10$: BIT #,@R3 BEQ P$URGE 20$: JMP C$LOS2 .SBTTL .PURGE - PURGE CHANNEL EMT P$URGE: CLR (R3)+ BR RTILK1 .SBTTL .ABTIO - ABORT I/O ON A CHANNEL .ENABL LSB A$BTIO: MOV @R3,R2 BPL RTILK1 TSTB C.DEVQ(R3) BEQ RTILK1 BIC #^C,R2 ADD PC,R2 ADD #$ENTRY-.,R2 MOV @R2,R0 BEQ RTILK1 ENSYS RTILK1 .IF NE MMG$T .IF NE XM$FET CALL KPSAVE .ENDC .ENDC CLR -(SP) CLR -(SP) MOV R3,-(SP) MOV #100000,-(SP) MOV R0,R3 TST (R3)+ CALL IOQABT BIC #100000,@SP BNE 10$ ADD #<4*2>,SP BR 20$ 10$: MOV CNTXT,R3 SUB (SP)+,I.IOCT(R3) .ASSUME I.QHDR EQ 2 CMP (SP)+,(R3)+ SPL 7 MOV @R3,@(SP)+ MOV (SP)+,@R3 SPL 0 20$: .IF NE MMG$T .IF NE XM$FET CALL KPREST .ENDC .ENDC RTS PC .DSABL LSB .SBTTL .CSIGEN AND .CSISPC - CSI CALL EMTS .ENABL LSB C$SIGN: CLR R4 MOV (PC)+,R0 .BYTE 8.,3 10$: EMT 374 DECB R0 BGE 10$ BR 11$ C$SISP: MOV #100000,R4 11$: BIS #CSIRN$,@R5 MOV #..CSI,R2 MOVB JOBNUM,R3 BEQ 15$ BIS #GTLIN$,@#JSW 15$: TST @R1 BEQ 20$ JMP EMTUSR 20$: INCB R4 CMPB USROWN,R3 BNE 30$ INCB USRLVL CSIERR::CLRB R4 BISB USRLVL,R4 JSR PC,RIDUSR 30$: .IF EQ MMG$T MOV SP,R1 ADD #SAVEST+6+4,R1 .IFF GET SP,R0 JSR PC,$RELOM MOV R0,R1 CMP (R1)+,(R1)+ .ENDC MOV PC,R0 CMP (R0)+,(PC)+ .BYTE ASTER,200 .IF NE MMG$T .ROM CLR UKFLG .ENDC MOV @R1,(PC)+ GTLFLG: .WORD 0 CMP @R1,#3 BHI 35$ INC R0 TST -(R1) BEQ 35$ MOV @R1,R0 .IF NE MMG$T INC UKFLG .ENDC 35$: MOV R0,-(SP) 40$: CLR -(SP) TST JOBNUM BNE 80$ BIT #GTLIN$,@#JSW BNE 45$ TSTB STATWD BMI 120$ 45$: BIT #IFRVTTY,STATWD BNE 80$ MOV INBFPT,R0 BEQ 80$ CMPB @R0,#-1 BEQ 75$ BIT #GTLIN$,@#JSW BEQ 60$ MOVB @R0,-(SP) BIC #^C<177>,@SP CMPB (SP)+,#CTRLC BNE 60$ TSTB (R0)+ BPL 50$ BIS #IFRVTTY,STATWD 50$: BIS #IFGTCC,STATWD 55$: TSTB (R0)+ BNE 55$ MOV R0,INBFPT TST (SP)+ BR 40$ 60$: INC @SP 65$: CMPB @R0,#<177> BEQ 70$ TSTB @R0 BPL 120$ 70$: BIT #,STATWD BNE 120$ BR 90$ 75$: BIC #IFINP,STATWD 80$: MOV CNTXT,R1 BIC #TTSPC$,I.TERM(R1) CMP GTLFLG,#3 BHI 85$ MOV @#JSW,R0 BIC #^CTTLC$,R0 BIS R0,I.TERM(R1) 85$: .IF NE BATC$H TST JOBNUM BNE 95$ .ENDC 90$: .IF NE BATC$H MOV $ENTRY+BA.NUM,R0 BEQ 95$ TST BATSW$(R0) BNE 120$ .ENDC 95$: MOV 2(SP),R0 .IF NE MMG$T TST UKFLG BNE 100$ .ENDC .PRINT MOV R5,R5 .IF NE MMG$T BR 105$ 100$: MOV R1,-(SP) MOV R4,-(SP) ADDR LST16,R1 ADD SL$E16,R1 CALL @R1 MOV (SP)+,R4 MOV (SP)+,R1 .ENDC 105$: TST @SP BNE 120$ TSTB JOBNUM BNE 110$ BIT #SLEDI$,CONFIG BEQ 110$ .MCALL .TTINR .TTINR MOV R4,R4 BR 120$ 110$: JSR R4,$SYSWT .WORD TTIWT$ CMP I.TTLC(R1),#1 115$: JSR PC,@(SP)+ 120$: CMP (SP)+,(SP)+ 125$: MOV #..CSI,R2 JSR PC,CALUSR MOVB R4,USRLVL CLRB R4 BIS #CSIRN$,@CNTXT BR 130$ .SBTTL DISPATCHER FOR EMTS HANDLED IN THE USR D$STAT: INC R2 R$NAME: INC R2 L$OOK: INC R2 E$NTER: INC R2 C$LOS2: INC R2 F$ETCH: INC R2 D$LETE: INC R2 Q$SET2: EMTUSR: JSR PC,CALUSR 130$: BIS #USRRN$,@CNTXT JMP @USRLOC Q$SET: JSR PC,ENQUSR CLR USRLOC CLR KMLOC BR Q$SET2 .DSABL LSB .SBTTL .CHAIN - CHAIN TO PROGRAM EMT .ENABL LSB C$HAIN: BIS #CHAIN$,@#JSW MOV SP,R0 BR 1$ .SBTTL .EXIT - EXIT FROM PROGRAM EMT E$XIT: BIC #CHAIN$,@#JSW 1$: MOV R0,-(SP) .IF NE MMG$T CALL P1SD .ENDC MOV JOBNUM,R2 CMPB USROWN,R2 BNE 2$ CLR BLKEY JSR PC,RIDUSR 2$: TST @CNTXT BPL 3$ JMP UABORT 3$: JSR PC,REVERT .IF NE MTT$Y JSR PC,MTRSET .ENDC CLR @R3 .IF NE SPC$PS CLR I.ECTR(R3) CLR I.SPCP(R3) .ENDC 4$: CLR I.SERR(R3) CLR I.SCCA(R3) .IF NE MMG$T BIS #PMODE,@#PS ADDR SCCATB,R1 ADD JOBNUM,R1 CLR @R1 .ENDC 5$: MOV I.DEVL(R3),R1 BEQ 7$ MOV (R1)+,I.DEVL(R3) 6$: MOV (R1)+,R2 BEQ 5$ MOV (R1)+,@R2 BR 6$ 7$: ADD #I.SPLS,R3 MOV @R3,R0 BEQ 10$ CLR @R3 BR 9$ 8$: MOV (R0)+,@R2 9$: MOV (R0)+,R2 BNE 8$ 10$: MOV (R3)+,(R3)+ .IF NE FPU$11 CLR (R3)+ .ENDC .IF NE MMG$T TST (R3)+ .ENDC CLR (R3)+ CMP (R3)+,(R3)+ ADDR LOWMAP,R5 MOV #MAPSIZ,R2 11$: BIC @R3,(R5)+ CLR (R3)+ SOB R2,11$ .DSABL LSB EXIHOK:: TST JOBNUM BEQ EXITBG .ENABL LSB EXITFG::MOV CNTXT,R5 .IF EQ MTT$Y JSR R4,$SYSWT .WORD TTOEM$ MOVB I.OCTR(R5),-(SP) NEGB (SP)+ JSR PC,@(SP)+ ADDR TTIUSR,R4 JSR PC,CTRL.B .IFF MOV I.CNSL(R5),R3 JSR PC,TTOEWT MOV R3,R2 MOV T.CSR(R2),R4 MOV BKCNSL,R3 CMP R2,R3 BEQ 1$ BIC #CONSL$,T.STAT(R2) .IF NE SYT$K CLR T.CNT(R2) INC T.CNT(R3) .ENDC JSR PC,MTRSET 1$: BIS #SHARE$,T.STAT(R3) MOV BCNTXT,R2 CMP R5,TTIUSR BNE 2$ MOV R2,TTIUSR 2$: CMP R5,TTOUSR BNE 3$ JSR PC,TTOSET 3$: .ENDC .IF EQ MMG$T BIS #NORUN$,I.BLOK(R5) JMP USWAPO .IFF ENSYS QGTELT CALL REGABT BIS #NORUN$,I.BLOK(R5) JMP QWAIT .ENDC .DSABL LSB .ENABL LSB EXITBG:: .ROM MOV SP,EXTFLG,GLOBAL=YES ADD #SPTR->,R5 MOV (SP)+,-(R5) .IF EQ MMG$T MOV R5,SP .IFF MOV R5,R2 ADD #RMSTAK-,R5 MOV R5,SP BIT #VIRT$,@#JSW BEQ 7442$ MOV #500,R0 7441$: GET @R0,(R0)+ CMP R0,#1000 BLO 7441$ 7442$: ENSYS 998$ PUT R2,SP MOV CNTXT,R5 CALL REGABT MOV I.WPTR(R5),R5 MOV (R5)+,R0 12$: CLR @R5 CLR W.BSIZ(R5) ADD #W.BLGH,R5 SOB R0,12$ CALLR MAPLO 998$: JSR PC,FIXTRP .ENDC MOV $KMLOC,R2 TST KMLOC BNE 15$ JSR PC,ENQUSR ADDR USRSWP,R5 CLR (R5)+ MOV (R5)+,R0 .IF NE MMG$T CLR R3 BIT #VIRT$,@#JSW BEQ 579$ MOV #V.MAX,R3 579$: .IFTF MOV R2,@R5 .IFT SUB R3,@R5 .IFTF BIC #777,@R5 MOV (R5)+,@R5 .IFT MOV USRLOC,R4 TST -(R4) SUB R3,R4 CMP R4,@#USERTOP BHIS 114$ MOV R4,@#USERTOP 114$: .ENDC BIT #,CONFG2 BNE 13$ SUB @#USERTOP,@R5 BHI 13$ ROR @R5 DEC @R5 TST -(R5) JSR PC,$SYS BCS SWPERR TST (R5)+ 13$: CMP (R5)+,(R5)+ MOV $MONBL,R0 SUB #KMONSZ,R0 CMP -(R2),-(R2) JSR PC,$SYS BCC 15$ JSR R0,14$ .ASCIZ /?MON-F-System read error/ .EVEN 14$: .PRINT MOV (SP)+,R0 EXRDKM::JSR PC,$SYS BCS EXRDKM 15$: BIC #3400,SPSTAT .IF EQ MMG$T JMP MEXIT2-KMON(R2) .IFF ADD #MEXIT2-KMON,R2 MOV #CMODE,-(SP) MOV R2,-(SP) RTI .ENDC .DSABL LSB SWPERR::.HRESET .RCTRLO CLR @#USERTOP ADDR SWPMSG,R0 .PRINT CLR R4 JMP GOEXIT SWPMSG: .ASCIZ /?MON-F-Swap error/ .EVEN .SBTTL SWAP USR ROUTINE .ENABL LSB CALUSR::JSR PC,ENQUSR INCB USRLVL TST USRLOC BNE 4$ MOV $USRLC,-(SP) TST USRSWP BEQ 3$ MOV @#UFLOAT,@SP BEQ 1$ JSR R5,CHKSP BR 5$ ADD #USRSIZE-2,@SP JSR R5,CHKSP BR 5$ SUB #USRSIZE-2,@SP BR 2$ 1$: TST JOBNUM BNE 5$ MOV $USRLC,@SP 2$: MOV (PC)+,R5 SWOPTR:: .WORD SWOIOB MOV @SP,@R5 CMPB USRLVL,#1 BHI 3$ JSR PC,$SYSSW BCS SWPERR 3$: MOV (PC)+,R5 SWIPTR:: .WORD SWIIOB MOV (PC)+,R0 $MONBL:: .WORD 0 MOV @SP,@R5 .IF NE MMG$T MOV @#PS,-(SP) CLRB @SP BIC #PMODE,@#PS .ENDC JSR PC,$SYS .IF NE MMG$T BIS (SP)+,@#PS .ENDC BCS SWPERR MOV (SP)+,USRLOC 4$: RTS PC 5$: CMP (SP)+,(SP)+ MONERR USRX,,FATAL .DSABL LSB .SBTTL ENTER B/G JOB RDOVLY:: .IF EQ MMG$T CLR KMONIN .IFF ADDR SPTR,SP PUT (SP)+,SP .ENDC JSR PC,$SYS SWPLNK: BCS SWPERR ENTRPG:: .IF EQ MMG$T CLR KMONIN CLRB USRLVL MOV @#USERSP,SP MOV R2,-(SP) BR DEQUSR .IFF ENSYS 3$ PUT @#USERSP,SP CLR KMONIN CLRB USRLVL MOV #CMODE,10(SP) MOV R2,6(SP) JSR PC,DEQUSR MOV CNTXT,R4 BIT #WINDW$,@R4 BEQ 3$ JSR PC,CLRPDR MOV I.WPTR(R4),R4 TST (R4)+ JSR PC,MAPWN CLR R0 JSR PC,$RELOM TST V.EMT(R0) BNE 1$ MOV @#V.EMT,V.EMT(R0) 1$: MOV (PC)+,(R0)+ BIC R0,R0 MOV (PC)+,(R0)+ .ASTX ADD #SYSCOM-4,R0 MOV #SYSCOM,R1 MOV #<-SYSCOM>/2,R2 2$: MOV (R1)+,(R0)+ SOB R2,2$ CALL P1SD 3$: RTS PC .ENDC .SBTTL ENQ / DEQ ON USR ENQUSR::CMPB JOBNUM,USROWN BEQ 1$ ENSYS ENQUSR CMPB USROWN,#377 BNE 2$ MOVB JOBNUM,USROWN 1$: RTS PC 2$: JMP DLYUSR RIDUSR::BIC #,@CNTXT CLRB USRLVL TST USRSWP BEQ DEQUSR CLR BLKEY MOV SWIPTR,R5 MOV SWOIOB,@R5 BEQ 1$ JSR PC,$SYSSW BCS SWPLNK CLR SWOIOB 1$: CLR USRLOC CLR KMLOC .BR DEQUSR .SBTTL DEQUSR - RELEASE OWNERSHIP OF THE USR DEQUSR::CMPB JOBNUM,USROWN BNE 2$ ENSYS 3$ MOVB #377,USROWN MOV IMPLOC,R4 1$: MOV -(R4),R5 BEQ 1$ CMP #-1,R5 BEQ 3$ BIT #USRWT$,I.BLOK(R5) BEQ 1$ BIT #KSPND$,I.BLOK(R5) BNE 1$ JSR R4,UNBLOK .WORD USRWT$ MOVB I.JNUM(R5),USROWN 2$: RTS PC 3$: BIT #ABPND$,@CNTXT BEQ 2$ UABT2: JMP UABORT .SBTTL RESIDENT TELETYPE HANDLER .ENABL LSB .WORD TTCMPL+2-. .WORD 0 TTLQE:: .WORD 0 TTCQE:: .WORD 0 MOV TTCQE,R3 MOV (R3)+,R4 MOV (R3)+,R1 SWAB R1 ASR R1 ASR R1 ASR R1 BIC #^C<7*2>,R1 ADD PC,R1 MOV $IMPUR-.(R1),R2 ASL Q.WCNT-Q.BUFF(R3) BEQ TTCMPL BCS 5$ TST TTEOF BNE TTCLEF .IF EQ MTT$Y .ROM MOV R2,TTHIUS .IFF MOV R2,TTHIUS .ENDC TST R4 BNE TTHIN .IF EQ MTT$Y MOVB #UPAROW,R4 JSR PC,TTOPT2 TTHIN:: MOV TTCQE,R3 .IF EQ MMG$T CMP (R3)+,(R3)+ .ENDC 1$: MOV TTHIUS,R2 TST I.TTLC(R2) BEQ 6$ JSR PC,IGET BEQ $RQABT CMPB #CTRLZ,R4 BEQ 3$ .IF EQ MMG$T MOVB R4,@(R3)+ DEC @R3 BEQ 35$ INC -(R3) BR 1$ 2$: INC -(R3) 3$: CLRB @(R3)+ DEC @R3 BNE 2$ .IFF MOVB R4,-(SP) MOV R3,R4 JSR PC,$PUTBYT DEC Q.WCNT-Q.BLKN(R4) BEQ 35$ MOVB R0,R4 BR 1$ 3$: MOV R3,R4 4$: CLR -(SP) JSR PC,$PUTBYT DEC Q.WCNT-Q.BLKN(R4) BNE 4$ .ENDC .IFF MOV I.CNSL(R2),R3 MOV T.CSR(R3),R4 ADD #I.ICTR,R2 MOVB #UPAROW,R0 JSR PC,TTOPT2 TTHIN:: MOV TTCQE,R4 1$: MOV TTHIUS,R1 ADD #I.IGET,R1 TST I.TTLC-I.IGET(R1) BNE 10$ TST -(R1) BR 6$ 10$: JSR PC,MTTGET BEQ $RQABT CMPB #CTRLZ,R0 BEQ 3$ .IF EQ MMG$T MOVB R0,@Q.BUFF-Q.BLKN(R4) DEC Q.WCNT-Q.BLKN(R4) BEQ 35$ INC Q.BUFF-Q.BLKN(R4) BR 1$ 2$: INC Q.BUFF-Q.BLKN(R4) 3$: CLRB @Q.BUFF-Q.BLKN(R4) DEC Q.WCNT-Q.BLKN(R4) BNE 2$ .IFF MOVB R0,-(SP) JSR PC,$PUTBYT DEC Q.WCNT-Q.BLKN(R4) BEQ 35$ BR 1$ 3$: CLR -(SP) JSR PC,$PUTBYT DEC Q.WCNT-Q.BLKN(R4) BNE 3$ .ENDC .ENDC .ROM MOV SP,TTEOF 35$: MOV R5,R2 JSR PC,TTCMPL MOV R2,R5 .IF EQ MTT$Y MOV R0,R4 .ENDC 6$: RTS PC TTCLEF: CLR TTEOF BIS #EOF$,@Q.CSW-Q.BUFF(R3) TTCMPL::CLR TTHIUS CLR TTHOUS ADDR TTCQE,R4 JMP COMPLT 5$: MOV (R3)+,-(SP) MOV @R3,-(R3) .IF EQ MTT$Y BIC #WRWT$,I.TERM(R2) .ENDC NEG (R3)+ MOV (SP)+,@R3 MOV R2,TTHOUS .IF NE MTT$Y MOV I.CNSL(R2),R3 BIC #WRWT$,T.STAT(R3) MOV T.CSR(R3),R4 JMP TTOENB .IFF .IF NE SYT$K JMP TTOENB .IFF BR TTOENB .ENDC .ENDC .DSABL LSB $RQABT::BIS #100000,INTACT BIS #ABPND$,@R5 RTS PC .IF EQ MTT$Y .SBTTL TERMINAL SERVICE ROUTINES IGET:: ADD #I.IGET,R2 INC @R2 CMP (R2)+,@R2 BNE 1$ SUB #TTYIN,I.IGET-I.ITOP(R2) 1$: MOVB @-(R2),R4 DEC -(R2) JSR PC,EOLTST BNE 2$ DEC I.TTLC-I.ICTR(R2) CMPB #'C-100,R4 2$: RTS PC TTRSET::MOV @#JSW,R3 BIC #^C,R3 BIT #TTSPC$,R3 BEQ 1$ ADD #I.ICTR-I.TTLC,R1 1$: SPL 7 BIC #,I.TERM(R5) BIS R3,I.TERM(R5) SPL 0 RTS PC .ENABL LSB 1$: .IF NE SYT$K TSTB XFLAG BEQ 2$ ENSYS TTOUT JMP QWAIT 2$: .ENDC JSR R4,$SYSWT .WORD TTOWT$ CMPB #TTYOUT-1,@R2 JSR PC,@(SP)+ TTOUT:: .IF NE SYT$K TSTB XFLAG BNE 3$ .ENDC MOV CNTXT,R2 .IF EQ VENU$C JSR PC,TTOPT2 .IFF JSR PC,TTOPT5 .ENDC BCC 4$ 3$: BIT @R0,@#JSW BEQ 1$ 4$: BIT (R0)+,R1 RTS R0 .DSABL LSB .ENABL LSB .IF NE SYT$K XRESET: CLRB (R3)+ CLR (R3)+ CLR (R3)+ CLR (R3)+ CLR (R3)+ RTS PC 1$: JSR R5,ECHO0C .BYTE CR,LF CLR XFLAG RTS PC .SBTTL PROCESS CTRL/C INPUT 2$: TSTB XFLAG BNE 1$ .IFF .SBTTL PROCESS CTRL/C INPUT 2$: .ENDC TST I.SCCA(R5) BEQ 3$ BIT #TTSPC$,I.TERM(R5) BNE 4$ 3$: JSR R5,ECHO0C .BYTE CR,LF 4$: CMPB R0,I.PTTI(R5) BNE TT3LNK MOV I.SCCA(R5),R4 BNE TTICCA TST I.JNUM(R5) BNE $RQABT BICB #,INDSTA BIS #IFABRT,STATWD TST EXTFLG BNE TT3LNK .IF NE BATC$H MOV $ENTRY+BA.NUM,R3 BEQ $RQABT CLR BATSW$(R3) .ENDC BR $RQABT CTRL.C::BR 2$ .DSABL LSB .SBTTL PROCESS CTRL/Q INPUT .ENABL LSB CTRL.Q::TSTB TTCNFG BPL TTIDSP CTRLQ2: CLR XEDOFF HKPC10:: .IF EQ PDT$OP BIC #TPS$MK,@TTPS .IFF CLR @TTPS NOP .ENDC .ASSUME .-HKPC10 EQ 6 BR TTOENB .IF NE SYT$K .SBTTL PROCESS CTRL/X INPUT CTRL.X::ADDR XFLAG,R3 MOVB #201,(R3)+ JSR PC,XRESET MOV TTIUSR,TTOUSR BR TTOENB .ENDC .SBTTL PROCESS CTRL/B INPUT CTRL.B:: .IF NE SYT$K CLR XFLAG .ENDC MOV BCNTXT,R0 XCOM:: MOV R0,@R4 CMP -(R4),R0 BEQ 1$ MOV R0,@R4 MOV I.TID(R0),-(R4) .BR TTOENB TTOENB:: .IF EQ PDT$OP BIS #IENABL,@TTPS .IFF MOV #IENABL,@TTPS .ENDC .ASSUME .-TTOENB EQ 6 1$: RETURN .SBTTL PROCESS CTRL/F INPUT CTRL.F:: .IF NE SYT$K CLR XFLAG .ENDC MOV FCNTXT,R0 BEQ 2$ BIT #NORUN$,I.BLOK(R0) BEQ XCOM 2$: JSR R5,ECHO .BYTE 'F,'? .BR ECHOCL ECHOCL: JSR R5,ECHO .BYTE CR,LF RTS PC TTICCA:: .IF NE MMG$T MOV @#KISAR1,-(SP) MOV I.SCC1(R5),@#KISAR1 .ENDC BIS #100000,@R4 .IF NE MMG$T MOV (SP)+,@#KISAR1 .ENDC TT3LNK: BR TTINC3 .IF EQ HSR$B .SBTTL TERMINAL INPUT INTERRUPT PROCESSOR TTIINT:: JSR R5,$INTEN .WORD ^C&PR7 MOV @TTKB,R4 JSR R3,SAVE30 TTIIN2:: .IFF .SBTTL TERMINAL INPUT CHARACTER FORK LEVEL PROCESSING TTIIN2:: TTISTF: .ENDC BIC #^C<177>,R4 BEQ 1$ ADDR LIST,R2 MOV R2,R3 MOV -(R3),R5 .IF NE SCCA$G CMPB R4,#CTRLC BNE 33$ BITB #CC$ALL,INDSTA BEQ 33$ ADDR BKGND,R1 CMP R5,R1 BEQ 1$ 33$: .ENDC MOV R5,R1 ADD #I.ICTR,R1 MOV R4,R0 MOV R3,R4 .IF NE VT11$!VS60$ JSR PC,@SCLNK2 BEQ 1$ .ENDC .IF NE SYT$K TSTB XFLAG BNE 3$ .ENDC BIT #TTLC$,I.TERM(R5) BNE 4$ 3$: CMPB R0,#'A+40 BLT 4$ CMPB R0,#'Z+40 BGT 4$ BICB #40,R0 4$: .DSABL LSB .ENABL LSB 1$: MOVB (R2)+,R3 BEQ TTINCC ASLB R3 BEQ TTIDSP CMPB (R2)+,R0 BNE 1$ ADD R3,PC TTIBAS: TTIERB: CLR @R5 BR ECHOCL .SBTTL PROCESS CTRL/S INPUT CTRL.S::MOVB TTCNFG,XEDOFF BMI SCNOP .BR TTIDSP TTIDSP:: .IF NE SYT$K TSTB XFLAG BNE XPROC .ENDC BIT #TTSPC$,I.TERM(R5) BEQ 1$ BR TTINC3 .SBTTL PROCESS ALTMODE INPUT ALT: MOV #ESCAPE,R0 .SBTTL PROCESS ORDINARY INPUT CHARACTER TTINCC::CMPB I.PTTI(R5),#RUBOUT BNE TTINC3 TST TTCNFG BMI TTINC3 JSR R5,ECHO .BYTE '\,0 .SBTTL PUT INPUT CHARACTER INTO RING AND ECHO TTINC3::CMP @R1,#TTYIN BGE 6$ MOV R0,R4 INC @R1 INC -(R1) CMP @R1,I.ITOP-I.IPUT(R1) BNE 2$ SUB #TTYIN,@R1 2$: MOVB R0,@(R1)+ JSR PC,EOLTST BNE 3$ INC I.TTLC(R5) CMP TTHIUS,R5 BNE 3$ JSR PC,TTHIN 3$: MOV R0,I.PTTI(R5) JSR R4,UNBLOK .WORD TTIWT$ BIT #TTSPC$,I.TERM(R5) BNE 4$ JSR PC,TTOPT3 4$: ADD #LF-CR,R0 CMPB #LF,R0 BEQ TTINC3 SCNOP:: RTS PC .IF NE VT11$!VS60$ SCLNK2:: .WORD SCNOP .ENDC .SBTTL PROCESS CTRL/O INPUT CTRL.O::ADD #I.OCTR-I.ICTR,R1 CLRB (R1)+ MOVB @R1,-(SP) CLRB (R1)+ MOV @R1,I.OPUT-I.OGET(R1) JSR R5,ECHO0C .BYTE CR,LF COM @SP MOVB (SP)+,-(R1) BEQ 5$ JSR R4,UNBLOK .WORD TTOWT$!TTOEM$ 5$: RTS PC 6$: MOV R0,I.PTTI(R5) DING: MOV #BELL,R4 .IF NE SYT$K JMP TTOPT4 .IFF BR TTOPT4 .ENDC .DSABL LSB .ENABL LSB .SBTTL PROCESS CTRL/U INPUT CTRL.U::JSR PC,ECHOR0 .BR RUB .SBTTL PROCESS RUBOUT INPUT RUB: ADD #I.PTTI,R5 1$: TST @R1 TIERBL: BEQ TTIERB MOVB @-(R1),R4 JSR PC,EOLTST BEQ TTIERB CMP @R1,-2(R1) BNE 2$ ADD #TTYIN,@R1 2$: DEC (R1)+ DEC @R1 3$: CMPB #CTRLU,R0 BEQ 1$ 4$: TST TTCNFG BPL 5$ JSR R5,ECHO .BYTE BS,40 MOV #BS,R4 JMP TTOPT4 5$: MOV R4,-(SP) CMPB @R5,R0 BEQ 6$ MOV R0,@R5 JSR R5,ECHO .BYTE '\,0 6$: MOV (SP)+,R0 MOV R0,R4 BR TTOPT3 .IF NE SYT$K ECHLNK: JMP ECHOCL .SBTTL XPROC - PROCESS ^X SEQUENCE CHARACTERS XPROC:: ADDR XPREV,R3 CMPB R0,#CTRLU BEQ 10$ CMPB R0,#RUBOUT BEQ 11$ CMPB @R3,#RUBOUT BNE 7$ TST TTCNFG BMI 7$ JSR R5,ECHO .BYTE '\,0 7$: MOV R0,R4 CMPB #CR,R0 BEQ 8$ JSR PC,EOLTST BEQ 8$ MOVB -(R3),R1 CMP #6,R1 BEQ DING INC R1 MOVB R1,(R3)+ MOVB R0,(R3)+ ADD R3,R1 MOVB R0,@R1 JMP TTOPT3 8$: TST (R3)+ MOV R3,R0 JSR PC,FNDJOB BEQ 9$ MOV R2,R0 BIT #NORUN$,I.BLOK(R0) BNE 9$ CLR XFLAG ADDR TTOUSR,R4 CLR (R4)+ JMP XCOM 9$: JSR R5,ECHO .BYTE '?,0 JSR PC,ECHOCL CLR XFLAG RTS PC 10$: JSR PC,ECHOR0 DEC R3 JSR PC,XRESET BR ECHLNK 11$: MOV R3,R5 MOVB -(R3),R1 BEQ TIERBL ADD R5,R1 INC R1 MOVB @R1,R4 CLRB @R1 DECB @R3 BR 4$ .ENDC .DSABL LSB .SBTTL SPECIAL INPUT CHARACTER LIST .MACRO INLST LOC,CHAR ... = /2 .IF LT ... .IIF LT ...+177, .ERROR .IFF .IIF GT ...-177, .ERROR .ENDC .BYTE ...,CHAR .ENDM INLST TTOID: .WORD 0 TTOUSR::.WORD BKGND TTIUSR::.WORD BKGND LIST:: INLST CTRL.C,'C-100 INLST CTRL.O,'O-100 INLST CTRL.S,'S-100 INLST CTRL.Q,'Q-100 LISTFB::INLST CTRL.F,'F-100 INLST CTRL.B,'B-100 .IF NE SYT$K INLST CTRL.X,'X-100 .ENDC .BYTE 200 INLST CTRL.U,'U-100 INLST RUB,RUBOUT .BYTE 0,0 .BYTE 0,0 .BYTE 0 .EVEN .SBTTL CHARACTER OUTPUT SUBROUTINES .ENABL LSB .SBTTL ECHOR0 - PRINT A CONTROL CHARACTER IN "^X" FORM ECHOR0: MOV #'^,R4 JSR PC,TTOPT3 MOV R0,R4 BIS #100,R4 .BR TTOPT3 .SBTTL TTOPT3 - PRINT A CHARACTER, CHECK FOR SPECIAL CHANGES TTOPT3::CMPB #CTRLC,R4 BEQ 5$ CMPB #ESCAPE,R4 BNE 1$ MOV #DOLLAR,R4 1$: CMPB #SPACE,R4 BLOS TTOPT4 CMPB #CR,R4 BLO ECHOR0 CMPB #TAB,R4 BHI ECHOR0 .SBTTL TTOPT4 - PRINT A CHARACTER FOR TTIUSR TTOPT4::MOV TTIUSR,R2 .BR TTOPT2 .SBTTL TTOPT2 - PRINT A CHARACTER FOR SPECIFIED USER TTOPT2::ADD #I.OCTR,R2 .IF NE SYT$K TSTB XFLAG BNE 2$ .ENDC TST @R2 BMI 5$ 2$: BICB #^C<177>,R4 CMPB #TTYOUT-1,@R2 BLO 5$ CMP I.OTOP-I.OCTR(R2),-(R2) BHI 3$ SUB #TTYOUT,@R2 3$: MOVB R4,@(R2)+ INC -(R2) INC I.OCTR-I.OPUT(R2) JMP TTOENB .SBTTL ECHO0C - PRINT CONTROL CHARACTER, THEN 1 OR 2 CONSTANT CHARACTERS ECHO0C: JSR PC,ECHOR0 .SBTTL ECHO0C - PRINT CONTROL CHARACTER, THEN 1 OR 2 CONSTANT CHARACTERS ECHO:: MOVB (R5)+,R4 JSR PC,TTOPT4 MOVB (R5)+,R4 BEQ 4$ JSR PC,TTOPT4 4$: RTS R5 .SBTTL EOLTST - TEST FOR END OF LINE EOLTST: CMPB #LF,R4 BEQ 5$ CMPB #CTRLZ,R4 BEQ 5$ CMPB #CTRLC,R4 5$: RTS PC .DSABL LSB .IF NE VENU$C .ENABL LSB TTOPT5::ADD #I.OCTR,R2 .IF NE SYT$K TSTB XFLAG BNE 2$ .ENDC TST @R2 BMI 5$ 2$: BICB #^C<177>,R4 SPL 5 CMPB #TTYOUT-1,@R2 BLO 6$ CMP I.OTOP-I.OCTR(R2),-(R2) BHI 3$ SUB #TTYOUT,@R2 3$: MOVB R4,@(R2)+ INC -(R2) INC I.OCTR-I.OPUT(R2) SPL 0 JMP TTOENB 6$: SPL 0 SEC 5$: RTS PC .DSABL LSB .ENDC .SBTTL TTY OUTPUT INTERRUPT .ENABL LSB 1$: DEC NFILLS NULHOK:: CLR @TTPB .ASSUME .-NULHOK EQ 4 RETURN TTOINT::JSR R5,$INTEN .WORD ^C&PR7 .ROM TST NFILLS BNE 1$ .ROM TSTB XEDOFF BMI 15$ 2$: ADDR FILCTR,R4 INCB @R4 BMI 14$ CLRB (R4)+ MOV TTOID,R5 BEQ 5$ 3$: MOVB (R5)+,(R4)+ BNE 4$ CLR R5 4$: MOV R5,TTOID BNE 14$ DEC R4 5$: MOV TTOUSR,R5 .IF NE SYT$K TSTB XFLAG BNE TTONXT .ENDC TSTB I.OCTR(R5) BNE 6$ JSR R4,UNBLOK .WORD TTOEM$ 6$: CMPB @R4,#LF BNE 9$ MOV IMPLOC,R4 7$: MOV -(R4),R5 BEQ 7$ CMP #-1,R5 BEQ 21$ BIT #NORUN$,I.BLOK(R5) BNE 7$ .ROM CMP TTHOUS,R5 BEQ 8$ TSTB I.OCTR(R5) BEQ 7$ 8$: ADDR OUTCHR,R4 CMP TTOUSR,R5 BEQ 9$ MOV R5,TTOUSR MOV I.TID(R5),R5 BR 3$ 9$: CMP TTHOUS,R5 BEQ TTHOUT ..TTON == .+4 TTONXT: CMPB I.OCTR(R5),#TTYOUT BNE 10$ JSR R4,UNBLOK .WORD TTOWT$ 10$: ADD #I.OTOP,R5 CMP @R5,-(R5) BNE 11$ SUB #TTYOUT,@R5 11$: TSTB -2(R5) .IF NE SYT$K BEQ 22$ .IFF BEQ 21$ .ENDC MOVB @(R5)+,@R4 TTOPUT: BICB #200,@R4 CMPB (R4)+,#SPACE BLO 16$ CMPB -1(R4),#RUBOUT BEQ 13$ INCB @R4 BIT #CRLF$,TTCNFG BEQ 13$ CMPB @R4,TTWIDTH BLOS 13$ CLRB @R4 DEC R4 MOV #177000+LF,-(R4) BR 14$ 12$: CMPB (R4)+,#CR BNE 13$ CLRB @R4 13$: INC -(R5) DEC -(R5) PC1HOK:: 14$: MOVB -(R4),@TTPB .ASSUME .-PC1HOK EQ 4 CMPB @R4,@#TTFILL BNE 15$ MOVB @#TTNFIL,NFILLS 15$: RETURN TTHOCM: JSR PC,TTCMPL BR 2$ 16$: CMPB -(R4),#TAB BEQ 17$ CMPB (R4)+,#BS BEQ 20$ CMPB -(R4),#FF BNE 12$ BIT #FORM$,TTCNFG BNE 19$ MOV #<-8.*400>+LF,-(R4) BR 19$ 17$: BIT #HWTAB$,TTCNFG BNE 18$ MOV @R4,-(R4) CLRB @R4 BIS #<-8.*400>+40,@R4 18$: ADD #8.*400,LINPOS-1 BIC #7*400,LINPOS-1 19$: INC R4 BR 13$ 20$: TST TTCNFG BPL 13$ DECB @R4 BR 13$ 21$: HKPC12:: .IF EQ PDT$OP BIC #TPS$MK,@TTPS .IFF CLR @TTPS NOP .ENDC .ASSUME .-HKPC12 EQ 6 RETURN .IF NE SYT$K 22$: TSTB XFLAG BPL 21$ ASLB XFLAG ADDR XPROMT,R5 MOV R5,TTOID JMP 3$ .ENDC .DSABL LSB .SBTTL RESIDENT TT: OUTPUT INTERRUPTS .ENABL LSB TTHOUT: TST I.OCTR(R5) BMI TTHOCM BEQ 1$ BIT #WRWT$,I.TERM(R5) BEQ TTONXT 1$: BIS #WRWT$,I.TERM(R5) MOV TTCQE,R5 ADD #Q.BUFF-Q.BLKN,R5 2$: TST (R5)+ BEQ TTHOCM .IF NE MMG$T MOV @#KISAR1,-(SP) BIT #40000,@R5 BEQ 3$ SUB #20000,@R5 ADD #200,Q.PAR-Q.WCNT(R5) 3$: MOV Q.PAR-Q.WCNT(R5),@#KISAR1 .ENDC MOVB @(R5)+,@R4 .IF NE MMG$T MOV (SP)+,@#KISAR1 TST @R4 .ENDC BNE TTOPUT INC -(R5) DEC -(R5) BR 2$ .DSABL LSB .IF NE HSR$B .SBTTL HIGH SPEED RING BUFFER FOR TERMINAL INPUT TTIINT::MOV R0,-(SP) PHSRRT == .+2 MOV #HSRB,R0 MOVB @TTKB,@(R0)+ INC -(R0) CMP (R0)+,(R0)+ BLO 1$ MOV @R0,HSRB 1$: MOV (SP)+,R0 INC HSRBCC BEQ 2$ RTI 2$: JSR R5,$INTEN .WORD ^C&PR7 JSR R5,$FORK .WORD TIFBLK-. PHSRRB == .+2 3$: MOV #HSRBGP,R5 MOVB @(R5)+,R4 INC -(R5) CMP @R5,HSRBEP BLO 4$ MOV HSRBRP,@R5 4$: JSR PC,TTISTF DEC HSRBCC BPL 3$ RTS PC HSRB:: .WORD HSRBUF HSRBEP::.WORD HSRBUE HSRBRP::.WORD HSRBUF HSRBCC::.WORD -1 HSRBGP::.WORD HSRBUF HSRBUF::.BLKB HSRBSZ HSRBUE:: TIFBLK::BSS F.BSIZ/2 .ENDC .ENDC .SBTTL .SPFUN - SPECIAL I/O FUNCTION EMT .ENABL LSB S$PFUN: MOV @R3,R2 BPL 9$ BIC #^C,R2 ADD PC,R2 BIT $STAT-.(R2),#SPFUN$ BEQ RWXT CMP (R1)+,(R1)+ TST @R1 BPL RWXTE0 MOVB #377,@R1 MOV 2(R1),R2 JSR R4,TSWSPC NOP NOP BR SPREAD .SBTTL .RCVD - RECEIVE DATA EMT R$CVD: JSR PC,MSGSET BCS 5$ .BR R$EAD .SBTTL .READ(W,C) - READ FROM DEVICE EMT R$EAD: MOV 4(R1),R2 JSR R4,TSWCNT NOP NOP SPREAD: MOV R4,@SP 1$: TST -(R1) BIT #,@R3 BNE 6$ MOV R1,R5 MOV @R3,R2 BIC #^C,R2 ADD PC,R2 MOV $ENTRY-.(R2),R2 BEQ 2$ ADD C.SBLK(R3),R0 MOV C.DEVQ(R3),R1 JSR PC,QMANGR BIT #,@R3 BNE 6$ RWXT: MOV #3,R2 JMP EMTDON 2$: MONERR NODV BR RWXT 3$: TST (SP)+ CLR @SP 4$: BIC #EOF$,@R3 RWXTE0: 5$: EMTERR+0 BR 10$ 6$: BIT #HDERR$,@R3 BEQ 4$ 7$: BIC #HDERR$,@R3 EMTERR+1 BR RWXT 8$: TST (SP)+ 9$: EMTERR+2 10$: CLR @SP BR RWXT .SBTTL .SDAT/.RCVD COMMON SET UP MSGSET: JSR PC,OTHRJB BCS 11$ MOV R5,R3 ADD #I.MSG,R3 11$: RTS PC .SBTTL .SDAT - SEND DATA EMT S$DAT: JSR PC,MSGSET BCS 5$ .BR W$RITE .SBTTL .WRIT(W,E,C) - WRITE TO I/O DEVICE EMT W$RITE: MOV 4(R1),R2 JSR R4,TSWCNT BR NFWRIT EMTERR+0 CMP R5,C.USED(R3) BLOS NFWRIT .ASSUME DWRIT$ EQ 200 TSTB @R3 BPL NFWRIT MOV R5,C.USED(R3) NFWRIT: MOV R4,@SP NEG R4 BR 1$ .SBTTL TSWCNT - READ/WRITE COMMON ROUTINE TSWCNT::MOV (R1)+,@SP MOV (R1)+,-(SP) BEQ 12$ DEC @SP ASL @SP 12$: ADD (SP)+,@SP JSR R5,CHKSP BR TSERR TSWSPC: CMP R2,#1 BLOS 13$ MOV R2,@SP JSR R5,CHKSP BR TSERR 13$: MOV -(R1),R5 MOV R5,@SP MOV @R3,R2 BPL 8$ BIC #^C,R2 ADD PC,R2 TST $STAT-.(R2) BPL TSWOUT BIC #EOF$,@R3 TST C.SBLK(R3) BEQ TSWOUT CMP (R4)+,(R4)+ MOV C.LENG(R3),R2 CMP R0,R2 BHIS 3$ ADD #377,R5 CLRB R5 SWAB R5 ADD R0,R5 SUB R5,R2 BHIS TSWOUT ADD R2,R5 MOV R5,@SP SUB R0,@SP SWAB @SP TST -(R4) TSWOUT: RTS R4 TSERR: TST (SP)+ MONERR ADDR BR RWXT .DSABL LSB .SBTTL .SAVES - SAVE STATUS OF OPEN CHANNEL EMT S$AVST: MOV @R3,R4 BPL 1$ MOVB R4,R1 BPL 1$ BIC #^C,R1 ADD PC,R1 MOV $STAT-.(R1),R1 COM R1 BIC #^C,R1 BNE E5ER1 1$: .IF NE MMG$T MOV #,R1 BIT #PMODE,@#PS BEQ 2$ CALL ACHBKM BCS ADERR .ENDC 2$: MOV R4,(R0)+ CLR (R3)+ .REPT CHNWDS-1 MOV (R3)+,(R0)+ .ENDR TST R4 BPL E5ER0 XCLOSE: CALLR EMTRTI .SBTTL .REOPEN - REOPEN CHANNEL AFTER SAVESTATUS EMT R$OPEN: TST @R3 BMI E5ER0 .IF NE MMG$T MOV #CHNBYT,R1 BIT #PMODE,@#PS BEQ 1$ JSR PC,ACHBKM BCS ADERR .ENDC 1$: .REPT CHNWDS MOV (R0)+,(R3)+ .ENDR BR XCLOSE E5ER0: EMTERR+0 BR XCLOSE ADERR:: MONERR ADDR BR XCLOSE .SBTTL .MWAIT - WAIT FOR MESSAGE TRAFFIC COMPLETE EMT M$WAIT: MOV R5,R3 ADD #I.MSG,R3 .BR W$AIT .SBTTL .WAIT - WAIT FOR I/O ON CHANNEL TO COMPLETE EMT W$AIT: TST @R3 BPL E5ER0 JSR PC,CHWAIT BIT #HDERR$,@R3 BEQ XCLOSE DEC @R3 .ASSUME HDERR$ EQ 1 E5ER1: EMTERR+1 BR XCLOSE .SBTTL .GTJB - GET JOB PARAMETERS EMT G$TJB:: NEG R4 .IF EQ SYT$K BCC 4$ BIT #^C<2>,@R1 BNE 4$ MOV @R1,R5 ADD PC,R5 MOV $IMPUR-.(R5),R5 BEQ E5ER0 .IFF MOV #J.BLGH,R4 BCC 4$ CMP @R1,#-3 BEQ 4$ ADD #4*2,R4 1$: CMP @R1,#-1 BEQ 4$ MOV R0,R3 CMP @R1,#MXJBNM BLOS 2$ MOV @R1,R0 .IF NE MMG$T JSR PC,ACHJBM .ENDC JSR PC,FNDJOB BNE 3$ BR E5ER0 2$: MOV @R1,R5 BIT #1,R5 BNE E5ER0 ADDR $IMPUR,R5,ADD 3$: MOV @R5,R5 BEQ E5ER0 MOV R3,R0 .ENDC 4$: .IF NE MMG$T .IF NE SYT$K MOV R4,R1 .IFF MOV #J.BLGH,R1 .ENDC JSR PC,ACHBKM BCS ADERR .ENDC .IF NE SYT$K ADD R0,R4 .ENDC MOV I.JNUM(R5),R1 MOV R1,(R0)+ ASL R1 ADDR $JBLIM,R1,ADD .IF NE MMG$T BIT #VRUN$,@CNTXT BEQ 40$ MOV #160000,(R0)+ TST (R1)+ BR 45$ .ENDC 40$: MOV (R1)+,(R0)+ 45$: MOV (R1)+,(R0)+ MOV I.CSW(R5),(R0)+ MOV R5,(R0)+ .IF NE MTT$Y MOV I.CLUN(R5),(R0)+ .IFF CLR (R0)+ .ENDC .IF NE MMG$T MOV I.VHI(R5),(R0)+ .IFF CLR (R0)+ .ENDC .IF NE SYT$K CMP (R0)+,(R0)+ CMP R0,R4 BHI XCLOSE ADD #I.LNAM,R5 TST I.JNUM-I.LNAM(R5) BNE 5$ TST KMONIN BEQ 5$ CLR (R0)+ CLR (R0)+ CLR (R0)+ BR 6$ 5$: MOV (R5)+,(R0)+ MOV (R5)+,(R0)+ MOV (R5)+,(R0)+ 6$: .ENDC BR XCLOSE .SBTTL .CSTAT - GET STATUS OF CHANNEL EMT .ENABL LSB C$STAT: MOV @R3,R4 BIC #^C,R4 .IF NE MMG$T MOV #6*2,R1 JSR PC,ACHBKM 1$: BCS ADERR .ENDC MOV (R3)+,(R0)+ 2$: BPL E5ER0 MOV (R3)+,(R0)+ MOV (R3)+,(R0)+ MOV (R3)+,(R0)+ MOV @R3,@R0 CLRB @R0 SWAB (R0)+ ADD PC,R4 MOV $PNAME-.(R4),(R0)+ 3$: JMP XCLOSE .IF NE SPC$PS .SBTTL .SPCPS - SAVE/SET MAIN-LINE PC/PS S$PCPS: .IF NE MMG$T MOV #3*2,R1 JSR PC,ACHBKM BCS 1$ .ENDC TST @R5 BPL 2$ TST I.SPCP(R5) BNE 4$ CMP (R0)+,(R0)+ MOV R0,I.SPCP(R5) .IF NE MMG$T MOV @#KISAR1,I.SPC1(R5) .ENDC BR 3$ 4$: EMTERR+1 BR 3$ .ENDC .DSABL LSB .SBTTL CHKSP - CHECK USER ADDRESS FOR BOUNDS AND EVENNESS .IF EQ MMG$T CHKSP:: MOV R2,-(SP) MOV 4(SP),-(SP) BEQ 2$ BIT #,@CNTXT BNE 2$ BIT #1,@SP BNE 3$ MOV JOBNUM,R2 BNE 1$ TST KMONIN BNE 2$ 1$: ASL R2 ADDR $JBLIM,R2,ADD CMP @SP,(R2)+ BHIS 3$ CMP @SP,@R2 BLO 3$ 2$: TST (R5)+ 3$: TST (SP)+ MOV (SP)+,R2 RTS R5 .IFF CHKSP:: MOV R2,-(SP) MOV R1,-(SP) MOV R0,-(SP) MOV 10(SP),R0 BEQ 3$ BIT #,@CNTXT BNE 3$ BIT #1,R0 BNE 4$ BIT #WINDW$,@CNTXT BNE 2$ JSR PC,$USRPH BCS 2$ MOV R2,R0 MOV JOBNUM,R2 BNE 1$ TST KMONIN BNE 3$ 1$: ASL R2 ADDR $JBLIM,R2,ADD CMP R0,(R2)+ BHIS 4$ CMP R0,@R2 BHIS 3$ BR 4$ 2$: MOV #2,R1 JSR PC,ACHBK BCS 4$ 3$: TST (R5)+ 4$: MOV (SP)+,R0 MOV (SP)+,R1 MOV (SP)+,R2 RTS R5 .ENDC .SBTTL OTHRJB - GET POINTER TO OTHER JOB'S IMPURE AREA .ENABL LSB OTHRJB::MOV JOBNUM,R2 .IF NE SYT$K BEQ 1$ CMP R2,#MXJBNM BNE 2$ 1$: .ENDC NEG R2 ADD PC,R2 MOV $IMPUR+MXJBNM-.(R2),R2 BEQ 2$ BIT #NORUN$,I.BLOK(R2) BEQ 3$ ERRRTN: NOP NOP 2$: CMP (PC)+,PC 3$: CLC RETURN .DSABL LSB .SBTTL SAVE REGISTERS 3-0 SAVE30::MOV R2,-(SP) MOV R1,-(SP) MOV R0,-(SP) JSR PC,@R3 MOV (SP)+,R0 MOV (SP)+,R1 MOV (SP)+,R2 MOV (SP)+,R3 RTS PC .IF NE SYT$K .SBTTL FNDJOB - CONVERT TASKNAME TO POINTER TO IMPURE POINTER .ENABL LSB FNDJOB::MOV IMPLOC,R5 MOV #<6>,R2 MOV R0,-(SP) 5$: CMPB @R0,#<'A+40> BLT 10$ CMPB @R0,#<'Z+40> BGT 10$ BICB #<40>,@R0 10$: TSTB (R0)+ DEC R2 BNE 5$ MOV (SP)+,R0 CMP #'F,@R0 BNE 15$ MOV -(R5),R2 BR 35$ 15$: MOV #I.LNAM,-(SP) 20$: CMP #-1,-(R5) BEQ 30$ MOV @R5,R2 BEQ 20$ ADD @SP,R2 CMP (R2)+,@R0 BNE 20$ CMP (R2)+,2(R0) BNE 20$ CMP (R2)+,4(R0) BNE 20$ MOV @R5,R2 TST I.JNUM(R2) BNE 25$ TST KMONIN BNE 20$ 25$: TST (SP)+ BR 35$ 30$: TST (R5)+ MOV @R5,R2 CMP #'B,@R0 BEQ 25$ CLR (SP)+ 35$: RETURN .DSABL LSB .ENDC .SBTTL MESSAGE HANDLER .ENABL LSB .WORD 0,0 MQLQE:: .WORD 0 MQCQE:: .WORD 0 TST -(R1) MOV R1,-(SP) MOV @R1,R3 MOVB Q.FUNC-Q.BLKN(R3),R4 BNE MQUSR MOVB Q.JNUM-Q.BLKN(R3),R4 ASR R4 ASR R4 ASR R4 BIC #^C,R4 MOVB R4,Q.FUNC-Q.BLKN(R3) MOV Q.CSW-Q.BLKN(R3),R1 MOVB C.UNIT(R1),R1 BIC #177400,R1 TST Q.WCNT-Q.BLKN(R3) BEQ MQFIN BPL 2$ MOV R1,R2 CMP R2,#200 BNE 1$ JMP CHANER 1$: MOV R4,R1 BIS #100000,R1 MOV R2,R4 2$: MOV R1,@R3 ADDR MSGQ+4,R4,ADD BR 4$ 3$: MOV R0,R4 4$: CMP -(R4),-(R4) MOV @R4,R0 BEQ 10$ CMPB @R3,@R0 BEQ 5$ TSTB @R0 BMI 6$ TSTB @R3 BPL 3$ 5$: TST @R0 BPL 6$ TST @R3 BPL 7$ BR 3$ 6$: TST @R3 BMI 8$ BR 3$ 7$: MOV R3,R0 MOV @R4,R3 8$: CMP (R3)+,(R3)+ CMP (R0)+,(R0)+ MOV (R3)+,R1 MOV (R0)+,R2 .IF NE MMG$T MOV #KISAR1,R5 .IF EQ MQH$P2 MOV @R5,-(SP) MOV Q.PAR-Q.WCNT(R3),@R5 MOV @#UISAR1,-(SP) MOV @#UISDR0+2,-(SP) MOV Q.PAR-Q.WCNT(R0),@#UISAR1 MOV #77406,@#UISDR0+2 .IFF MOV (R5)+,-(SP) MOV @R5,-(SP) MOV Q.PAR-Q.WCNT(R3),-2(R5) MOV Q.PAR-Q.WCNT(R0),@R5 ADD #20000,R2 .ENDC .ENDC MOV @R3,-(SP) NEG @SP MOV @R0,R0 CMP (SP)+,R0 BGE 85$ MOV @R3,R0 NEG R0 85$: .IF EQ MMG$T MOV R0,(R2)+ .IFF .IF EQ MQH$P2 PUT R0,(R2)+ .IFF MOV R0,(R2)+ .ENDC .ENDC 9$: .IF EQ MMG$T MOV (R1)+,(R2)+ .IFF .IF EQ MQH$P2 PUT (R1)+,(R2)+ .IFF MOV (R1)+,(R2)+ .ENDC .ENDC SOB R0,9$ .IF NE MMG$T .IF EQ MQH$P2 MOV (SP)+,@#UISDR0+2 MOV (SP)+,@#UISAR1 MOV (SP)+,@R5 .IFF MOV (SP)+,@R5 MOV (SP)+,-(R5) .ENDC .ENDC MOV @R4,R0 MOV Q.LINK-Q.BLKN(R0),@R4 CLR Q.LINK-Q.BLKN(R0) MOV @SP,R4 MOV @R4,R3 MOV R0,@R4 CLRB Q.FUNC-Q.BLKN(R0) JSR PC,COMPLT MOV R3,@(SP) CLRB Q.FUNC-Q.BLKN(R3) MQFIN: MOV (SP)+,R4 JMP COMPLT 10$: MOV R3,@R4 CLR -4(R3) MOV (SP)+,R0 CLR @R0 CLR -(R0) RTS PC .DSABL LSB .SBTTL MQUSR - HANDLE USR OPERATIONS FOR MESSAGE HANDLER .ENABL LSB MQUSR:: CMP R4,#3 BLT MQFIN CMP R4,#4 BGT MQFIN .IF NE SYT$K .IF NE MMG$T MOV @#KISAR1,-(SP) MOV Q.PAR-Q.BLKN(R3),@#KISAR1 .ENDC MOV Q.BUFF-Q.BLKN(R3),R0 MOV @R0,R5 BEQ 1$ JSR PC,FNDJOB BNE 2$ .IFTF MQER1: MOV #1,SPUSR .IFF BR MQFIN .IFT BR MQUNM 1$: CMP R4,#4 BEQ MQER1 RORB R5 BR 3$ 2$: BIT #NORUN$,I.BLOK(R2) BNE MQER1 MOVB I.JNUM(R2),R5 3$: MOV -(R3),R3 MOVB R5,C.UNIT(R3) MQUNM: .IF NE MMG$T MOV (SP)+,@#KISAR1 .ENDC BR MQFIN .ENDC .DSABL LSB .SBTTL MQABRT - FLUSH MESSAGE QUEUE ON ABORT .ENABL LSB MQABRT::MOV CNTXT,R0 JSR R3,1$ MSGQ:: .REPT MXJBNM/2+1 .WORD 0 .ENDR .WORD -1 3$: MOV R2,R1 5$: MOV @R2,R2 BNE 2$ 1$: MOV R3,R1 MOV (R3)+,R2 BEQ 1$ CMP R2,#-1 BEQ 4$ 2$: CMP -(R2),-(R2) CMPB Q.FUNC(R2),JOBNUM BNE 3$ MOV Q.CSW(R2),R4 DECB C.DEVQ(R4) DEC I.IOCT(R0) MOV @R2,@R1 BR 5$ 4$: MOV (SP)+,R3 RTS PC .DSABL LSB .SBTTL SYSTEM I/O HANDLER $SYSSW: MOV $SWPBL,R0 $SYS:: JSR R3,SAVE30 MOV CNTXT,R3 MOV I.SCHP(R3),R3 MOV R4,-(SP) MOV R5,-(SP) MOV SYUNIT,R1 .ROM MOV SYENTR,R2,GLOBAL=YES MOV 2(R5),R4 .IF NE MMG$T CALL KPSAVE .ENDC JSR PC,QMANGR .IF NE MMG$T CALL KPREST .ENDC MOV (SP)+,R5 MOV (SP)+,R4 .IF EQ MMG$T ROR @R3 .IFF MOV @R3,-(SP) BIC #HDERR$,@R3 ROR (SP)+ .ENDC .ASSUME HDERR$ EQ 1 RTS PC .SBTTL QUEUE MANAGER .ENABL LSB QMANGR::MOV R4,-(SP) MOV R1,-(SP) MOV CNTXT,R1 TST (R1)+ QGTELT: SPL 7 MOV @R1,R4 BEQ QFULL CMPB #255.,C.DEVQ(R3) BEQ QFULL MOV @R4,@R1 SPL 0 CLR (R4)+ MOV R3,(R4)+ INCB C.DEVQ(R3) MOV R0,(R4)+ MOV (SP)+,@R4 CLRB @R4 MOV JOBNUM,R0 SWAB R0 ASL R0 ASL R0 ASL R0 BIS R0,(R4)+ .IF EQ MMG$T MOV (R5)+,(R4)+ .IFF MOV R0,-(SP) MOV R1,-(SP) MOV R2,-(SP) MOV (R5)+,R0 BIT #PMODE,@#PS BNE 1$ JSR PC,$RELOK BR 2$ 1$: JSR PC,$RELOC 2$: MOV R2,(R4)+ MOV R1,Q.PAR-Q.WCNT(R4) MOV (SP)+,R2 MOV (SP)+,R1 MOV (SP)+,R0 .ENDC MOV (SP)+,(R4)+ TST (R5)+ MOV (R5)+,@R4 CMPB @R4,#377 BNE 3$ MOVB 1(R4),Q.FUNC-Q.COMP(R4) MOV (R5)+,@R4 3$: ADD #Q.BLKN-Q.COMP,R4 MOV R3,-(SP) ENSYS 7$ INC I.IOCT-I.QHDR(R1) .IF NE MMG$T CALL KPSAVE .ENDC REQUE: MOV R2,R1 BIS #100000,-(R1) TST (R2)+ BNE 4$ CLR (R1)+ MOV R4,(R1)+ MOV R4,(R1)+ CALL @R1 .IF EQ MMG$T RETURN .IFF BR 10$ .ENDC BR REQUE 4$: MOV @R2,R5 5$: MOV R5,R2 CMP -(R2),-(R2) MOV @R2,R5 BEQ 6$ CMP 2(R5),R0 BHIS 5$ 6$: MOV R5,Q.LINK-Q.BLKN(R4) MOV R4,@R2 ASL @R1 BPL 10$ CLR (R1)+ TST (R1)+ CALL CMPLT2 BR 10$ 7$: MOV (SP)+,R3 TST -(R5) BNE 8$ CHWAIT::MOV CNTXT,R1 MOV R3,I.CHWT(R1) JSR R4,$SYSWT .WORD CHNWT$ MOVB C.DEVQ(R3),R2 NEGB R2 JSR PC,@(SP)+ .IF EQ MMG$T 10$: .ENDC 8$: RTS PC QFULL: SPL 0 USWAPO: ENSYS QGTELT QWAIT:: MOV JOBNUM,R5 BEQ 9$ TST -(R5) 9$: JMP $RQSIG .IF NE MMG$T 10$: CALL KPREST RTS PC .ENDC .DSABL LSB .SBTTL QUEUE COMPLETION .ENABL LSB COMPLT::ASR -4(R4) BMI 8$ JSR R3,SAVE30 MOV R4,R1 CMPLT2: MOV @R1,R4 MOV -(R4),R3 TSTB Q.FUNC-Q.CSW(R4) BLE 1$ MOV Q.WCNT-Q.CSW(R4),SPSIZE 1$: MOVB Q.JNUM-Q.CSW(R4),R5 ASR R5 ASR R5 ASR R5 BIC #^C<16>,R5 ADD PC,R5 MOV $IMPUR-.(R5),R5 DECB C.DEVQ(R3) BNE 2$ CMP R3,I.CHWT(R5) BNE 2$ JSR R4,UNBLOK .WORD CHNWT$ 2$: DEC I.IOCT(R5) BNE 3$ JSR R4,UNBLOK .WORD EXIT$ 3$: MOV -(R4),(R1)+ BEQ 4$ MOV R1,-(SP) BR 5$ 4$: MOV -(R1),-(R1) 5$: CMP Q.COMP(R4),#1 BLOS AQLINK BIT #,@R5 BNE AQLINK MOV @R3,Q.BUFF(R4) SUB I.CSW(R5),R3 MOV R3,Q.WCNT(R4) TST (R5)+ MOV R5,R2 MOV I.JNUM-2(R5),R5 JSR PC,$RQTSW MOV R2,R5 BIS #CPEND$,-(R2) CQLINK::TST (R5)+ CLR @R4 GETPSW SPL 7 MOV (R5)+,R0 BNE 6$ MOV R5,R0 6$: MOV R4,@R0 7$: MOV R4,-(R5) PUTPSW 8$: RTS PC AQLINK::TST (R5)+ GETPSW SPL 7 MOV (R5)+,@R4 BR 7$ $SYNCH::TST Q.COMP(R4) BNE 9$ CMP (R5)+,(SP)+ MOV R5,Q.COMP(R4) MOV #-1,Q.WCNT(R4) MOV 2(R4),R5 BIT #^C,R5 BNE 8$ JSR PC,$RQTSW ADD PC,R5 MOV $IMPUR-.(R5),R5 BEQ 8$ BIT #,@R5 BNE 8$ BIT #NORUN$,I.BLOK(R5) BNE 8$ BIS #CPEND$,@R5 ADD #I.CMPL,R5 GETPSW SPL 7 MOV (R5)+,@R4 BNE 7$ MOV R4,-(R5) BR 7$ 9$: RTS R5 .DSABL LSB .SBTTL .GTIM - GET TIME OF DAY EMT .ENABL LSB G$TIM:: .IF NE MMG$T JSR PC,ACHBK2 BCC 1$ JMP ADERR 1$: .ENDC ENSYS EMTRTI GTIHOK:: 2$: ADDR $TIME+2,R1 MOV PSCLKH,(R0)+ MOV PSCLOK,@R0 ADD @R1,@R0 ADC -(R0) ADD -(R1),@R0 CMP (R0)+,(PC)+ GTM.HI:: .WORD TIMHI BLO 5$ BHI 3$ CMP @R0,GTM.LO BLO 5$ 3$: SUB GTM.HI,(R1)+ SUB (PC)+,@R1 GTM.LO:: .WORD TIMLO SBC -(R1) TST -(R0) .IF EQ ROL$OV ADD #40,$DATE BR 2$ .IFF ROLOVR::MOV $DATE,R1 BEQ 2$ MOV R1,-(SP) MOV R1,-(SP) ASR R1 ASR R1 SWAB R1 BIC #^C<17>,R1 ADD PC,R1 MOVB DAYTBL-.-1(R1),R1 CMPB R1,#28. BNE NOLEAP BIT #3,@SP BNE NOLEAP INCB R1 NOLEAP: ASL @SP ASL @SP ASL @SP SWAB @SP BICB #^C<37>,@SP CMPB (SP)+,R1 BHIS LSTDAY ADD #40,@SP BR 4$ LSTDAY: BIC #<31.*40>,@SP ADD #<1*40>+<1*2000>,@SP CMP @SP,#<13.*2000> BLO 4$ BIC #<31.*2000>,@SP ADD #2001,@SP 4$: MOV (SP)+,$DATE BR 2$ DAYTBL: .BYTE 31.,28.,31.,30.,31.,30. .BYTE 31.,31.,30.,31.,30.,31. .ENDC .SBTTL .CMKT - CANCEL MARK TIME EMT C$MKT: ENSYS EMTRTI MOV JOBNUM,R2 MOV @R1,R5 MOV #177377,R1 JSR PC,CMARKT BCC 5$ SYSER0: .IF EQ MMG$T MOV TASKSP,R0 INC <1+6+4>*2(R0) .IFF BIS #1,SAVEST+16(SP) .ENDC 5$: RTS PC .SBTTL CMARKT - CANCEL ONE OR ALL TIMER REQUESTS FOR A JOB CMARKT::ADDR LKQUE+2,R4 MOV R2,-(SP) 6$: MOV R4,R3 7$: MOV -(R3),R4 BEQ 12$ ADD #C.JNUM,R4 CMP @SP,@R4 BNE 6$ TST R0 BNE 8$ CMP C.SEQ-C.JNUM(R4),#177377 BLOS 9$ CMP R1,#177777 BNE 6$ CMP C.SEQ-C.JNUM(R4),#177700 BHIS 9$ 8$: CMP R0,C.SEQ-C.JNUM(R4) BNE 6$ 9$: MOV -(R4),(R3)+ MOV -(R4),R2 TST -(R4) TST R0 CMTHOK:: BEQ 10$ TST R5 BEQ 10$ SUB PSCLOK,R2 .IF EQ MMG$T MOV @R4,@R5 SBC (R5)+ MOV R2,@R5 .IFF MOV @R4,-(SP) SBC @SP PUT (SP)+,(R5)+ PUT R2,@R5 .ENDC 10$: CMP #-1,C.SYS(R4) BEQ 11$ MOV CNTXT,R5 JSR PC,AQLINK 11$: TST R0 BEQ 7$ TST (SP)+ RTS PC 12$: MOV R0,@SP NEG (SP)+ RTS PC .DSABL LSB .SBTTL .SDTTM - SET DATE AND/OR TIME S$DTTM:: .IF NE MMG$T MOV #3*2,R1 JSR PC,ACHBKM BCS SYSER0 .ENDC ENSYS EMTRTI MOV (R0)+,R1 BLE 1$ MOV R1,$DATE 1$: MOV (R0)+,R1 BMI 2$ MOV @R0,R0 SUB PSCLOK,R0 SBC R1 SUB PSCLKH,R1 MOV R0,$TIME+2 MOV R1,$TIME 2$: RTS PC .SBTTL Set file date and protection .ENABL LSB S$FDAT: ADDR FIXDAT,R5 MOV @R1,R2 BNE 1$ MOV $DATE,R2 1$: BIC #140000,R2 BR 2$ F$PROT: ADDR FIXPRO,R5 MOV @R1,R2 BITB #^C<1>,R2 BNE 3$ BIC #^C<1>,R2 2$: ADDR INTBLK,R1 MOV R2,@R1 ROR R0 ADC @R1 ASL R0 MOV R5,4(R1) ADDR STRNM,R5 MOV R5,@SP CALL MVFNM INC @SP CLR R2 .IF NE MMG$T BIC #PMODE,@#PS .ENDC JMP R$NAME 3$: EMTERR+3 JMP EMTRTI MVFNM: CALL 4$ 4$: MOV R0,R2 .REPT 4 GET (R2)+,(R5)+ .ENDR RETURN FIXDAT: MOV INTBLK,@R1 RETURN FIXPRO: BIC #PROT,E.STAT-E.DATE(R1) TST INTBLK BEQ 5$ BIS #PROT,E.STAT-E.DATE(R1) 5$: RETURN INTBLK: .WORD 0 .WORD 0 RT$RTN: .WORD 0 STRNM: BSS 10 .DSABL LSB .SBTTL .PROTE - PROTECT OR UNPROTECT VECTOR EMT .ENABL LSB P$ROTE: CMP #V.MAX,R0 BLOS 6$ ASR R0 BCS 6$ ASR R0 BCS 6$ MOV R0,R1 BIC #^C<3>,R1 ADD PC,R1 MOVB 8$-.(R1),R2 ASR R0 ASR R0 ADD R0,R5 MOV R5,R3 ADD #I.BITM,R3 ADDR LOWMAP,R0,ADD ENSYS EMTRTI TST R4 BEQ 3$ TST JOBNUM BNE 1$ TST KMONIN BNE 2$ 1$: BITB R2,@R3 BEQ 5$ 2$: BICB R2,@R0 BICB R2,@R3 BR 5$ 3$: BITB R2,@R0 BNE 13$ BISB R2,@R0 TST JOBNUM BNE 4$ TST KMONIN BNE 5$ 4$: BISB R2,@R3 5$: RTS PC 6$: EMTERR+1 7$: JMP EMTRTI 8$: .BYTE ^B11000000,^B00110000,^B00001100,^B00000011 .SBTTL .CHCOP - COPY OTHER JOB'S CHANNEL EMT C$PYCH::TST @R3 BMI 6$ MOV R0,R4 .IF NE SYT$K MOV @R1,R0 BEQ 9$ .IF NE MMG$T JSR PC,ACHJBM .ENDC JSR PC,FNDJOB BEQ 10$ BR 11$ .ENDC 9$: JSR PC,OTHRJB BCC 11$ 10$: JMP EMTER0 11$: ENSYS EMTRTI BIC #^C<377>,R4 CMPB I.CNUM(R2),R4 BLOS 13$ MOV R4,R1 ASL R4 ASL R4 ADD R1,R4 ASL R4 ADD I.CSW(R2),R4 MOV (R4)+,R1 BPL 13$ MOV R1,@R3 BIC #,(R3)+ MOV (R4)+,(R3)+ MOV (R4)+,(R3)+ MOV (R4)+,(R3)+ TSTB R1 BPL 12$ MOV -(R3),-(R3) BIC (R3)+,(R3)+ 12$: MOV (R4)+,@R3 CLRB @R3 RTS PC 13$: JMP SYSER0 .DSABL LSB .IF NE FPU$11 .SBTTL FLOATING POINT INTERRUPT FPPINT:: .ROM MOV #100000,FPPFLG,GLOBAL=YES CMPB 2(SP),#PR7 BLO 1$ RTI 1$: MOVB 2(SP),2$ COMB 2$ JSR R5,$INTEN 2$: .WORD 0 RTS PC .ENDC .SBTTL CLOCK INTERRUPT HANDLER .ENABL LSB EXINT: RTI LKINT:: .ROM INC TIKCTR,GLOBAL=YES TST INTLVL BPL EXINT JSR R5,$INTEN .WORD ^C& RTS PC TIMER:: CLR TIKCTR SPL 0 .ROM ADD R5,PSCLOK,GLOBAL=YES 1$: .ROM MOV LKQUE,R4,GLOBAL=YES BCS 4$ BEQ EXUSER TST (R4)+ BNE EXUSER CMP PSCLOK,(R4)+ BLO EXUSER 2$: ROR -(SP) MOV (R4)+,LKQUE MOV @R4,R5 JSR PC,$RQTSW ADD PC,R5 MOV $IMPUR-.(R5),R5 BIS #CPEND$,(R5)+ SUB #C.JNUM,R4 MOV R0,-(SP) JSR PC,CQLINK MOV (SP)+,R0 ROL (SP)+ BR 1$ 3$: SUB #1,(R4)+ BIT (R4)+,R0 BCS 2$ MOV @R4,R4 4$: BNE 3$ .ROM INC PSCLKH CLC BR 1$ .DSABL LSB .SBTTL COMMON INTERRUPT ENTRY AND EXIT .ENABL LSB $ENSYS::MOV R5,-(SP) ADD (R5)+,@SP ENSHOK:: MOV 2(SP),-(SP) .IF EQ MMG$T GETPSW MOV (SP)+,4(SP) .IFF MOV @#PS,4(SP) .ENDC SPL 7 $INTEN::MOV R4,-(SP) .ROM INC INTLVL,VALUE=-1,GLOBAL=YES .IF EQ MMG$T BGT 1$ .ROM MOV SP,TASKSP,GLOBAL=YES MOV (PC)+,SP RMONSP:: .WORD RMSTAK 1$: MOV R4,-(SP) .ENDC RMONPS::MOV #PS,R4 BIC (R5)+,@R4 .IF EQ MMG$T MOV (SP)+,R4 JSR PC,@R5 .IFF MOV @SP,R4 MOV R5,-(SP) MOV 4(SP),R5 JSR PC,@(SP)+ .ENDC SPL 7 TST INTLVL BEQ EXUSER DEC INTLVL BR RTICMN FRK:: SPL 0 MOV R3,-(SP) MOV R2,-(SP) MOV R1,-(SP) MOV R0,-(SP) .IF NE MMG$T CALL KPSAVE .ENDC SPL 7 MOV @R4,FRKCQE BNE 3$ CLR FRKLQE 3$: CLR (R4)+ SPL 0 TST @R4 BEQ 4$ MOV (R4)+,-(SP) MOV (R4)+,R5 MOV (R4)+,R4 JSR PC,@(SP)+ 4$: .IF NE MMG$T CALL KPREST .ENDC MOV (SP)+,R0 MOV (SP)+,R1 MOV (SP)+,R2 MOV (SP)+,R3 EXUSER:: .IF NE FPU$11 ASL FPPFLG BCS 6$ .ENDC 5$: SPL 7 MOV FRKCQE,R4 BNE FRK MOV TIKCTR,R5 BNE TIMER .ROM MOV INTACT,R4,,YES BNE EXSWAP DEC INTLVL .IF EQ MMG$T MOV TASKSP,SP .ENDC .BR RTICMN RTICMN::MOV (SP)+,R4 MOV (SP)+,R5 RTI .IF NE FPU$11 6$: .IF EQ MMG$T MOV TASKSP,R4 MOV (R4)+,-(SP) MOV (R4)+,-(SP) BIT #HWFPU$,CONFIG FPSHOK:: BEQ 7$ STST -(R4) 7$: CLR -(R4) MOV CNTXT,R5 MOV I.FPP(R5),-(R4) CMP #1,@R4 BLO 8$ ADDR FPPERR,@R4 8$: MOV #1,I.FPP(R5) MOV (SP)+,-(R4) MOV (SP)+,-(R4) MOV R4,TASKSP BR 5$ .IFF GET SP,R4 MOV CNTXT,R5 ADD #I.FPP,R5 CMP #1,@R5 BLO 9$ ADDR FPPERR,R5 MOV R5,4(SP) MOV #PMODE,6(SP) BR 10$ 9$: PUT 6(SP),-(R4) PUT 4(SP),-(R4) MOV @R5,4(SP) MOV #,6(SP) MOV #1,@R5 10$: BIT #HWFPU$,CONFIG BEQ 11$ STST -(SP) PUT 2(SP),-(R4) PUT (SP)+,-(R4) TST (SP)+ 11$: PUT R4,SP BR 5$ .ENDC .ENDC .DSABL LSB .SBTTL EXIT TO USER .ENABL LSB EXSWAP::BMI ABTENT CLR INTACT INC R4 ASLB R4 MOV R4,JOBNUM SPL 0 ADDR $IMPUR,R4,ADD SCHDLR:: 1$: SUB #2,JOBNUM BMI 3$ MOV -(R4),R5 BEQ 1$ TST I.BLOK(R5) BEQ 2$ BIT #,@R5 BLE 1$ BIT #,I.BLOK(R5) BNE 1$ 2$: JSR PC,CNTXSW EXUSLK: BR EXUSER 3$: .IF NE LIGH$T .ROM DEC LITECT,VALUE=1 BNE 8$ ADD #512.,LITECT 4$: ROL 7$ BNE 5$ COM 7$ 5$: BCC 6$ ADD #100,4$ BIC #200,4$ 6$: BIT #LIGHT$,CONFG2 BEQ 8$ MOV (PC)+,@(PC)+ 7$: .WORD 0,SR .ENDC 8$: ..NULJ:: .IF EQ RTE$M NOP .IFF; EQ RTE$M NOP .ENDC; EQ RTE$M NOP SCNALL::MOVB #MXJBNM/2+200,INTACT BR EXUSLK .DSABL LSB .SBTTL ABORT USERS UABORT::JSR R5,$ENSYS .WORD 0 .WORD PR7 BIS #ABPND$,@CNTXT .IF NE MMG$T BIS #100000,INTACT RTS PC .ENDC ABTENT::SPL 0 1$: JSR PC,SWAPME CLRB INTACT+1 MOV IMPLOC,R4 2$: MOV -(R4),R5 BEQ 2$ CMP R5,#-1 BEQ EXUSLK BIT #ABPND$,@R5 BEQ 2$ BIT #NORUN$,I.BLOK(R5) BNE 2$ TSTB DFLG BEQ 3$ CMPB USROWN,I.JNUM(R5) BEQ 2$ 3$: JSR PC,CNTXSW .IF EQ MMG$T JSR PC,IORSET MOV TASKSP,R5 .IFF CALL KPSAVE CALL IORSET CALL KPREST MOV SP,R5 .ENDC CMP (R5)+,(R5)+ MOV PC,@R5 ADD #GOEXIT-.,(R5)+ .IF NE MMG$T BIC #,@R5 .ENDC MOV CNTXT,R5 MOV #ABORT$,@R5 CLR I.BLOK(R5) CLR I.TTLC(R5) CLR I.SCTR(R5) MOV I.IPUT(R5),I.IGET(R5) CLR I.ICTR(R5) .IF EQ MMG$T BIC #,@#JSW .IFF GET @#JSW,-(SP) BIC #,@SP PUT (SP)+,@#JSW .ENDC MOV SP,R0 BR 1$ .SBTTL $FORK - FORK REQUEST PROCESSOR $FORK:: MOV R4,-(SP) MOV R5,R4 ADD (R5)+,R4 ADD #F.BSIZ,R4 MOV (SP)+,-(R4) MOV (SP)+,-(R4) MOV R5,-(R4) CLR -(R4) ADDR FRKCQE,R5 SPL 7 .IF NE MMG$T CALL KPSAVE .ENDC TST (R5)+ BNE 1$ MOV R4,@R5 BR 2$ 1$: MOV R4,@(R5)+ 2$: MOV R4,-(R5) .IF NE MMG$T CALL KPREST .ENDC RTS PC .ASSUME FRKLQE EQ FRKCQE+2 .SBTTL CHANGE CURRENT CONTEXT .ENABL LSB CNTXSW:: .IF EQ MMG$T MOV TASKSP,R4 .ENDC CMP CNTXT,R5 BNE 1$ JMP 21$ 1$: .IF NE MMG$T MOV CNTXT,R4 ADD #I.RSAV+<8.*2>,R4 .ENDC MOV R3,-(R4) MOV R2,-(R4) MOV R1,-(R4) MOV R0,-(R4) .IF EQ MMG$T MOV #34,R0 .IFF MOV (SP)+,R1 MOV (SP)+,-(R4) MOV (SP)+,-(R4) MOV (SP)+,-(R4) MOV (SP)+,-(R4) MOV @#KISAR1,-(R4) MOV @#V.MMU,-(R4) MOV @#V.MMU+2,-(R4) MOV #14,R0 MOV (R0)+,-(R4) MOV (R0)+,-(R4) MOV (R0)+,-(R4) MOV (R0)+,-(R4) ADD #10,R0 .ENDC 2$: MOV (R0)+,-(R4) CMP R0,#SYSPTR BLO 2$ .IF NE MTT$Y MOV @#TTFILL,-(R4) .ENDC MOV CNTXT,R2 .IF NE FPU$11 ADD #I.FPP,R2 TST (R2)+ BEQ 3$ BIT #HWFPU$,CONFIG BEQ 3$ .IF NE MMG$T MOV -(R4),R4 ADD #6*4+1*2,R4 .ENDC STFPS -(R4) SETD STD R0,-(R4) STD R1,-(R4) STD R2,-(R4) STD R3,-(R4) LDD R4,R0 STD R0,-(R4) LDD R5,R0 STD R0,-(R4) .IFF .IF NE MMG$T ADD #I.SPSV,R2 .IFF ADD #I.SWAP,R2 .ENDC .ENDC 3$: .IF NE MMG$T BIS #PMODE,@#PS GET SP,R4 ADDR RMSTAK,R3 MOV R4,(R2)+ 4$: CMP SP,R3 BEQ 5$ PUT (SP)+,-(R4) BR 4$ 5$: .ENDC MOV (R2)+,R3 BEQ 7$ 6$: PUT @(R3)+,-(R4) TST @R3 BNE 6$ 7$: MOV R3,(R2)+ MOV R4,(R2)+ MOV R5,CNTXT .IF NE MMG$T MOV R0,-(SP) MOV R1,-(SP) JSR PC,MAPLO TST I.JNUM(R5) BNE 8$ TST KMONIN BNE 12$ 8$: BIT #WINDW$,@R5 BEQ 10$ 9$: JSR PC,CLRPDR 10$: MOV I.WPTR(R5),R4 MOV (R4)+,R2 11$: JSR PC,MAPWN SOB R2,11$ 12$: MOV (SP)+,R1 MOV (SP)+,R0 .ENDC ADD #I.SP,R5 MOV @R5,R4 MOV -(R5),R2 TST -(R5) BEQ 14$ 13$: GET (R4)+,@-(R2) CMP @R5,R2 BNE 13$ 14$: .IF NE MMG$T MOV -(R5),R2 15$: CMP R4,R2 BEQ 16$ GET (R4)+,-(SP) BR 15$ 16$: PUT R4,SP .ENDC .IF NE FPU$11 17$: TST -(R5) BEQ 18$ BIT #HWFPU$,CONFIG BEQ 18$ .IF NE MMG$T MOV I.FPSA-I.FPP(R5),R4 .ENDC SETD LDD (R4)+,R0 STD R0,R5 LDD (R4)+,R0 STD R0,R4 LDD (R4)+,R3 LDD (R4)+,R2 LDD (R4)+,R1 LDD (R4)+,R0 LDFPS (R4)+ 18$: .ENDC .IF NE MMG$T MOV CNTXT,R4 ADD #I.SCOM,R4 .ENDC .IF NE MTT$Y MOV (R4)+,@#TTFILL .ENDC 19$: MOV (R4)+,-(R0) CMP R0,#34 BHI 19$ .IF NE MMG$T MOV #V.IOT+4,R0 MOV (R4)+,-(R0) MOV (R4)+,-(R0) MOV (R4)+,-(R0) MOV (R4)+,-(R0) MOV (R4)+,@#V.MMU+2 MOV (R4)+,@#V.MMU MOV (R4)+,@#KISAR1 MOV (R4)+,-(SP) MOV (R4)+,-(SP) MOV (R4)+,-(SP) MOV (R4)+,-(SP) MOV R1,-(SP) BIT #WINDW$,@CNTXT BEQ 20$ BIT #VLOAD$,@CNTXT BNE 20$ JSR PC,FIXTRP 20$: .ENDC MOV (R4)+,R0 MOV (R4)+,R1 MOV (R4)+,R2 MOV (R4)+,R3 .IF EQ MMG$T MOV R4,TASKSP .ENDC 21$: MOV CNTXT,R5 MOV I.JNUM(R5),JOBNUM BIT #,@R5 BLE 22$ .IF EQ MMG$T MOV (R4)+,-(SP) MOV (R4)+,-(SP) .ENDC BIC #^C,I.BLOK(R5) BIC #CPEND$,@R5 BIS #CMPLT$,@R5 ADD #I.CHWT,R5 MOV (R5)+,(R5)+ MOV @#ERRBYT,(R5)+ .IF EQ MMG$T CLR -(R4) MOV (PC)+,-(R4) .$CRTN:: .WORD $CRTNE MOV (SP)+,-(R4) MOV (SP)+,-(R4) MOV R4,TASKSP .IFF MOV (SP)+,R5 MOV 2(SP),-(SP) MOV 2(SP),-(SP) CLR 6(SP) MOV .$CRTN,4(SP) MOV R5,-(SP) .ENDC 22$: RTS PC .IF NE MMG$T .$CRTN:: .WORD $CRTNE .ENDC .DSABL LSB .SBTTL .HRESET - HARD RESET EMT .ENABL LSB H$RSET: ENSYS S$RSET IORSET::JSR R3,SAVE30 .IF NE MMG$T CALL KPSAVE .ENDC CLR -(SP) ADDR $ENTRY,R2 1$: MOV (R2)+,R3 BEQ 1$ CMP R3,#-1 BEQ 12$ MOV -(R2),R0 TST (R3)+ TST REVRT BEQ 2$ BIT #ABTIO$,<$STAT-$ENTRY>(R2) BNE 2$ TST (R2)+ BR 1$ 2$: CALL IOQABT BR 1$ 12$: JSR PC,MQABRT .IF NE MTT$Y TST REVRT BNE 13$ JSR PC,MTRSET .ENDC 13$: MOV CNTXT,R3 SUB (SP)+,I.IOCT(R3) .IF NE MMG$T CALL KPREST .ENDC TST REVRT BNE SPLIT CMKALL::MOV #177777,R1 MOV JOBNUM,R2 CLR R0 JMP CMARKT SPLIT: RTS PC .DSABL LSB .SBTTL IOQABT, ABORT HANDLER I/O QUEUE .ENABL LSB IOQABT: SEC ROR -(R0) BIT #HNDLR$,<$STAT-$ENTRY>(R2) BNE 4$ 3$: JSR R1,7$ 4$: MOV -(R0),R1 ADD R0,R1 MOV JOBNUM,R4 CLR R5 TST 2(SP) BPL 45$ MOV 4(SP),R5 45$: JSR PC,-(R1) MOV @R3,R4 BEQ 8$ CMP -(R4),-(R4) 5$: MOV R4,R3 6$: JSR R1,7$ MOV @R4,@R3 INC 2(SP) BPL 76$ MOV 10(SP),@R4 MOV R4,10(SP) TST 6(SP) BNE 76$ MOV R4,6(SP) 76$: MOV 2(R4),R1 DECB C.DEVQ(R1) BR 6$ 7$: TST (SP)+ MOV @R3,R4 BEQ 8$ CMP -(R4),-(R4) MOVB Q.JNUM(R4),-(SP) ASR @SP ASR @SP ASR @SP BIC #^C<16>,@SP CMP (SP)+,JOBNUM BNE 5$ TST 2(SP) BPL 77$ CMP Q.CSW(R4),4(SP) BNE 5$ 77$: JMP @R1 8$: MOV (R2)+,R4 ASL -(R4) BPL 100$ ADDR FRKCQE,R0 9$: MOV R0,R1 MOV @R1,R0 BEQ 11$ TST F.BADR(R0) BNE 9$ SPL 7 MOV @R0,@R1 BNE 10$ MOV R1,FRKLQE 10$: SPL 0 BR 9$ 11$: CLR (R4)+ TST (R4)+ JSR PC,COMPLT 100$: RTS PC .DSABL LSB .SBTTL REVERT TO ORIGINAL CHANNELS, QRESET & PURGE HANDLERS .ENABL LSB REVERT:: ENSYS 100$ DEC (PC)+ REVRT:: .WORD 0 JMP IORSET 100$: CLR REVRT JSR PC,QUIESCE ADDR $CSW,R1 TST JOBNUM BEQ 1$ MOV R3,R1 ADD #IMPSIZ,R1 1$: MOV #CHNUM,I.CNUM(R3) MOV R1,I.CSW(R3) CLR R5 MOV R3,-(SP) ENSYS 2$ JMP CMKALL 2$: MOV (SP)+,R3 MOV R3,R5 .DSABL LSB .ENABL LSB QRESET::CLR I.SCTR(R5) TST (R5)+ MOV R5,@R5 ADD #I.QUE-2,@R5 CLR @(R5)+ CLR (R5)+ CLR (R5)+ TST JOBNUM BNE 3$ MOV R3,-(SP) .ADDR #$ENTRY,R3 MOV #$SLOT,R0 1$: TST @R3 BEQ 2$ CMP @R3,SYSLOW BHIS 2$ MOV #10,R1 MOV R0,-(SP) CALL DRCALL MOV (SP)+,R0 .IF EQ MMG$T CLR @R3 .IFF .IF EQ XM$FET CLR @R3 .IFF MOV R3,R5 CALL INTRLS .ENDC .ENDC 2$: TST (R3)+ SOB R0,1$ MOV (SP)+,R3 3$: .IF EQ MTT$Y HKPC06:: BIS #100,@TTKS .ASSUME .-HKPC06 EQ 6 .ENDC RETURN .DSABL LSB .SBTTL DEQUEUE A COMPLETION ROUTINE; EXIT FROM COMPLETION RTN .ENABL LSB $CRTNE::MOV R1,-(SP) MOV R0,-(SP) .IF NE MMG$T BR 1$ $CRTR2::CALL @(SP)+ .IFF $CRTR2:: .ENDC 1$: MOV CNTXT,R1 ADD #I.PERR,R1 MOV @R1,@#ERRBYT MOV -(R1),-(R1) SPL 7 MOV -(R1),R0 BNE 3$ BIC #,I.STATE-I.CMPL(R1) .IF NE SPC$PS MOV I.SPCP-I.CMPL(R1),R0 BEQ 2$ CMP 4(SP),@#SYSPTR BHIS 2$ TST I.ECTR-I.CMPL(R1) BNE 2$ .IF EQ MMG$T MOV 6(SP),@R0 MOV 4(SP),-(R0) MOV -(R0),4(SP) .IFF MOV @#KISAR1,-(SP) MOV I.SPC1-I.CMPL(R1),@#KISAR1 MOV 10(SP),@R0 MOV 6(SP),-(R0) MOV -(R0),6(SP) MOV (SP)+,@#KISAR1 .ENDC CLR I.SPCP-I.CMPL(R1) 2$: .ENDC MOV (SP)+,R0 CRRHOK:: MOV (SP)+,R1 RTI 3$: .IF NE MMG$T CALL KPSAVE .ADDR #KPREST,-(SP) .ENDC MOV @R0,@R1 CMP -(R1),R0 BNE 4$ CLR @R1 4$: SPL 0 CMP #-1,Q.WCNT(R0) BEQ 45$ .IF NE MMG$T CALL @(SP)+ .ADDR #RETINS,-(SP) .ENDC SPL 7 MOV -(R1),@R0 MOV R0,@R1 SPL 0 .IF NE MMG$T BIC #PMODE,@#PS CMP #-3,Q.WCNT(R0) BEQ 45$ BIS #PMODE,@#PS GET SP,R1 SUB #2,R1 PUT R1,SP CLR -(SP) PUT (SP)+,@R1 MOV #,-(SP) BR 5$ .ENDC 45$: .IF NE MMG$T CLR -(SP) CLR -(SP) .ENDC 5$: ADD #Q.COMP,R0 MOV @R0,-(SP) CLR @R0 CLR R1 TST -(R0) BLE 7$ 6$: INC R1 SUB #CHNBYT,@R0 BGT 6$ 7$: MOV -(R0),R0 .IF EQ MMG$T JSR PC,@(SP)+ BR 1$ .IFF RTI .ENDC .DSABL LSB .SBTTL $SYSWT - BLOCK A TASK $SYSWT::JSR PC,2(R4) BCS 1$ MOV (SP)+,R4 RTS R4 1$: TST (SP)+ ENSYS $SYSWT MOV CNTXT,R5 BIS (R4)+,I.BLOK(R5) JSR PC,@R4 INC (SP)+ BCS SWAPME BIC -(R4),I.BLOK(R5) RETINS::RTS PC .SBTTL REQUEST TASK SWITCH, UNBLOCK A TASK .ENABL LSB DLYUSR::MOV CNTXT,R5 BIS #USRWT$,I.BLOK(R5) SWAPME::MOV CNTXT,R5 MOV I.JNUM(R5),R5 $RQTSW::CMP R5,JOBNUM BLO 2$ $RQSIG::SEC RORB R5 GETPSW SPL 7 CMPB R5,INTACT BLOS 1$ $RQSG1::MOVB R5,INTACT 1$: PUTPSW ASLB R5 2$: RTS PC .DSABL LSB UNBLOK::BIT (R4)+,I.BLOK(R5) BEQ 1$ BIC -2(R4),I.BLOK(R5) MOV R5,-(SP) MOV I.JNUM(R5),R5 JSR PC,$RQTSW MOV (SP)+,R5 1$: RTS R4 .SBTTL SYSTEM STACK .PSECT STACK$ .REPT 50.++ .WORD 152525 .ENDR SPTR:: .REPT STAC$K+<50.*MMG$T>+<40.*MTT$Y> .WORD 52525 .ENDR RMSTAK:: .PSECT PATCH$ .BLKW PATC$H $RMEND:: .PSECT OVLY0 $RTEND:: .END .MCALL .MODULE .MODULE RMONSJ,VERSION=33,COMMENT=,GLOBAL=.RMNSJ ; COPYRIGHT (c) 1987 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. VENU$C = 1 .IIF NDF VENU$C, VENU$C = 0 .IIF DF NLRMON, .NLIST .SBTTL ******************** .SBTTL * RMONSJ * .SBTTL ******************** .SBTTL MONITOR DATA BASE .SBTTL MACROS FOR MONITOR ONLY .MACRO SPL N .WORD PSWLST PSWLST == .-2 .IF EQ N .WORD -2 .IFF .WORD N*40,PS .ENDC .ENDM SPL .MACRO GETPSW .WORD PSWLST,-4 PSWLST == .-4 .ENDM GETPSW .MACRO PUTPSW .WORD PSWLST,-6 PSWLST == .-4 .ENDM PUTPSW PSWLST = 0 .MCALL ...CMV .PSECT RTDATA $RMON:: JMP $INTEN $CSW:: BSS 16.*5 SB17 == $CSW+<15.*5*2>+2 $SYSCH::.WORD 0 .WORD 0 .WORD 0 I.SPLS: I.SERR: .WORD 0 .WORD 0 BLKEY:: .WORD 0 CHKEY:: .WORD 0 $DATE:: .WORD 0 DFLG:: .WORD 0 $USRLC::.WORD USRBUF QCOMP:: .WORD COMPLT SPUSR: .WORD 0 SYUNIT::.WORD 0 ...CMV PART=ALL,TYPE=V SYSVER: .BYTE RT$REL SYSUPD: .BYTE RT$VER CONFIG::.WORD CLK50 SCROLL::.WORD 0 TTKS:: .WORD TKS TTKB:: .WORD TKB TTPS:: .WORD TPS TTPB:: .WORD TPB MAXBLK: .WORD -1 E16LST: .WORD LST16-$RMON $TIME:: BSS 2 SYNCH:: .WORD SINK LOWMAP:: .RADIX 2 .BYTE 11111111,00111100,00001111,11110000 .BYTE 11000011,00000000,00000000,00000000 .BYTE 00000000,00000000,00110000,00000000 .BYTE 00000000,00000000,00000000,00000000 .BYTE 00000000,00000000,00000000,00000000 .RADIX 8. USRLOC::.WORD USRBUF GTVECT::.WORD VT.VEC ERRCNT: .WORD 0 $MTPS:: BR PUTPSW $MFPS:: BR GETPSW SYINDX::.WORD 2 STATWD::.WORD 0 CONFG2::.WORD SYSGEN::.WORD SYSOP$ USRARE: .WORD USRSIZE ERRLEV::.BYTE ERROR$!FATAL$!UNCON$ IFMXNS::.BYTE MXN$ST EMTRTN: .WORD EMTDON-$RMON FORK: .WORD $FORK-$RMON PNPTR:: .WORD $PNAME-$RMON MONAME::ASCR50 NAME$1,NAME$2,NAME$3 .WORD ...V2 ASCR50 NAME$4,NAME$5,NAME$6 .WORD ...V2 HSUFFX::ASCR50 040,040,SUFX$H .WORD ...V2 SPSTAT::.WORD 0 EXTIND::.BYTE 0 INDSTA::.BYTE 0 $MEMSZ::.WORD 0 CONLOG::.WORD 0 .IF EQ MTT$Y $TCFIG::.WORD TTCNFG .IFF $TCFIG::.WORD DLTCB .ENDC $INDDV::.WORD INDDEV MEMPTR::.WORD CORPTR-$RMON P1EXT:: .WORD 0 $TRPLS::.WORD 0 GETVEC:: .WORD ERRRTN DWTYPE:: .WORD 0 TRPSET:: .WORD TRAPLC NULJOB::.WORD 0 IMPLOC::.WORD 0 KMONIN::.WORD 1 PROGDF::.BYTE 200!$$KED .BYTE 200!$$FORTRAN WILDEF::.BYTE 1 .BYTE 0 MAXOFF == . - $RMON .ENABL LSB GETPSW::MOV @#PS,-(SP) MOV 2(SP),-(SP) MOV 2(SP),4(SP) BR 1$ PUTPSW::MOVB 2(SP),@#PS 1$: MOV (SP)+,(SP) RTS PC .DSABL LSB SYSLOW::.WORD $RMON $RAMSZ:: .WORD 0 CORPTR::.WORD 0 .WORD CORPTR CCB:: BSS 10 I.CNUM: .WORD 16. I.CSW:: .WORD $CSW SPSIZE: .WORD 0 INBFPT: .WORD 0 IFSVST::.WORD 0 CURLEV::.WORD 0 .IF NE TIME$R FRKLQE: .WORD 0 FRKCQE: .WORD 0 .ENDC SYDVSZ::.WORD 0 .IF NE MTT$Y I.SCCA::.WORD 0 BKCNSL:: I.CNSL::.WORD DLTCB I.CLUN::.WORD 0 EXTFLG::.WORD 0 .ENDC .SBTTL DEVICE TABLE PSECTS .PSECT OWNER$ $OWNER:: .PSECT UNAM1$ $UNAM1:: .PSECT UNAM2$ $UNAM2:: .PSECT PNAME$ $PNAME:: .PSECT ENTRY$ $ENTRY:: .PSECT STAT$ $STAT:: .PSECT DVREC$ $DVREC:: .PSECT HSIZE$ $HSIZE:: .PSECT DVSIZ$ $DVSIZ:: .IF NE MTT$Y .PSECT MTTY$ .ENDC .PSECT RMON .IF NE MTT$Y .PSECT MTEMT$ .PSECT MTINT$ .PSECT RMON .ENDC; NE MTT$Y .SBTTL DESCRIPTION OF MONITOR DATA BASE CLIFLG::.BYTE UCLON!CCLON!DCLON CLITYP::.BYTE -1 INDDEV::.ASCII /SY0:/ .SBTTL TTY CONFIGURATION WORD VT05$ == 100000 TTCNFG::.WORD VT05$ .SBTTL EMT PROCESSOR EMTPRO::BIC #1,2(SP) JSR R1,SVREG CLR R2 MOV SAVEST+2(SP),R5 MOV -(R5),R4 CMPB R4,#374 BHIS NEWEMT MOV SP,R1 ADD #SAVEST+6,R1 MOV R4,R5 BIC #^C<17>,R4 BIC #^C<360>,R5 ASR R5 ASR R5 ASR R5 BR EMTCOM NEWEMT: BNE 1$ ADD #E375MX*400,R0 BR 3$ 1$: CMPB R4,#376 BHI EMTOUL BEQ E376 MOV R0,R1 MOV (R1)+,R0 MOV (R1)+,@SP ROR R2 3$: CLR R4 BISB R0,R4 BEQ 4$ CMPB R4,I.CNUM BHIS CHANER 4$: MOV R0,R5 CLRB R5 SWAB R5 CMPB #EMTMAX,R5 BLOS TOOBIG ASL R5 MOV @SP,R0 EMTCOM: TST (R5)+ MOV R5,-(SP) .IF EQ MTT$Y ADDR TTILCT,R5 .IFF MOV I.CNSL,R5 ADD #T.TTLC,R5 .ENDC ASL R4 MOV R4,R3 ASL R3 ASL R3 ADD R4,R3 ADD I.CSW,R3 ADD PC,@SP ADD @(SP)+,PC .SBTTL EMT DISPATCH TABLE T1: .WORD D$LETE-T1 .WORD L$OOK-T1 .WORD E$NTER-T1 .WORD T$RPST-T1 .WORD R$NAME-T1 .WORD S$AVST-T1 .WORD R$OPEN-T1 .WORD C$LOSE-T1 .WORD R$EAD-T1 .WORD W$RITE-T1 .WORD W$AIT-T1 .WORD EMTDON-T1 .WORD EMTDON-T1 .WORD C$DFN-T1 .WORD EMT16-T1 .WORD EMT17-T1 .WORD G$TJB-T1 ..GTIM == <. - T1> / 2 .WORD G$TIM-T1 ..MRKT = <. - T1> / 2 .IF EQ TIME$R .WORD EMTDON-T1 .WORD EMTDON-T1 .WORD EMTDON-T1 .IFF .WORD M$RKT-T1 .WORD C$MKT-T1 .WORD T$WAIT-T1 .ENDC .WORD EMTDON-T1 .WORD EMTDON-T1 .WORD C$STAT-T1 .WORD S$FPA -T1 .WORD EMTDON-T1 .WORD S$PFUN-T1 .WORD EMTDON-T1 .WORD G$VAL -T1 .WORD S$CCA -T1 .WORD EMTDON-T1 .IF NE MTT$Y .WORD M$TTIO-T1 .IFF .WORD EMTDON-T1 .ENDC ..SDTM == <. - T1> / 2 .WORD S$DTTM-T1 .WORD EMTDON-T1 .WORD S$FDAT-T1 .WORD F$PROT-T1 E375MX = .-T1/2 .SBTTL EMT 374 DISPATCH TABLE TSUB1: .WORD W$AIT -T1 .WORD EMTDON-T1 .WORD EMTDON-T1 .WORD P$URGE-T1 .WORD S$ERR -T1 .WORD H$ERR -T1 .WORD C$LOSE-T1 .WORD L$OCK -T1 .WORD C$HAIN-T1 .WORD EMTDON-T1 .WORD D$ATE-T1 .WORD W$AIT-T1 E374MX = .-TSUB1/2 EMTMAX = .-T1/2 .SBTTL FATAL ERROR PROCESSOR (EMT 376) .ENABL LSB TOOBIG: MONERR EMT.E,0 EMTOUL: BR EMTOUT CHANER: MONERR CHAN.E,0 BR EMTOUT E376: MOV SAVEST+2(SP),R0 .IF EQ PANI$C MOV ERRPC(SP),R3 .ENDC E376A: MOVB (R0)+,R2 MOVB (R0)+,R4 BPL 1$ COM R4 BR 2$ 1$: TST I.SERR BNE 4$ 2$: CLR @#UFLOAT .IF EQ PANI$C MOV #1000,SP .IFF MOV SP,R1 MOV (PC)+,SP PSPTR:: .WORD SPTR .ENDC CLR RECURS 3$: TST DFLG BNE 3$ JSR PC,ZAP CLR R0 .SETTOP .SRESET MOV USRLOC,R5 JMP IOFSET-L.UBUF(R5) 4$: COMB R4 MOVB R4,@#ERRBYT ADD SP,R2 BIS #1,ERRPS(R2) MOV R0,SAVEST+2(SP) CLR R2 BR EMTOUT .DSABL LSB .SBTTL HANDLE TRAPS TO 4 AND 10 .ENABL LSB T$RPST: TST R0 BNE 1$ MOV TRAPER,R0 1$: MOV R0,(PC)+ TRAPLC:: .WORD MONTRP BR EMTOUT MONTRP: JSR R1,SVREG BCS 2$ MONERR TR04.E,0,FATAL 2$: MONERR TR10.E,0,FATAL TRAP4:: TRAP10::ROL @#ERRBYT CMP #400,SP BLO 3$ .IF EQ PANI$C MOV @SP,R3 ADDR STKERR,R0 BR E376A STKERR: .BYTE 0,^C .IFF MOV PSPTR,SP JSR R1,SVREG MONERR STCK.E,0,FATAL .ENDC 3$: MOV TRAPLC,-(SP) BNE 4$ MOV TRAPER,@SP TRAPER ==.+2 4$: MOV #MONTRP,TRAPLC ASR @#ERRBYT JMP @(SP)+ .DSABL LSB .SBTTL HANDLE FLOATING POINT TRAPS .ENABL LSB S$FPA: .IF NE FPU$11 CMP #1,R0 BLO 1$ MOV FPPIGN,R0 1$: MOV R0,(PC)+ FPPADD:: .WORD MONFPP .ENDC EMTOUT: JMP EMTDON .IF NE FPU$11 FPPINT::BIT #HWFPU$,CONFIG BEQ 2$ STST -(SP) BR 3$ 2$: MOV #12.,ST.SUB 3$: MOV FPPADD,-(SP) FPPIGN == .+2 MOV #MONFPP,FPPADD JMP @(SP)+ MONFPP: .IF NE PANI$C MOV (SP)+,R0 JSR R1,SVREG .IFF SUB (PC)+,SP ST.SUB: .WORD 8. .ENDC MONERR FPP.E,0,FATAL .ENDC .IF NE MPT$Y TRAPMP::JSR R1,SVREG .IF NE ERL$G MOV #-2,R4 BIT #CACHE$,CONFG2 BEQ 4$ BIT #360,@#177744 BEQ 4$ DEC R4 4$: .IFTF JSR R5,5$ PARTBL:: BSS 16. 5$: .IFT JSR PC,$ERLOG .IFTF MOV (SP)+,R5 .ENDC MONERR MPAR.E,0,FATAL .ENDC .DSABL LSB .ENABL LSB .IF NE PWF$L 1$: MOV R0,@#V.PWFL HALT TRAPPF::JSR R0,1$ POWRUP: MOV #1000,SP JSR R0,CRASHP .ASCIZ /?MON-F-Power fail halt / .EVEN .ENDC .IF NE PWF$L!RDF$L CRASHP: TSTB @TTPS BPL CRASHP MOVB (R0)+,@TTPB BNE CRASHP 2$: HALT BR 2$ .ENDC .DSABL LSB .SBTTL EMT 16, USR CALLS EMT16: TST (R4)+ ADD PC,R4 ADD @R4,PC LST16:: .WORD T$TIN -LST16 .WORD T$TOUT-LST16 .WORD D$STAT-LST16 .WORD F$ETCH-LST16 .WORD C$SIGN-LST16 .WORD C$SISP-LST16 .WORD L$OCK -LST16 .WORD U$NLOK-LST16 .WORD E$XIT -LST16 .WORD P$RINT-LST16 .WORD S$RSET-LST16 .WORD Q$SET -LST16 .WORD S$ETOP-LST16 .WORD R$CTLO-LST16 .WORD EMTDON-LST16 .WORD H$RSET-LST16 C$SIGN: CLR R4 C$SISP: TST (R2)+ BR CCCOM H$RSET: INC R2 S$RSET: SEC CCCOM: INC R2 D$STAT: INC R2 R$NAME: INC R2 L$OOK: INC R2 E$NTER: INC R2 C$LOS2: INC R2 F$ETCH: INC R2 D$LETE: INC R2 INC R2 CQCOM: JSR PC,CALUSR JMP @USRLOC C$DFN: INC R2 Q$SET: SEC BR CQCOM .SBTTL Set file date and protection .ENABL LSB S$FDAT: ADDR FIXDAT,R5 MOV @R1,R2 BNE 1$ MOV $DATE,R2 1$: BIC #140000,R2 BR 2$ F$PROT: ADDR FIXPRO,R5 MOV @R1,R2 BITB #^C<1>,R2 BNE 3$ BIC #^C<1>,R2 2$: ADDR INTBLK,R1 MOV R2,@R1 ROR R0 ADC @R1 ASL R0 MOV R5,4(R1) ADDR STRNM,R5 MOV R5,@SP CALL MVFNM INC @SP CLR R2 BR R$NAME 3$: EMTERR+3 BR E16XTJ MVFNM: CALL 4$ 4$: MOV R0,R2 .REPT 4 MOV (R2)+,(R5)+ .ENDR RETURN FIXDAT: MOV INTBLK,@R1 RETURN FIXPRO: BIC #PROT,E.STAT-E.DATE(R1) TST INTBLK BEQ 5$ BIS #PROT,E.STAT-E.DATE(R1) 5$: RETURN INTBLK: .WORD 0 .WORD 0 RT$RTN: .WORD 0 STRNM: BSS 10 .DSABL LSB .SBTTL SET DATE AND/OR TIME S$DTTM: .IF NE TIME$R ENSYS E16XT .ENDC MOV (R0)+,R1 BLE 1$ MOV R1,$DATE 1$: MOV (R0)+,R1 BMI 2$ .IF EQ TIME$R SPL 7 MOV @R0,$TIME+2 MOV R1,$TIME SPL 0 2$: BR E16XTJ .IFF MOV @R0,R0 SUB PSCLOK,R0 SBC R1 SUB PSCLKH,R1 MOV R0,$TIME+2 MOV R1,$TIME 2$: RTS PC .ENDC .SBTTL CLOSE, HARD/SOFT ERRORS, GET TIME, GET JOB PARAMS C$LOSE: BIT #RENAM$!DWRIT$,@R3 BNE C$LOS2 P$URGE: CLR (R3)+ BR E16XTJ S$ERR: INC R2 H$ERR: MOVB R2,I.SERR BR E16XTJ .IF EQ TIME$R G$TIM: ADD #$TIME-TTILCT,R5 SPL 7 MOV (R5)+,(R0)+ MOV @R5,@R0 BR E16XTJ .ENDC G$TJB: CLR (R0)+ MOV SYSLOW,(R0)+ CLR (R0)+ MOV I.CSW,(R0)+ TST (R0)+ .IF NE MTT$Y MOV I.CLUN,(R0)+ .IFF CLR (R0)+ .ENDC CLR @R0 BR E16XTJ .SBTTL DATE, GVAL, PVAL, POKE, and PEEK EMT's .ENABL LSB D$ATE: MOV #$DATE-$RMON,R0 CLR R4 BR 2$ G$VAL: CMP #6,R4 BLO 4$ ASR R4 ASR R4 BCS 3$ CMP R0,#RMSTAK-$RMON BLO 2$ EMTERR+0 BR E16XTJ 2$: ADD @#SYSPTR,R0 3$: MOV @R0,@SP ASR R4 BCC E16XTJ MOV @R1,@R0 E16XTJ: JMP E16XT 4$: JMP TOOBIG .DSABL LSB .SBTTL SJ ERROR LOGGING .IF NE ERL$G $ERLOG::MOV (PC)+,-(SP) $ELHND:: .WORD 0 BNE 10$ TST (SP)+ 10$: RTS PC .ENDC S$CCA: MOV I.SCCA,@SP MOV R0,I.SCCA BR E16XT .SBTTL TTYIN T$TIN:: .IF EQ MTT$Y BIT #TTSPC$,@#JSW BEQ 1$ TST TTIBUF+4 BR 2$ 1$: TSTB @R5 2$: BEQ NOINPT MOV (PC)+,R1 PTIBF6:: .WORD TTIBUF+6 INC @R1 CMP @R1,2(R1) BNE 3$ SUB #TTYIN,@R1 3$: MOVB @(R1),R0 DEC -(R1) MOV R0,R4 MOV R0,@SP JSR PC,EOLTST BNE E16XT DECB @R5 CMPB R0,#CTRLC BNE E16XT TST I.SCCA BNE E16XT BIS #100000,@R5 .IFF MOV I.CNSL,R3 JSR PC,MTTIN BCS NOINPT BNE 6$ TST I.SCCA BEQ 10$ 6$: MOV R0,@SP BR E16XT 10$: .ENDC BIS #IFABRT,STATWD .IF NE TIME$R GOEXIT::MOV SP,SFTXIT TST INTLVL BPL NOINPT .ENDC .EXIT E16XT: CLR R2 EMTDON::JSR R1,POPREG RTI .SBTTL TTYOUT .ENABL LSB T$TOUT: .IF EQ MTT$Y MOV R0,R4 .IF EQ VENU$C JSR PC,OPUT .IFF JSR PC,OPUT1 .ENDC .IFF MOV I.CNSL,R3 JSR R1,MTTPUT .WORD 0 .ENDC BCC E16XT NOINPT: EMTERR+0 BR E16XT .DSABL LSB .SBTTL SET TOP, CANCEL ^O .ENABL LSB S$ETOP: BIS #USWAP$,@#JSW CMP R0,SYSLOW BLO 2$ MOV SYSLOW,R0 1$: TST -(R0) 2$: CMP R0,$KMLOC BLO 4$ CLR (PC)+ KMLOC:: .WORD KMON CMP R0,$USRLC BLO 4$ BIT #USR$,CONFIG BEQ 3$ MOV $USRLC,R0 BR 1$ 3$: CLR USRLOC BIC #USWAP$,@#JSW 4$: MOV R0,@SP MOV R0,@#USERTOP BR E16XT R$CTLO: .IF EQ MTT$Y CLRB TTOCLO .IFF MOV I.CNSL,R3 CLRB T.OCTR+1(R3) JSR PC,TTRSET .ENDC BR E16XT .DSABL LSB .SBTTL LOCK USR, INTERNAL ERROR EMT L$OCK: JSR PC,CALUSR BR E16XT .SBTTL STRING PRINT EMT .ENABL LSB .IF EQ MTT$Y 1$: JSR R0,2$ .BYTE CR,LF,200 .EVEN 2$: TST (SP)+ P$RINT: MOVB (R0)+,R4 BEQ 1$ CMPB #200,R4 BEQ E16XT 3$: .IF EQ VENU$C JSR PC,OPUT .IFF JSR PC,OPUT1 .ENDC BCS 3$ BR P$RINT .IFF P$RINT: MOV I.CNSL,R3 MOV R0,R1 4$: MOVB (R1)+,R0 BEQ 5$ CMPB #200,R0 BEQ E16XT JSR R1,MTTPUT .WORD 0 BR 4$ 5$: ADDR 6$,R1 BR 4$ 6$: .BYTE CR,LF,200 .EVEN .ENDC .DSABL LSB .SBTTL INTERNAL ERROR EMT PROCESSING (EMT 17) EMT17: ASR R4 MOVB R4,@#ERRBYT BIS #1,ERRPS(SP) E16XT1: BR E16XT .IF EQ MTT$Y .SBTTL TTY INTERRUPT (INPUT) .ENABL LSB 1$: CMPB (R2)+,#'S&77 BNE 6$ BIT #TTSPC$,@#JSW BNE TTINC3 BR 6$ .IF NE HSR$B TTISTF: MOV (PC)+,R5 PTIBF4:: .WORD TTIBUF+4 .IFF .IF EQ TIME$R TTIINT::JSR R1,SVREG MOV (PC)+,R5 PTIBF4:: .WORD TTIBUF+4 MOV @TTKB,R0 SPL 0 .IFF TTIINT::JSR R5,$INTEN .WORD ^C&PR7 MOV R3,-(SP) MOV R2,-(SP) MOV R1,-(SP) MOV R0,-(SP) MOV (PC)+,R5 PTIBF4:: .WORD TTIBUF+4 MOV @TTKB,R0 .ENDC .ENDC BIC #^C<177>,R0 .IF NE VT11$!VS60$ JSR PC,@SCLNK2 .ENDC BEQ TTIEX3 MOV (PC)+,R1 PTTPRE:: .WORD TTIPRE BIT #TTLC$,@#JSW BNE 5$ CMPB R0,#'A+40 BLO 5$ CMPB R0,#'Z+40 BHI 5$ BIC #40,R0 5$: ADDR 7$,R2 6$: CLR R3 BISB (R2)+,R3 BEQ T.SPEC CMPB @R2,R0 BNE 1$ ASL R3 ADD R3,PC LIST:: 7$: .BYTE /2,CTRLC .BYTE /2,'O&77 .BYTE /2,'Q&77 .BYTE /2,'S&77 .BYTE /2,'U&77 .BYTE /2, ESCAPE .BYTE /2,CR .BYTE /2,LF .BYTE /2,FF .BYTE /2,TAB .BYTE /2,13 .BYTE /2, RUBOUT ..BS ==. .BYTE /2,0 .WORD 0 .DSABL LSB .ENABL LSB ALT: MOV #ESCAPE,R0 BR TTINC3 T.SPEC: INC R3 CMPB R0,#40 BHIS TTINCC CLR R3 JSR PC,EKOR0 TTINCC: CMPB #RUBOUT,@R1 BNE TTINC3 SCOP$1::JSR PC,TTORUB .=.-4 BR TTINC3 .=.+2 TTINC3: MOV #BELL,R4 CMP @R5,#TTYIN-1 BGE 3$ INC @R5 INC -(R5) CMP @R5,6(R5) BNE 1$ SUB #TTYIN,@R5 1$: MOVB R0,@(R5)+ MOV R0,R4 JSR PC,EOLTST BNE 2$ INCB TTILCT 2$: TTIES1: 3$: MOVB R0,@R1 4$: BIT #TTSPC$,@#JSW BNE 5$ TTIEXZ: TST R3 BEQ 5$ JSR PC,TTOPUT 5$: MOV $ENTRY+TT.NUM,R4 BEQ 6$ JSR R4,TT$$$1(R4) .WORD TTILCT-. 6$: ADD #LF-CR,R0 CMPB R0,#LF BEQ TTINC3 TTIEX3: .IF NE HSR$B RTS PC .IFF .IF EQ TIME$R JMP E16XT .IFF MOV (SP)+,R0 MOV (SP)+,R1 MOV (SP)+,R2 MOV (SP)+,R3 RTS PC .ENDC .ENDC .IF NE VT11$!VS60$ SCLNK2:: .WORD SCNOP .ENDC TTIPRE:: .WORD 0 .DSABL LSB .SBTTL ^O, ^C^C, ^U, RUBOUT, INPUT BUFFER CTRL.O: JSR PC,TTOCLR JSR PC,EKOR0 JSR PC,TTLFCR COMB TTOCLO BR TTIEX3 CTRL.C: .IF NE AI$COD BR TTIEX3 .IFF TST I.SCCA .ENDC BEQ 1$ BIT #TTSPC$,@#JSW BNE 2$ 1$: JSR PC,EKOR0 JSR PC,TTLFCR 2$: CMPB R0,@R1 BNE TTINC3 MOV (PC)+,R3 I.SCCA:: .WORD 0 BEQ 10$ BIS #100000,@R3 BR TTINC3 10$: BICB #,INDSTA .IF NE BATC$H MOV $ENTRY+BA.NUM,R3 BEQ 20$ CLR BATSW$(R3) .ENDC 20$: BIS #IFABRT!IFCTLC,STATWD TST (PC)+ EXTFLG:: .WORD 0 BNE TTIEX3 CLR KMLOC TST DFLG BEQ CTRLC2 MOV #140000,DFLG BR TTIEX3 CTRL.U: JSR PC,EKOR0 TTICTL: JSR PC,RUBCM2 BEQ TTIBUM JSR PC,RUBCOM BR TTICTL TTIBUM: CLR @R1 TTCRLF: JSR PC,TTLFCR BR TTIEX3 CTRL.S: MOV SP,SYNC BR TTIEX3 CTRL.Q: CLR SYNC .IF EQ PDT$OP BIC #TPS$MK,@TTPS BIS #IENABL,@TTPS .IFF CLR @TTPS MOV #IENABL,@TTPS .ENDC BR TTIEX3 .ENABL LSB RUB: JSR PC,RUBCM2 BEQ TTIBUM SCOP$2::JSR R3,ECHO SCOP$3::.BYTE BS,SPACE MOV #BS,R4 NOP NOP 2$: JSR PC,RUBCOM BR TTIEXZ .DSABL LSB CTRLC2: BIS #100000,TTILCT .IF EQ TIME$R JSR PC,ZAP .EXIT .IFF MOV SP,ABFLG BR TTIEX3 .ENDC .ENDC ZAP:: JSR PC,TTOCLR 2$: INC (PC)+ .WORD 0 BNE 2$ .IF EQ PDT$OP MOV @TTPS,-(SP) BIC #TPS$MK,@SP .ENDC RESET .IF EQ PDT$OP BIS (SP)+,@TTPS .ENDC .IF EQ MTT$Y CLR SYNC .ENDC .IF NE MPT$Y MOV @#SYSPTR,R1 ADD #PARTBL-$RMON,R1 99$: TST @R1 BEQ 100$ BIS #1,@(R1)+ BR 99$ 100$: .ENDC .IF NE TIME$R JSR PC,CMKALL .ENDC MOV QSIZE,QCNT CLR @SYENTR .IF EQ MTT$Y MOV $ENTRY+TT.NUM,R5 BEQ 106$ CLR (R5)+ CLR (R5)+ .ENDC 106$: TST CONFIG BPL QRESET BIT #LKCS$,CONFIG BEQ QRESET .IF NE KW11$P MOV #1,@#LKPB .ENDC MOV #LKSTAT,@#LKCS QRESET: MOV (PC)+,R5 PAVAIL:: .WORD AVAIL CMP -(R5),-(R5) BLT QRESET CMP (R5)+,(R5)+ MOV R5,@R5 ADD #2,@R5 RTS PC .IF EQ MTT$Y TTLFCR: JSR R3,ECHO .BYTE CR,LF SCNOP:: TTIRTS: RTS PC RUBCOM: CMP @R5,-2(R5) BNE 1$ ADD #TTYIN,@R5 1$: DEC (R5)+ DEC @R5 RTS PC .ENDC TTOCLR: .IF EQ MTT$Y CLR TTOBUF+2 MOV TTOBUF,TTOBUF+4 .IFF MOV I.CNSL,R5 CLRB T.OCTR(R5) MOV T.OGET(R5),T.OPUT(R5) .ENDC RTS PC .IF EQ MTT$Y .SBTTL TERMINAL PROCESSING (NON-MULTI-TERMINAL) TTILCT::.BYTE 0 .BYTE 0 TTIBUF::.WORD IBUFR .WORD IBUFR .WORD 0 .WORD IBUFR .WORD IBUFR+TTYIN TTOBUF::.WORD OBUFR .WORD 0 .WORD OBUFR .WORD OBUFR+TTYOUT TTOCLO::.BYTE 0,0 IBUFR: .BLKB TTYIN OBUFR: .BLKB TTYOUT .EVEN .SBTTL RUBOUT COMMON PROCESSING .ENABL LSB RUBCM2: TST @R5 BEQ 1$ MOVB @-(R5),R4 EOLTST: CMPB R4,#LF BEQ 1$ CMPB R4,#CTRLC BEQ 1$ CMPB R4,#'Z-100 1$: RTS PC .DSABL LSB .SBTTL TTY OUTPUT ROUTINES .ENABL LSB TTORUB::MOV #'\,R4 TTOPUT: CMPB R4,#ESCAPE BNE TTOPT2 MOV #'$,R4 TTOPT2: OPUT: TSTB TTOCLO BNE 2$ CALL TTSCRL CMP #TTYOUT-1,@R2 BLO 2$ CMP 4(R2),-(R2) BHI 1$ SUB #TTYOUT,@R2 1$: MOVB R4,@(R2)+ INC -(R2) INC 2(R2) .IF EQ PDT$OP BIS #IENABL,@TTPS .IFF MOV #IENABL,@TTPS .ENDC CLC 2$: RTS PC .DSABL LSB .IF NE VENU$C .ENABL LSB OPUT1: TSTB TTOCLO BNE 2$ CALL TTSCRL SPL 5 CMP #TTYOUT-1,@R2 BLO 4$ CMP 4(R2),-(R2) BHI 1$ SUB #TTYOUT,@R2 1$: MOVB R4,@(R2)+ INC -(R2) INC 2(R2) SPL 0 .IF EQ PDT$OP BIS #IENABL,@TTPS .IFF MOV #IENABL,@TTPS .ENDC CLC 2$: RTS PC 4$: SPL 0 SEC RTS PC .DSABL LSB .ENDC TTSCRL::BIC #^C<177>,R4 MOV (PC)+,R2 PTOBF2:: .WORD TTOBUF+2 RTS PC .SBTTL TERMINAL OUTPUT INTERRUPT SERVICE .ENABL LSB .IF EQ TIME$R TTOINT::MOV R5,-(SP) MOV (PC)+,R5 PTOBF4:: .WORD TTOBUF+4 JSR R4,TTO2 .ENDC TABCNT: .WORD 0 FILLC: .WORD 0 CHCNT: .WORD 10 .IF NE TIME$R TTOINT::JSR R5,$INTEN .WORD ^C&PR7 MOV (PC)+,R5 PTOBF4:: .WORD TTOBUF+4 MOV (PC)+,R4 PTBCNT:: .WORD TABCNT .ENDC TTO2: TST (PC)+ SYNC: .WORD 0 BNE 12$ DEC (R4)+ BGT 6$ MOV R4,-(SP) CLR -(R4) MOV $ENTRY+TT.NUM,R4 BEQ 1$ JSR R4,TT$$$2(R4) .WORD TTILCT-. 1$: MOV (SP)+,R4 CMP @R5,2(R5) BNE 2$ SUB #TTYOUT,@R5 2$: DEC -(R5) CMP (R5)+,#-1 BEQ 11$ MOVB @(R5)+,@R4 3$: BIC #^C<177>,@R4 CMP (R4)+,#RUBOUT BEQ 4$ CMP -2(R4),#40 BLT 7$ DEC @R4 BNE 4$ MOV #10,@R4 4$: TST -(R4) 5$: INC -(R5) 6$: MOV @R4,@TTPB BR 12$ 7$: CMP -2(R4),#BS BNE 14$ INC @R4 BR 10$ 14$: CMP -(R4),#TAB BNE 8$ MOV #40,(R4)+ MOV @R4,-4(R4) BR 9$ 8$: CMP (R4)+,#CR BNE 10$ CLR -4(R4) 9$: MOV #10,@R4 10$: DEC R4 CMPB -(R4),@#TTFILL BNE 5$ MOV @R4,@TTPB CLR @R4 CLR -(R4) MOVB @#TTNFIL,@R4 INC -(R5) BR 12$ 11$: .IF EQ PDT$OP BIC #TPS$MK,@TTPS .IFF CLR @TTPS .ENDC CLR -(R5) 12$: .IF EQ TIME$R BR RTICMN .IFF RTS PC .ENDC .DSABL LSB .IFF .SBTTL RESIDENT TERMINAL HANDLER .ENABL LSB .WORD TTCMPL+2-. .WORD 0 TTLQE:: .WORD 0 TTCQE:: .WORD 0 MOV TTCQE,R3 MOV (R3)+,R4 MOV (R3)+,R1 MOV I.CNSL,R2 ASL Q.WCNT-Q.BUFF(R3) BEQ TTCMPL BCS 7$ TST TTEOF BNE TTCLEF MOV R2,TTHIUS TST R4 BNE TTHIN MOV R2,R3 ADD #T.ICTR,R2 MOV T.CSR(R3),R4 MOVB #UPAROW,R0 JSR PC,TTOPT2 TTHIN:: MOV TTCQE,R4 1$: MOV TTHIUS,R1 ADD #T.IGET,R1 TST T.TTLC-T.IGET(R1) BEQ 5$ JSR PC,MTTGET BEQ $RQABT CMPB #CTRLZ,R0 BEQ 3$ MOVB R0,@Q.BUFF-Q.BLKN(R4) DEC Q.WCNT-Q.BLKN(R4) BEQ 4$ INC Q.BUFF-Q.BLKN(R4) BR 1$ 2$: INC Q.BUFF-Q.BLKN(R4) 3$: CLRB @Q.BUFF-Q.BLKN(R4) DEC Q.WCNT-Q.BLKN(R4) BNE 2$ MOV SP,(PC)+ TTEOF:: .WORD 0 4$: MOV R5,R2 JSR PC,TTCMPL MOV R2,R5 BR 6$ 5$: TST -(R1) 6$: RTS PC TTCLEF::CLR TTEOF BIS #EOF$,@Q.CSW-Q.BUFF(R3) TTCMPL::CLR TTHIUS CLR TTHOUS ADDR TTCQE,R4 JMP COMPLT 7$: MOV (R3)+,-(SP) MOV @R3,-(R3) NEG (R3)+ MOV (SP)+,@R3 MOV R2,TTHOUS MOV I.CNSL,R3 BIC #WRWT$,T.STAT(R3) MOV T.CSR(R3),R4 JMP TTOENB .DSABL LSB .SBTTL $RQABT $RQABT:: CLR KMLOC MOV TTHIUS,-(SP) BIS TTHOUS,(SP)+ BEQ 1$ JSR PC,TTCMPL 1$: TST DFLG BEQ CTRLC2 MOV #140000,DFLG RTS PC CTRLC2: MOV SP,ABFLG RTS PC .SBTTL MTREST, MTRES1 .IIF NE DZ11$N, .IIF NDF DZLE$N, DZLE$N=30 .ENABL LSB MTREST::MOV I.CNSL,R1 1$: TSTB T.OCTR(R1) BNE 1$ JSR PC,ZAP MTRES1::JSR PC,@(SP)+ MTRES2: JSR R3,SAVE30 MOV (PC)+,R0 PMTCBB:: .WORD DLTCB CLR R2 2$: INC R2 CMP R2,#TCBMAX BHI 7$ TST T.CSR(R0) BEQ 6$ .IF NE DZ11$N TSTB T.PUN(R0) BNE 3$ BIT #DZ11$,T.STAT(R0) BEQ 5$ MOV T.CSR(R0),R3 MOV #DZMSE$+DZRCV$+DZTIE$,@R3 3$: MOV @R0,R1 BIC #^C,R1 CMP R1,#1000 BNE 4$ BIS #40,R1 4$: BISB T.PUN(R0),R1 BIS #DZRCO$+DZLE$N,R1 MOV T.CSR(R0),R3 MOV R1,DZ.LPR(R3) BR 6$ .ENDC 5$: BIS #IENABL,@T.CSR(R0) .IF NE DL11$M BIT #REMOT$,@R0 BEQ 6$ BIS #DL.DIE,@T.CSR(R0) .ENDC 6$: ADD #TCBSZ,R0 BR 2$ 7$: RETURN .DSABL LSB .ENDC .IF NE TIME$R .SBTTL ENSYS - ENTER SYSTEM STATE $ENSYS::MOV R5,-(SP) ADD (R5)+,@SP MOV 2(SP),-(SP) GETPSW MOV (SP)+,4(SP) SPL 7 .ENDC $INTEN::MOV R4,-(SP) .IF NE TIME$R INC (PC)+ INTLVL: .WORD -1 .ENDC MOV #PS,R4 BIC (R5)+,@R4 JSR PC,@R5 .IF NE TIME$R .ENABL LSB SPL 7 TST INTLVL BEQ EXUSER DEC INTLVL BR RTICMN FRK: SPL 0 MOV R3,-(SP) MOV R2,-(SP) MOV R1,-(SP) MOV R0,-(SP) 1$: MOV FRKCQE,R3 BEQ 3$ SPL 7 MOV @R3,FRKCQE BNE 2$ CLR FRKLQE 2$: CLR @R3 SPL 0 ADD #F.BSIZ,R3 MOV -(R3),R4 MOV -(R3),R5 JSR PC,@-(R3) BR 1$ 3$: MOV (SP)+,R0 MOV (SP)+,R1 MOV (SP)+,R2 MOV (SP)+,R3 EXUSER: SPL 7 TST FRKCQE BNE FRK TST TIKCTR BNE TIMER DEC INTLVL TST (PC)+ SFTXIT: .WORD 0 BNE 5$ TST (PC)+ ABFLG: .WORD 0 BNE 4$ .ENDC RTICMN: MOV (SP)+,R4 MOV (SP)+,R5 EXINT: RTI .IF NE TIME$R 4$: CLR ABFLG SPL 0 JSR PC,ZAP 5$: .IF NE MTT$Y JSR PC,MTRES2 .ENDC MOV SP,R0 CLR SFTXIT .EXIT .DSABL LSB .ENDC .IF NE HSR$B .SBTTL HIGH SPEED RING BUFFER FOR TERMINAL INPUT .ENABL LSB .IF EQ MTT$Y TTIINT::MOV R0,-(SP) MOV R1,-(SP) MOVB @TTKB,R1 MOV (PC)+,R0 PHSRRT:: .WORD HSRB MOVB R1,@(R0)+ INC -(R0) CMP (R0)+,(R0)+ BLO 1$ MOV @R0,-4(R0) 1$: MOV (SP)+,R1 INC 2(R0) BEQ 2$ MOV (SP)+,R0 RTI 2$: MOV (SP)+,R0 JSR R5,$INTEN .WORD ^C&PR7 JSR R5,$FORK .WORD TIFBLK-. 3$: MOV (PC)+,R5 PHSRRB:: .WORD HSRBUF MOVB @-(R5),R0 INC @R5 CMP @R5,-6(R5) BLO 4$ MOV HSRBRP-HSRBGP(R5),@R5 4$: DEC -(R5) MOV R5,-(SP) JSR PC,TTISTF TST @(SP)+ BPL 3$ RTS PC .SBTTL HIGH SPEED RING BUFFER TABLE HSRB:: .WORD HSRBUF HSRBEP::.WORD HSRBUF+HSRBSZ HSRBRP::.WORD HSRBUF HSRBCC::.WORD -1 HSRBGP::.WORD HSRBUF HSRBUF::.BLKB HSRBSZ TIFBLK::BSS F.BSIZ/2 .ENDC .DSABL LSB .ENDC .SBTTL CLOCK INTERRUPT SERVICE .ENABL LSB LKINT:: .IF EQ TIME$R ADC $TIME+2 ADC $TIME RTI .IFF INC (PC)+ TIKCTR: .WORD 0 TST INTLVL BGE EXINT JSR R5,$INTEN .WORD ^C&PR7 RTS PC TIMER: MOV R3,-(SP) 1$: MOV TIKCTR,R3 SUB R3,TIKCTR SPL 0 ADD R3,(PC)+ PSCLOK: .WORD 0 2$: MOV (PC)+,R4 LKQUE: .WORD 0 BCS 7$ BEQ 9$ TST EXTFLG BNE 9$ MOV R4,R5 TST (R4)+ BNE 9$ CMP PSCLOK,(R4)+ BLO 9$ 3$: RORB -(SP) MOV (R4),LKQUE MOV R1,-(SP) MOV R0,-(SP) MOV C.SEQ(R5),R0 CMP #-1,C.SYS(R5) BNE 4$ MOV C.COMP(R5),R5 BR 5$ 4$: GETPSW SPL 7 JSR PC,QCFREE 5$: JSR PC,COMPEX MOV (SP)+,R0 MOV (SP)+,R1 ROLB (SP)+ BR 2$ 6$: SUB #1,(R4)+ BIT (R4)+,R0 BCS 3$ MOV @R4,R4 7$: BNE 6$ INC (PC)+ PSCLKH: .WORD 0 CLC BR 2$ 9$: MOV (SP)+,R3 JMP EXUSER CLKBLK: BSS F.BSIZ/2 .ENDC .DSABL LSB .SBTTL READ/WRITE EMT HANDLERS, MT/CT FUNCS. .ENABL LSB S$PFUN: MOV @R3,R2 BIC #^C<76>,R2 ADD PC,R2 BIT #SPFUN$,$STAT-.(R2) BEQ RWXT BIS #377,4(R1) BPL 5$ R$EAD: JSR R4,TSWCNT NOP NOP NFREAD: MOV R4,@SP 1$: BIT #,@R3 BNE 6$ MOV R1,R5 TST -(R5) MOV @R3,R2 BIC #^C<76>,R2 ADDR $ENTRY,R2,ADD MOV @R2,R2 BEQ 2$ ADD C.SBLK(R3),R0 MOV C.DEVQ(R3),R1 JSR PC,QMANGR BIT #,@R3 BNE 6$ RWXT: MOV #3,R2 BR E16.7A 2$: MONERR NODV.E,0 BR RWXT 3$: TST (SP)+ 4$: BIC #EOF$,@R3 5$: EMTERR+0 BR 9$ 6$: BIT #HDERR$,@R3 BEQ 4$ 7$: BIC #HDERR$,@R3 EMTERR+1 BR RWXT 8$: TST (SP)+ EMTERR+2 9$: CLR @SP BR RWXT W$RITE: JSR R4,TSWCNT BR NFWRIT EMTERR+0 CMP R5,C.USED(R3) BLOS NFWRIT .ASSUME DWRIT$ EQ 200 TSTB @R3 BPL NFWRIT MOV R5,C.USED(R3) NFWRIT: MOV R4,@SP NEG R4 BR 1$ .SBTTL READ/WRITE ROUTINE TSWCNT: TST (R1)+ MOV @R1,R5 MOV R5,@SP MOV @R3,R2 BPL 8$ BIC #^C<76>,R2 ADDR $STAT,R2,ADD TST @R2 BPL TSWOUT BIC #EOF$,@R3 TST C.SBLK(R3) BEQ TSWOUT CMP (R4)+,(R4)+ MOV C.LENG(R3),R2 CMP R0,R2 BHIS 3$ ADD #377,R5 CLRB R5 SWAB R5 ADD R0,R5 SUB R5,R2 BHIS TSWOUT ADD R2,R5 MOV R5,@SP SUB R0,@SP SWAB @SP TST -(R4) TSWOUT: RTS R4 .DSABL LSB .SBTTL SAVESTATUS AND REOPEN S$AVST: MOV @R3,R4 BPL 1$ MOVB R4,R1 BPL 1$ BIC #^C,R1 ADD PC,R1 MOV $STAT-.(R1),R1 COM R1 BIC #^C,R1 BNE E5ER1 1$: MOV @R3,(R0)+ CLR (R3)+ .REPT 4 MOV (R3)+,(R0)+ .ENDR TST R4 BPL E5ER0 XCLOSE: CLR R2 E16.7A: CALLR EMTDON R$OPEN: TST @R3 BMI E5ER0 .REPT 5 MOV (R0)+,(R3)+ .ENDR BR XCLOSE E5ER0: EMTERR+0 BR XCLOSE .SBTTL WAIT FOR I/O COMPLETE W$AIT: TST @R3 BPL E5ER0 WAITDV:: 1$: TSTB C.DEVQ(R3) BNE 1$ BIT #HDERR$,@R3 BEQ XCLOSE DEC @R3 .ASSUME HDERR$ EQ 1 E5ER1: EMTERR+1 BR XCLOSE .SBTTL SWAP USR ROUTINE .ENABL LSB CALUSR: INC MONCAL MOV USRLOC,R0 BEQ 1$ BCS 3$ RTS PC 1$: MOV $USRLC,MONLOC TST @#JSW BMI 3$ MOV @#UFLOAT,R0 BEQ 2$ MOV R0,MONLOC 2$: MOV $SWPBL,R0 NEG MONLOC+2 JSR PC,$WSYS 3$: MOV (PC)+,R0 $MONBL:: .WORD 0 JSR PC,$RSYS MOV @R5,USRLOC 4$: RTS PC $RSYS: MOV #USRLEN,MONLOC+2 $WSYS: MOV (PC)+,R5 PMONLC:: .WORD MONLOC IOSR: JSR PC,$SYS BCC 4$ TST 2(R5) .IF NE RDF$L BPL 5$ .IFF BPL DEAD .IFTF MONERR IOBD.E,0,FATAL .IFT 5$: JSR R0,CRASHP .ASCIZ \?MON-F-System read failure halt\ .EVEN .ENDC .DSABL LSB .SBTTL C$STAT - Get status of channel (.CSTAT) .ENABL LSB C$STAT: MOV @R3,R4 BIC #^C,R4 MOV (R3)+,(R0)+ BPL E5ER0 MOV (R3)+,(R0)+ MOV (R3)+,(R0)+ MOV (R3)+,(R0)+ MOV @R3,@R0 CLRB @R0 SWAB (R0)+ ADD PC,R4 MOV $PNAME-.(R4),(R0)+ BR XCLOSE .DSABL LSB .SBTTL UNLOCK USR U$NLOK: TST MONCAL BEQ E16.7A MONOUT: DEC (PC)+ MONCAL:: .WORD 0 BNE E16.7A KMTST: TST KMONIN BNE E16.7A TST DFLG BPL 1$ .EXIT 1$: TST @#JSW BMI E16.7A CLR USRLOC CLR BLKEY MOV $SWPBL,R0 JSR PC,$RSYS BR E16.7A SPAREA: KMBLK:: BSS 5 MONLOC::.WORD USRBUF .WORD USRLEN DEAD: .WORD 0 .IF EQ RDF$L BR DEAD .ENDC .SBTTL READ USER PROGRAM AND START IT RDOVLY::JSR PC,IOSR ENTRPG::MOV @#USERSP,SP CLR KMONIN JMP @R2 .SBTTL ECHO, SVREG, POPREG .IF EQ MTT$Y ECHO:: MOVB (R3)+,R4 JSR PC,TTOPUT MOVB (R3)+,R4 BEQ 1$ JSR PC,TTOPUT 1$: RTS R3 .ENDC SVREG: MOV R2,-(SP) MOV R3,-(SP) MOV R4,-(SP) MOV R5,-(SP) MOV R0,-(SP) JMP @R1 POPREG: MOV SAVEST+4(SP),R3 CMPB #374,-2(R3) BLOS NOPOP ASL R2 BEQ NOPOP MOV SP,R3 ADD #OLDPS+4,R3 ADD R3,R2 1$: MOV -(R3),-(R2) CMP R3,SP BHI 1$ MOV R2,SP NOPOP: TST (SP)+ MOV (SP)+,R0 MOV (SP)+,R5 MOV (SP)+,R4 MOV (SP)+,R3 MOV (SP)+,R2 RTS R1 .IF EQ MTT$Y EKOR0: MOVB R0,-(SP) ADD #100,@SP MOVB (SP)+,EBYT JSR R3,ECHO .BYTE '^ EBYT: .BYTE 0 RTS PC .ENDC .SBTTL SYSTEM I/O SUBROUTINE $SYS: JSR R1,SVREG MOV (PC)+,R3 P$SYSC:: .WORD $SYSCH CLR C.DEVQ(R3) MOV SYUNIT,R1 MOV (PC)+,R2 SYENTR:: .WORD 0 MOV 2(R5),R4 JSR PC,QMANGR 1$: JSR R1,NOPOP ROR $SYSCH RTS PC QSIZE:: .WORD 1 QCNT: .WORD 1 AVAIL:: .WORD QSTART QSTART: BSS 7 .SBTTL QUEUE MANAGER. .ENABL LSB QMANGR: MOV R4,-(SP) MOV (PC)+,R4 PQCNT:: .WORD QCNT QEWAIT:: 1$: SPL 0 SPL 7 TST @R4 BLE 1$ DEC (R4)+ 2$: MOV @R4,R4 MOV @R4,AVAIL SPL 0 CLR (R4)+ MOV R3,(R4)+ 3$: CMPB #255.,C.DEVQ(R3) BEQ 3$ INCB C.DEVQ(R3) MOV R3,-(SP) MOV R0,-(SP) MOV R4,R3 MOV (SP)+,(R4)+ CLRB R1 MOV R1,(R4)+ MOV (R5)+,(R4)+ MOV 2(SP),(R4)+ TST (R5)+ MOV (R5)+,@R4 CMPB @R4,#377 BNE 4$ SWAB @R4 MOVB @R4,Q.FUNC-Q.COMP(R4) MOV (R5)+,@R4 4$: MOV R5,-(SP) REQUE: SPL 7 TST EXTFLG BNE 5$ MOV @R2,R1 BNE 6$ 5$: MOV R3,(R2)+ SPL 0 MOV R3,(R2)+ JSR PC,@R2 BR 7$ BR REQUE 6$: MOV R3,Q.LINK-Q.BLKN(R1) MOV R3,@R2 SPL 0 7$: MOV (SP)+,R5 MOV (SP)+,R3 TST -(R5) BNE 9$ WAITIO:: 8$: TSTB C.DEVQ(R3) BNE 8$ 9$: MOV (SP)+,R4 RTS PC .DSABL LSB .SBTTL SYNCH CODE SINK: CMP (R5)+,(SP)+ MOV R0,-(SP) MOV R1,-(SP) SPL 0 MOV 10(R4),R0 JSR PC,@R5 MOV (SP)+,R1 MOV (SP)+,R0 RTS PC .SBTTL CHAIN, EXIT .ENABL LSB C$HAIN: BIS #CHAIN$,@#JSW MOV SP,R0 BR CHXIT E$XIT: BIC #CHAIN$,@#JSW CHXIT: MOV SP,EXTFLG .IF NE FPU$11 MOV #MONFPP,FPPADD .ENDC .IF NE TIME$R MOV R0,R4 ENSYS 1$ JMP CMKALL .ENDC 1$: JSR PC,QRESET .IF EQ MTT$Y CMP $ENTRY+TT.NUM,SYSLOW BHIS 2$ CLR $ENTRY+TT.NUM .IFF JSR PC,MTRSET .ENDC 2$: ADD #SPTR-AVAIL,R5 MOV R5,SP CLR I.SCCA CLR I.SERR CLR TRAPLC ADD #$CSW-SPTR,R5 MOV (PC)+,R2 PI.CSW:: .WORD I.CSW MOV R5,@R2 MOV #16.,-(R2) .IF EQ TIME$R MOV R0,-(SP) .IFF MOV R4,-(SP) .ENDC MOV $KMLOC,R2 TST KMLOC BNE 6$ MOV $SWPBL,R0 TST @#JSW BMI 3$ TST USRLOC BEQ 3$ JSR PC,$RSYS 3$: MOV (PC)+,R5 P$SWPB:: .WORD $SWPBL MOV (R5)+,R0 BIT #,CONFG2 BNE 4$ CMP @#USERTOP,R2 BLO 4$ MOV R2,@R5 BIC #777,@R5 MOV (R5)+,@R5 SUB @#USERTO,@R5 BHI 5$ ROR @R5 DEC @R5 TST -(R5) JSR PC,IOSR 4$: TST (R5)+ 5$: CMP (R5)+,(R5)+ MOV $MONBL,R0 SUB #KMONSZ,R0 JSR PC,IOSR CMP -(R2),-(R2) 6$: JMP MEXIT2-KMON(R2) .DSABL LSB $SWPBL::.WORD 0 EXLIST: .WORD 0 .WORD - .WORD 0 $KMLOC::.WORD KMON .WORD USRLEN+KMLEN .WORD 0 .SBTTL I/O COMPLETION .ENABL LSB COMPLT::JSR R1,SVREG MOV @R4,R5 BIT #HDERR$,@-(R5) BNE 7$ TSTB Q.FUNC-Q.CSW(R5) BLE 1$ MOV Q.WCNT-Q.CSW(R5),SPSIZE 1$: MOV @R5,R2 MOV @R2,R0 CLR R1 SUB I.CSW,R2 2$: SUB #CHSIZ,R2 BLO 3$ INC R1 BR 2$ 3$: ADD #C.DEVQ,(R5)+ DEC @-(R5) GETPSW SPL 7 MOV -(R5),@R4 BNE 4$ CLR -(R4) CLR R4 4$: .IF EQ TIME$R MOV AVAIL,@R5 MOV R5,AVAIL INC QCNT MOV Q.COMP(R5),R5 PUTPSW CMP #1,R5 BHIS 5$ INC RECURS MOV @#ERRBYT,-(SP) JSR PC,@R5 MOV (SP)+,@#ERRBYT DEC (PC)+ RECURS: .WORD 0 5$: .IFF JSR PC,QCFREE JSR PC,COMPEX .ENDC TST R4 BEQ 6$ JSR PC,2(R4) 6$: JSR R1,NOPOP RTS PC 7$: TSTB @#JSW BPL 1$ IOEHLT::HALT .IF NE TIME$R QCFREE: MOV AVAIL,@R5 MOV R5,AVAIL INC QCNT MOV Q.COMP(R5),R5 RTI COMPEX: CMP #1,R5 BHIS 8$ INC RECURS MOV @#ERRBYT,-(SP) JSR PC,@R5 MOV (SP)+,@#ERRBYT DEC (PC)+ RECURS: .WORD 0 8$: RETURN .DSABL LSB .SBTTL T$WAIT - Timed wait FUDGE2::.WORD TWAITC .WORD 177700 T$WAIT: MOV (PC)+,R1 FUDGE1::.WORD FUDGE2 MOV (PC)+,@(PC)+ BR . FUDGE3::.WORD LOPVAL CALL MARKTM LOPVAL: .WORD 0 RET16X: JMP E16XT TWAITC: MOV #240,LOPVAL RETURN .SBTTL MARK TIME ENQUEUE .ENABL LSB M$RKT: CALL MARKTM BR RET16X MARKTM: .IF EQ MTT$Y ADD #QCNT-TTILCT,R5 .IFF ADDR QCNT,R5 .ENDC SPL 7 DEC (R5)+ BMI 4$ MOV (R5),R3 MOV @R3,@R5 SPL 0 MOV (R0)+,(R3)+ MOV (R0)+,(R3)+ ADD #C.COMP-C.LINK,R3 MOV (R1)+,@R3 CLR -(R3) MOV (R1)+,-(R3) CLR -(R3) TST -(R3) ENSYS 3$ TIMIO:: ADD PSCLOK,-(R3) ADC -(R3) MOV (R3)+,R0 MOV (PC)+,R2 PLKQUE:: .WORD LKQUE 1$: MOV R2,R1 MOV @R1,R2 BEQ 2$ MOV (R2)+,R4 MOV (R2)+,R5 CMP R0,R4 BHI 1$ BLO 2$ CMP @R3,R5 BHIS 1$ 2$: TST -(R3) MOV @R1,C.LINK(R3) MOV R3,@R1 3$: RTS PC 4$: INC -(R5) SPL 0 TST (SP)+ JMP E5ER0 .DSABL LSB .IF NE TIM$IT .SBTTL $TIMIO - SCHEDULE A TIMER REQUEST .ENABL LSB $TIMIO::JSR R3,SAVE30 MOV R5,R3 ADD (R5)+,R3 MOV 12(SP),-(SP) MOV R4,-(SP) TST (R5)+ BNE $CANIO MOV (R5)+,(R3)+ MOV (R5)+,(R3)+ MOV R5,16(SP) MOV #-1,6(R3) ENSYS 1$ JMP TIMIO .SBTTL $CANIO - CANCEL A TIMER REQUEST $CANIO::MOV R5,16(SP) MOV C.SEQ(R3),R0 MOV #-1,R1 CLR R5 JSR PC,CMARKT 1$: MOV (SP)+,R4 MOV (SP)+,R5 2$: RTS PC .DSABL LSB .ENDC .SBTTL SAVE 3-0 .IF NE TIM$IT!MTT$Y SAVE30::MOV R2,-(SP) MOV R1,-(SP) MOV R0,-(SP) JSR PC,@R3 MOV (SP)+,R0 MOV (SP)+,R1 MOV (SP)+,R2 MOV (SP)+,R3 RTS PC .ENDC .SBTTL GET TIME OF DAY .ENABL LSB G$TIM: ENSYS E16XT 1$: MOV (PC)+,R1 P$TIM2:: .WORD $TIME+2 MOV PSCLKH,(R0)+ MOV PSCLOK,@R0 ADD @R1,@R0 ADC -(R0) ADD -(R1),@R0 CMP (R0)+,(PC)+ GTM.HI:: .WORD TIMHI BLO 4$ BHI 2$ CMP @R0,GTM.LO BLO 4$ 2$: SUB GTM.HI,(R1)+ SUB (PC)+,@R1 GTM.LO:: .WORD TIMLO SBC -(R1) TST -(R0) .IF EQ ROL$OV ADD #40,$DATE BR 1$ .IFF ROLOVR::MOV $DATE,R1 BEQ 1$ MOV R1,-(SP) MOV R1,-(SP) ASR R1 ASR R1 SWAB R1 BIC #^C<17>,R1 ADD PC,R1 MOVB DAYTBL-.-1(R1),R1 CMPB R1,#28. BNE NOLEAP BIT #3,@SP BNE NOLEAP INCB R1 NOLEAP: ASL @SP ASL @SP ASL @SP SWAB @SP BICB #^C<37>,@SP CMPB (SP)+,R1 BHIS LSTDAY ADD #40,@SP BR 3$ LSTDAY: BIC #<31.*40>,@SP ADD #<1*40>+<1*2000>,@SP CMP @SP,#<13.*2000> BLO 3$ BIC #<31.*2000>,@SP ADD #2001,@SP 3$: MOV (SP)+,$DATE BR 1$ DAYTBL: .BYTE 31.,28.,31.,30.,31.,30. .BYTE 31.,31.,30.,31.,30.,31. .ENDC .SBTTL CANCEL MARK TIME C$MKT: ENSYS E16XT MOV @R1,R5 MOV #177377,R1 JSR PC,CMARKT BCC 4$ INC <2+6+4>*2(SP) 4$: RTS PC .DSABL LSB .SBTTL CANCEL TIMER REQUEST .ENABL LSB CMARKT::MOV (PC)+,R4 PLKQU2:: .WORD LKQUE+2 1$: MOV R4,R3 2$: MOV -(R3),R4 BEQ 7$ ADD #C.JNUM,R4 TST R0 BNE 3$ CMP 2(R4),#177377 BLOS 4$ CMP R1,#177777 BNE 1$ CMP 2(R4),#177700 BHIS 4$ 3$: CMP R0,2(R4) BNE 1$ 4$: MOV -(R4),(R3)+ MOV -(R4),R2 TST -(R4) TST R0 BEQ 5$ TST R5 BEQ 5$ SUB PSCLOK,R2 MOV @R4,@R5 SBC (R5)+ MOV R2,@R5 5$: CMP #-1,C.SYS(R4) BEQ 6$ MOV R4,R5 GETPSW SPL 7 JSR PC,QCFREE 6$: TST R0 BEQ 2$ RTS PC 7$: TST R0 BEQ 8$ .IFTF ERRRTN: NOP NOP SEC 8$: RTS PC .IFT .DSABL LSB .SBTTL CANCEL ALL TIMER REQUESTS CMKALL: MOV R2,-(SP) MOV R3,-(SP) MOV R4,-(SP) MOV #177777,R1 CLR R0 JSR PC,CMARKT MOV (SP)+,R4 MOV (SP)+,R3 MOV (SP)+,R2 RTS PC .SBTTL FORK REQUEST PROCESSOR $FORK:: MOV R4,-(SP) MOV R5,R4 ADD (R5)+,R4 ADD #F.BSIZ,R4 MOV (SP)+,-(R4) MOV (SP)+,-(R4) MOV R5,-(R4) CLR -(R4) SPL 7 TST FRKCQE BNE 1$ MOV R4,FRKCQE BR 2$ 1$: MOV R4,@FRKLQE 2$: MOV R4,FRKLQE RTS PC .IFF $FORK:: MOV R3,-(SP) MOV R2,-(SP) MOV R1,-(SP) MOV R0,-(SP) MOV R5,R3 ADD (R5)+,R3 CLR (R3)+ MOV R5,(R3)+ MOV 10(SP),R5 JSR PC,@-(R3) MOV (SP)+,R0 MOV (SP)+,R1 MOV (SP)+,R2 MOV (SP)+,R3 MOV (SP)+,R5 RTS PC .ENDC .SBTTL STACK, CLEAN-UP STK.SZ = STAC$K .IIF NE MTT$Y, STK.SZ = STK.SZ + 70. .REPT STK.SZ .WORD 125252 .ENDR SPTR == . RMSTAK:: .PSECT PATCH$ $RMEND:: .BLKW PATC$H .CSECT OVLY0 $RTEND:: .END .MCALL .MODULE .MODULE TRMTBL,VERSION=05,COMMENT= ; COPYRIGHT (c) 1984, 1985, 1986 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. ;+ ; MULTI-TERMINAL DEFAULT DEFINITIONS ;- .IIF NDF DLMD$M, DLMD$M=0 .IIF NDF DZMD$M, DZMD$M=0 .IIF NDF DZV$11, DZV$11=0 ;JM1 .IF NE MTT$Y .SBTTL TCB DEFINITIONS ;+ ; DEFINITION OF TERMINAL CONTROL BLOCK ;- .MACRO DSECT N ..TEMP = N .ENDM DSECT .MACRO DS NAME,SIZE,UNIT .IF NB NAME .IRP X,<\..TEMP> .LIST NAME == X .NLIST .ENDR .ENDC ;NB NAME .IF B SIZE ..TEMP = ..TEMP+2 .IFF ;B SIZE .IF NB UNIT ..TEMP = ..TEMP+SIZE .IFF ;NB UNIT ..TEMP = ..TEMP+<2*> .ENDC ;NB UNIT .ENDC ;B SIZE .ENDM DS ;+ ; THE FOLLOWING MACROS DEFINE THE OFFSETS WITHIN A TERMINAL CONTROL ; BLOCK (TCB). THERE IS ONE TCB FOR EACH TERMINAL INSTALLED ; IN THE SYSTEM. ;- DSECT 0 DS T.CNFG ;1 TERMINAL CONFIGURATION WORD 1 DS T.CNF2 ;1 TERMINAL CONFIGURATION WORD 2 DS T.TFIL,1,BYTE ;1 CHARACTER REQUIRING NULL FILLERS DS T.FCNT,1,BYTE ;1 NUMBER OF FILLS REQUIRED DS T.WID ;1 CARRIAGE WIDTH DS T.OCHR,1,BYTE ;1 CURRENT CHARACTER TO PRINT DS T.LPOS,1,BYTE ;1 CURRENT CARRIAGE POSITION DS T.OWNR ;POINTER TO OWNING JOB'S IMPURE AREA DS T.STAT ;UNIT STATUS WORD DS T.CSR ;CSR OF KEYBOARD (RECEIVER) DS T.VEC ;DEVICE VECTOR DS T.PRI ;DEVICE PRIORITY DS T.JOB,1,BYTE ;JOB NUMBER OF OWNER DS T.PUN,1,BYTE ;PHYSICAL UNIT NUMBER (0 FOR DL11) DS T.NFIL,1,BYTE ;ACTIVE FILL COUNT DS T.PTTI,1,BYTE ;PREVIOUS CHARACTER DS T.TCTF,1,BYTE ;CHARACTER FOR SPECIAL FILL DS T.TNFL,1,BYTE ;NUMBER OF SPECIAL FILLERS DS T.TID,2 ;BUFFER, PAR OF PROMPT STRING DS T.TTLC ;2 LINE COUNT DS T.IRNG ;2 INPUT RING LOW LIMIT DS T.IPUT ;2 INPUT 'PUT' POINTER FOR INTERRUPTS DS T.ICTR ;2 INPUT CHARACTER COUNT DS T.IGET ;2 INPUT 'GET' POINTER FOR TTYIN DS T.ITOP ;2 INPUT RING HI LIMIT DS ,TTYIN,BYTE ;2 INPUT RING BUFFER (SAME SIZE AS CONSOLE RING) DS T.OPUT ;2 OUTPUT 'PUT' POINTER FOR .TTYOUT DS T.OCTR,1,BYTE ;2 OUTPUT CHARACTER COUNT DS ,1,BYTE ;2 CTRL/O FLAG DS T.OGET ;2 OUTPUT 'GET' POINTER FOR INTERRUPT DS T.OTOP ;2 OUTPUT RING HI LIMIT DS ,TTYOUT,BYTE ;2 OUTPUT RING BUFFER (SAME SIZE AS CONSOLE RING) .IF NE MTI$M!DL11$M DS T.RTRY ;RETRY COUNT FOR RE-TRANSMISSION OF OUTPUT CHR. ;SL12 DS T.TBLK,7 ;TIME OUT BLOCK .ENDC .IF NE MAT$S .IF EQ MMG$T DS T.AST ;TERMINAL AST FLAG WORD .IFF DS T.AST,2 ;TERMINAL AST FLAG WORD .ENDC .ENDC .IF NE SYT$K ;JH15+ DS T.XFLG,1,BYTE ;^X SEQUENCE IN PROGRESS DS T.XCNT,1,BYTE ;^X SEQ CHARACTER COUNT DS T.XPRE ;PREVIOUS CHARACTER TYPED IN ^X SEQUENCE DS T.XBUF,6,BYTE ;6 CHARACTER BUFFER DS T.CNT ;OWNER COUNT .ENDC ;NE SYT$K ;JH15- TCBSZ == ..TEMP ;SIZE OF TCB IN BYTE ; TCBBLK IS A MACRO TO DEFINE A TERMINAL CONTROL BLOCK. ; TYPE = [DL,DZ] ; LINE = [LOCAL,REMOTE] ; CSR = RECEIVER CSR ; UNIT = LINE # (0 FOR DL, 0-7 FOR DZ) ; LUN = LOGICAL UNIT NUMBER (0-N) ; VEC = RECEIVER VECTOR ; CTRL = CONTROLLER NUMBER (E.G., 0 OR 1 FOR DZ; 0,1,...,7 FOR DL) .MACRO TCBBLK TYPE,LINE,CSR,VEC,UNIT,CTRL .NLIST .NLIST CND .LIST ME .LIST LUN = LUN + 1 CTMP = 0 CTMP2 = 0 STMP = 0 .IF IDN ,
.IF EQ CTRL .IF NE BF STMP = STMP + CONSL$ + SHARE$ CTMP = CTMP + FBTTY$ .IFF STMP = STMP + CONSL$ .ENDC .ENDC X=CTRL*TCBSZ+DLTCB .ENDC .IF IDN , X=. CTMP = CTMP + DZSP$D CTMP2 = CTMP2 + /10 ;/10 STMP = STMP + DZ11$ .ENDC .IF IDN , CTMP = CTMP + REMOT$ STMP = STMP + HNGUP$ .ENDC CTMP = CTMP + CRLF$ + PAGE$ + BKSP$ ;Default to scope mode .RADIX 10. .IRP ...,<\LUN-1> .RADIX 8. TCB.'...:: .ENDR .WORD CTMP ;T.CNFG - TCB FOR TYPE CONTROLLER # CTRL PUN # UNIT (LINE) .WORD CTMP2 ;T.CNF2 .BYTE 0,0 ;T.TFIL, T.FCNT .WORD 80. ;T.WID .BYTE 0,0 ;T.OCHR, T.LPOS .IF NE BF .WORD 0 ;T.OWNR .IFF .IF EQ LUN-1 PBCTCB::.WORD DLTCB ;T.OWNR .IFF .WORD 0 ;T.OWNR .ENDC .ENDC .WORD STMP ;T.STAT .WORD CSR ;T.CSR .WORD VEC,340+'CTRL ;T.VEC, T.PRI .BYTE 0 ;T.JOB .BYTE UNIT ;T.PUN .BYTE 0,0 ;T.NFIL, T.PTTI .BYTE 0,0 ;T.TCTF, T.TNFL .WORD 0,0 ;T.TID .WORD 0 ;T.TTLC .WORD X+T.ITOP+2 ;T.IRNG *** BOOT *** .WORD X+T.ITOP+2 ;T.IPUT *** BOOT *** .WORD 0 ;T.ICTR .WORD X+T.ITOP+2 ;T.IGET *** BOOT *** .WORD X+T.ITOP+2+TTYIN ;T.ITOP *** BOOT *** .BLKB TTYIN ;INPUT RING BUFFER .WORD X+T.OTOP+2 ;T.OPUT *** BOOT *** .WORD 0 ;T.OCTR .WORD X+T.OTOP+2 ;T.OGET *** BOOT *** .WORD X+T.OTOP+2+TTYOUT ;T.OTOP *** BOOT *** .BLKB TTYOUT ;OUTPUT RING BUFFER .IF NE MTI$M!DL11$M .WORD 0 ;T.RTRY ;SL12 .WORD 0,0,0,0,177400+<*2>,-1,0 .ENDC .IF NE MAT$S .WORD 0 ;T.AST .IF NE MMG$T .WORD 0 .ENDC .ENDC .IF NE SYT$K ;JH15 .BYTE 0 ;T.XFLG ;JH15 .BYTE 0 ;T.XCNT ;JH15 .WORD 0 ;T.XPRE ;JH15 .BLKB 6 ;T.XBUF ;JH15 .IF EQ LUN-1 .WORD 8. ;T.CNT ;JH15 .IFF ;JH15 .WORD 0 ;JH15 .ENDC ;EQ LUN-1 .ENDC ;NE SYT$K ;JH15 .NLIST .LIST CND .NLIST ME .LIST .ENDM DL11$N = DL11$L + DL11$M ;# OF DL11'S = LOCAL PLUS REMOTE .IIF EQ DL11$L, .ERROR MUST HAVE AT LEAST ONE LOCAL DL11 FOR CONSOLE. .IIF GT DL11$N-8., .ERROR MAXIMUM OF 8 DL11 INTERFACES PERMITTED. .PSECT MTTY$ ; ; TABLE OF POINTERS TO TCB'S. ORDERED BY LOGICAL UNIT NUMBER. ; TCBLST IS A GLOBAL LABEL FOR THE START OF THE TCB POINTER TABLE. ; DLTBL IS A LABEL FOR THE START OF THE DL11 POINTERS AND DZTBL IS A ; LABEL FOR THE START OF THE DZ11 POINTERS. ; TCBLST:: ; ; DL11'S COME FIRST IN TABLE ; DLTBL:: ;REFERENCE LABEL .IRP T,<0,1,2,3,4,5,6,7> TTMP = 'T .IF GT DL11$N-TTMP .WORD DLTCB+ ;TCB PTR FOR DL11 #'T *** BOOT *** .ENDC .ENDM .IF NE DZ11$N .IF EQ DZV$11 .IIF GT DZ11$N-2, .ERROR ;TOO MANY DZ11 SPECIFIED, MAXIMUM IS TWO .IFF .IIF GT DZ11$N-4, .ERROR ;TOO MANY DZV11S SPECIFIED, MAXIMUM IS FOUR .ENDC ; POINTERS TO TCB'S FOR DZ11 DZTCTB:: ;TABLE OF POINTERS TO DZ11 TCB'S .IRP Q,<0,1,2,3,4,5,6,7,10,11,12,13,14,15,16,17> TTT = 'Q .IF GT DZ11$L - TTT .WORD DZTCB + ;TCB PTR FOR DZ11 LOCAL LINE #'Q **BOOT** .IFF .IF GT DZ11$L + DZ11$M - TTT .WORD DZTCB + ;TCB PTR FOR DZ11 REMOTE LINE #'Q **BOOT** .IFF .IF EQ DZV$11 .IF LT TTT- .WORD 0 .ENDC .IFF .IF LT TTT - .WORD 0 .ENDC .ENDC .ENDC .ENDC .ENDM .ENDC .IF GT +<2*HSR$B> ;1 DL OR HSR$B -> INCLUDE THIS ;MAS01 DLTMP:: .WORD 0 ;PSW SAVE AREA FOR DL11 .ENDC .IF NE DZ11$N DZTBL:: ;REFERENCE LABEL TTMP = 0 .REPT DZ11$N .IF EQ DZV$11 .WORD DZTCTB+ ;*** BOOT *** ;-> TABLE OF TCB ->'S .IFF .WORD DZTCTB+ ;*** BOOT *** ;-> TABLE OF TCB ->'S .ENDC TTMP = TTMP + 1 .ENDR .ENDC .IF GT DZ11$N-1 DZTMP:: .WORD 0 ;PSW SAVE AREA FOR DZ11 .ENDC TCBPEND:: ;REFERENCE LABEL FOR BOOT .IF NE DZ11$N DZCSR:: ;TABLE OF CSR'S FOR DZ11 .IF EQ DZV$11 .IRP T,<0,1> .IF GT DZ11$N-T .WORD DZCS$'T .ENDC .ENDM .IFF .IRP T,<0,1,2,3> .IF GT DZ11$N-T .WORD DZCS$'T .ENDC .ENDM .ENDC .ENDC .IIF LT DL11$N-DL11$M, .ERROR ERROR IN DL11 SPECIFICATION ; ; TERMINAL CONTROL BLOCKS ALLOCATED IN ORDER OF INCREASING UNIT NUMBER: ; LOCAL DL11 LINES FIRST, THEN REMOTE DL11S, THEN LOCAL DZ11 LINES, THEN ; REMOTE DZ11 LINES. LOGICAL UNIT 0 IS THE BOOT-TIME CONSOLE LUN. LUN = 0 ;INITIALIZE LOGICAL UNIT COUNTER DLTCB:: ;REFERENCE LABEL .IRP Q,<0,1,2,3,4,5,6,7> .IF GT DL11$L-Q TCBBLK DL,LOCAL,DLC$'Q,DLV$'Q,0,Q ;TCB FOR LOCAL DL11 .IFF .IF GT DL11$M+DL11$L-Q ;DEFINE TCB'S FOR REMOTE LINES TCBBLK DL,REMOTE,DLC$'Q,DLV$'Q,0,Q ;TCB FOR REMOTE DL11-E .ENDC .ENDC .ENDM ; .IF EQ DZV$11 .IIF LT DZ11$N*8.-DZ11$L-DZ11$M, .ERROR ;ERROR IN DZ11 SPECIFICATION .IFF .IIF LT DZ11$N*4.-DZ11$L-DZ11$M, .ERROR ;ERROR IN DZV11 SPECIFICATION .ENDC ; DZTCB:: ;REFERENCE LABEL .IF EQ DZV$11 .IRP P,<0,1> .IRP Q,<0,1,2,3,4,5,6,7> .IF GT DZ11$N - P .IF GT DZ11$L - - Q TCBBLK DZ,LOCAL,DZCS$'P,DZVC$'P,Q,P ;TCB FOR DZ11 #'P LINE #'Q, LOCAL .IFF .IF GT DZ11$M + DZ11$L - - Q TCBBLK DZ,REMOTE,DZCS$'P, DZVC$'P,Q,P ;TCB FOR DZ11 #'P LINE #'Q, REMOTE .ENDC .ENDC .ENDC .ENDM .ENDM .IFF .IRP P,<0,1,2,3> .IRP Q,<0,1,2,3> .IF GT DZ11$N - P .IF GT DZ11$L - - Q TCBBLK DZ,LOCAL,DZCS$'P,DZVC$'P,Q,P ;TCB FOR DZ11 #'P LINE #'Q, LOCAL .IFF .IF GT DZ11$M + DZ11$L - - Q TCBBLK DZ,REMOTE,DZCS$'P, DZVC$'P,Q,P ;TCB FOR DZ11 #'P LINE #'Q, REMOTE .ENDC .ENDC .ENDC .ENDM .ENDM .ENDC TCBMAX == <.-DLTCB>/TCBSZ ;# OF TCB'S .ENDC ;-DV56 .END .MCALL .MODULE .MODULE USR,VERSION=34,COMMENT= ; COPYRIGHT (c) 1987 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. .SBTTL *************************** .SBTTL * USR * .SBTTL *************************** .SBTTL CONDITIONALIZATION SUMMARY .IIF NE MMG$T, GT$NM=1 .IIF NDF GT$NM, GT$NM=0 .IIF NE MMG$T, CVT$NU=1 .IIF NDF CVT$NU,CVT$NU=0 .IIF DF NLUSR, .NLIST .SBTTL FORCE THE CORRECT ORDERING OF PSECTS .PSECT RT11 RT11:: .PSECT RMNUSR RMNUSR:: .PSECT RTDATA RTDATA:: .PSECT RMNUSR .MCALL .CKXX .CKXX .SBTTL LOCATE/LOCAT1 - USR ENTRY, EMT 376 PROCESSOR ** USR BUFFER ** USRBUF::CALL LOCAT1 JMP @R5 LOCATE::MOV R1,-(SP) MOV R2,-(SP) ADDR RELSTK,R1 BR LOCOM LOCAT1::MOV R1,-(SP) MOV R2,-(SP) ADDR RELST2,R1 LOCOM: MOV @#SYSPTR,R5 CALL RELSUB ADDR USRBUF,R5 .IF EQ BF .MNLOC == .+2 MOV R5,@#MONLOC-$RMON .ENDC CALL RELSUB MOV .USRTO,R5 .USRLO == .+2 MOV R5,@#USRLOC-$RMON CLR @.BLKEY MOV (SP)+,R2 MOV (SP)+,R1 RELRET: RTS PC RELSUB: MOV (R1)+,R2 BEQ RELRET ADD PC,R2 RELLP2: ADD R5,@R2 BR RELSUB .SBTTL RELSTK/RELST2 - POINTERS NEEDING RELOCATION ** USR BUFFER ** RELSTK: .WORD .$SWPB-RELLP2 .WORD .$MONB-RELLP2 .WORD .CORPT-RELLP2 .WORD .CURLE-RELLP2 .WORD .EXTFL-RELLP2 .WORD .IFSVS-RELLP2 .WORD .IFMXN-RELLP2 .WORD .$USRL-RELLP2 .WORD .KMLOC-RELLP2 .WORD .$KMLO-RELLP2 .WORD ..USRL-RELLP2 .WORD ..SYSL-RELLP2 .WORD .EXTIN-RELLP2 .WORD .ERRLE-RELLP2 .WORD .INDST-RELLP2 .WORD .CLIFL-RELLP2 .WORD .CLITY-RELLP2 .WORD .CCB-RELLP2 .WORD .$INDD-RELLP2 .WORD .LOWMA-RELLP2 .IF EQ BF .WORD .MONLC-RELLP2 .WORD ..$CSW-RELLP2 .WORD ..QSIZ-RELLP2 .IF EQ MTT$Y .WORD ..TTOB-RELLP2 .WORD ..ZAP-RELLP2 .WORD ..TTKS-RELLP2 .IFF .WORD ..MTRE-RELLP2 .WORD ..MTR1-RELLP2 .ENDC .IFF .IF EQ MMG$T .IF NE MTT$Y .WORD .$MTPS-RELLP2 .ENDC .IFF .WORD ..I.CN-RELLP2 .ENDC .ENDC RELST2: .WORD .USRLO-RELLP2 .WORD .MONOU-RELLP2 .WORD .$UNAM-RELLP2 .WORD .$ENTR-RELLP2 .WORD .SYINDX-RELLP2 .WORD .BLKEY-RELLP2 .WORD .CHKEY-RELLP2 .WORD .$DATE-RELLP2 .WORD .DFLG-RELLP2 .WORD .$STAT-RELLP2 .WORD .$PNAM-RELLP2 .WORD .SPUSR-RELLP2 .WORD .MAXBL-RELLP2 .WORD .STATWD-RELLP2 .WORD .CNFG2-RELLP2 .WORD .INBFPT-RELLP2 .WORD .SPSIZ-RELLP2 .IF EQ MMG$T .WORD ..$MTP-RELLP2 .ENDC .WORD .SYSLO-RELLP2 .WORD .$SYS-RELLP2 .WORD .DRCAL-RELLP2 .IF EQ GT$NM .WORD .EMTMO-RELLP2 .WORD .GETNM-RELLP2 .WORD .GTNM1-RELLP2 .ENDC .IF EQ CVT$NU .WORD .$OCTN-RELLP2 .WORD .$DECN-RELLP2 .WORD .$CVTN-RELLP2 .ENDC;EQ CVT$NU .IF EQ BF .WORD .MNLOC-RELLP2 .WORD .I.CSW-RELLP2 .WORD .I.CNU-RELLP2 .WORD .RECUR-RELLP2 .WORD .QSIZE-RELLP2 .WORD .$CSW-RELLP2 .IF EQ MTT$Y .WORD .TTOBU-RELLP2 .WORD .ZAP-RELLP2 .WORD .TTKS-RELLP2 .IFF .WORD .MTRES-RELLP2 .WORD .MTRE1-RELLP2 .ENDC .IF NE TIME$R .WORD .CMKAL-RELLP2 .ENDC .IFF .WORD .$OWNE-RELLP2 .WORD .CNTXT-RELLP2 .WORD .$IMPUR-RELLP2 .WORD .JOBNUM-RELLP2 .WORD .CSIER-RELLP2 .WORD .DRVTB-RELLP2 .ENDC .IF NE MMG$T .WORD .$RELM-RELLP2 .WORD .$KADR-RELLP2 .WORD .$U2P1-RELLP2 .WORD .P1SD-RELLP2 .WORD .PL10W-RELLP2 .IF NE XM$FET .WORD .PLBYT-RELLP2 .WORD .INTSET-RELLP2 .WORD .INTRLS-RELLP2 .ENDC .ENDC .WORD .KMONIN-RELLP2 .WORD 0 .WORD .USRBU-RELLP2 .WORD .USRTO-RELLP2 .WORD .USRBO-RELLP2 .WORD .FNAME-RELLP2 .WORD .FNAM6-RELLP2 .WORD .D.USR-RELLP2 .WORD .M.USR-RELLP2 .WORD .USRIO-RELLP2 .WORD .FILDE-RELLP2 .WORD .HANSP-RELLP2 .WORD .DVSTS-RELLP2 .IF EQ BF .WORD .DRVTB-RELLP2 .ENDC .IF EQ MMG$T .WORD .STKSV-RELLP2 .WORD .SVSTK-RELLP2 .ENDC .WORD 0 .SBTTL FATAL - ERROR HANDLER ** USR BUFFER ** .IF EQ BF IOFSET = FATAL - USRBUF .IF EQ PANI$C FATAL: ADDR MONMSG,R0 .PRINT ADDR IOTLS,R0 ASL R4 ADD R4,R0 MOV (R0),R0 ADD PC,R0 IOTPC: .PRINT .TTYOUT #SPACE 1$: MOV #30,R0 SEC 2$: ROL R3 ROLB R0 .TTYOUT MOV #206,R0 3$: ASL R3 BEQ 4$ ROLB R0 BCS 3$ BR 2$ 4$: .IFF .SBTTL FATAL - PANIC DUMP ** USR BUFFER ** .ENABL LSB FATAL: ADDR MONMSG,R0 .PRINT ADDR IOTLS,R0 ASL R4 ADD R4,R0 MOV @R0,R0 ADD PC,R0 IOTPC: MOVB (R0)+,R2 .PRINT TSTB R2 BEQ 8$ ADDR PANIC,R0 .PRINT ADDR PREG,R5 ADDR 3$,R4 ADD #16.,R1 CLR R2 JSR R2,@R4 .ASCII "R0" ADD #8.,R1 MOV #5,-(SP) 1$: JSR R2,2(R4) CMP -(R1),-(R1) DEC @SP BNE 1$ MOV R1,R3 ADD #16.,R3 MOV R3,@SP MOV SP,R1 JSR R2,@R4 .ASCII "SP" MOV (SP)+,R1 CMP -(R1),-(R1) JSR R2,@R4 .ASCII "PC" JSR R2,@R4 .ASCII "PS" MOV -4(R1),R1 BICB #1,R1 CMP R1,PC BHIS 2$ SUB #6.,R1 MOV #3,R2 JSR R2,@R4 .ASCII "I1" 2$: .ENDC 8$: .TTYOUT #CR .TTYOUT #LF BISB #,@#USERRB BIC #,@#JSW BIS #,@.STATWD CLR R0 .EXIT .IF NE PANI$C 3$: MOV (R2)+,@R5 4$: MOV (R1)+,R3 MOV R5,R0 .PRINT INCB 1(R5) MOV (PC)+,R0 .WORD <'0>/2 SEC 5$: ROL R3 ROLB R0 .TTYOUT MOV (PC)+,R0 .WORD 200!<'0/10> 6$: ASL R3 BEQ 7$ ROLB R0 BCS 6$ BR 5$ 7$: MOV PC,R0 MOV R0,R0 .PRINT DEC @SP BGT 4$ RTS R2 PANIC: .ASCIZ "PANIC DUMP " PREG: .ASCII "R0 "<200> .EVEN .DSABL LSB .ENDC .MACRO ERRMSG CODE,DUMP,TEXT ..TMP2=. .=IOTLS+..TEMP+..TEMP .WORD ..TMP2-IOTPC .=..TMP2 .IF NE PANI$C .IF IDN YES, .BYTE 1 .IFF .BYTE 0 .ENDC .ENDC .ASCII \TEXT\ .IF EQ PANI$C .BYTE 200 .IFF .BYTE 0 .ENDC CODE'.E = ..TEMP ..TEMP = ..TEMP+1 .ENDM ERRMSG MONMSG: .ASCII "?MON-F-"<200> ..TEMP = 0 ERRMSG USRX YES ERRMSG NODV NO ERRMSG DIRI NO ERRMSG FETC YES ERRMSG OVLY NO ERRMSG DOVR NO ERRMSG ADDR YES ERRMSG CHAN YES ERRMSG EMT YES ERRMSG TR04 YES ERRMSG TR10 YES ERRMSG ILLD NO ERRMSG UDRV YES ERRMSG FPP YES ERRMSG MPAR NO ERRMSG STCK YES ERRMSG IOBD NO .EVEN IOTLS: .BLKW ..TEMP .SBTTL CDFN - CHANNEL DEFINE ** USR BUFFER ** CDFN: MOV ARGM1,R2 MOV R2,R1 MOV .I.CNU,R5 CMPB R2,@R5 BLOS 4$ CDFNWT == . 1$: MOV .QSIZE,R3 CMP (R3)+,(R3) BNE 1$ MOV @R5,R4 ASL R4 ASL R4 ADD (R5)+,R4 MOV @R5,R3 ASL R2 ASL R2 ADD R1,R2 SUB R4,R2 2$: MOV (R3)+,(R0)+ SOB R4,2$ 3$: CLR (R0)+ SOB R2,3$ MOV @SP,@R5 MOV R1,-(R5) BR 5$ 4$: .WORD EMTERR+0 5$: JMP COMXIT .SBTTL SOFRST/HDRSET - HARD AND SOFT RESET ** USR BUFFER ** SOFRST: MOV (PC)+,R0 HDRSET: CLR R0 CALL RSTSR JMP COMXIT .ENABL LSB RSTSR: BNE 3$ RSTTTW == . .IF EQ MTT$Y .TTOBU == .+2 1$: TST @#TTOBUF+2-$RMON BNE 1$ .ZAP == .+2 CALL @#ZAP-$RMON 3$: .IFF .MTRES == .+2 CALL @#MTREST-$RMON BR 30$ 3$: .MTRE1 == .+2 CALL @#MTRES1-$RMON .ENDC 30$: .IF NE TIME$R .CMKAL == .+2 CALL @#CMKALL-$RMON .ENDC MOV #*CHNWDS,R1 BIT #OVLY$,@#JSW BNE 4$ ADD #CHNWDS,R1 4$: .$CSW == .+2 MOV #$CSW-$RMON,R2 MOV R2,@.I.CSW MOV #CHNUM,@.I.CNU 5$: CLR (R2)+ SOB R1,5$ MOV .$ENTR,R2 MOV #$SLOT,R1 6$: CMP @R2,@.SYSLO BLO 7$ CLR @(R2)+ BR 8$ 7$: CLR (R2)+ 8$: SOB R1,6$ RSTIOW == . 9$: .QSIZE == .+2 MOV #QSIZE-$RMON,R1 CMP (R1)+,@R1 BLO 9$ MOV #1,-(R1) MOV (R1)+,(R1)+ MOV R1,@R1 ADD #2,@R1 .IF EQ MTT$Y .TTKS == .+2 MOV @#TTKS-$RMON,-(SP) BIS #IENABL,@(SP)+ .ENDC RTS PC .DSABL LSB .ENDC .SBTTL QSET - QUEUE EXTEND EMT ** USR BUFFER ** .IF NE MMG$T . = USRBUF+L.UBUF BR USRST .ENDC .ENABL LSB QSET: INC ARGPOP MOV R0,R5 BLE QSOUT .IF EQ MMG$T MOV ARGM1,R1 .IFF MOV ARGM1,R0 .$U2P1 == .+2 CALL @#$U2P1-$RMON BCC 2$ 1$: MOV R5,R0 .PL10W == .+2 CALL @#PL10WD-$RMON BCS QERR 2$: MOV R2,R1 .P1SD == .+2 CALL @#P1SD-$RMON MOV R5,R0 .ENDC MOV R1,R4 .IF NE BF MOV @.CNTXT,R2 TST (R2)+ .IFF MOV .QSIZE,R2 CMP (R2)+,(R2)+ .ENDC 3$: MOV R1,R3 ADD #QESIZE,R1 MOV R1,@R3 SOB R0,3$ CLR @R3 .IF EQ MMG$T MOV #PR7,-(SP) ..$MTP == .+2 CALL @#$MTPS-$RMON .IFF BISB #PR7,@#PS .ENDC MOV @R2,@R3 MOV R4,@R2 .IF EQ BF ADD R5,-(R2) ADD R5,-(R2) .ENDC .IF EQ MMG$T CLR -(SP) CALL @..$MTP .IFF BICB #PR7,@#PS .IFTF MOV R1,@SP .ENDC QSOUT: JMP COMXIT QERR: JSR R5,COMERR .WORD ADDR.E .DSABL LSB .SBTTL USR PROGRAMMED REQUEST ENTRY, COMMAND DISPATCHING .IF EQ MMG$T . = USRBUF+L.UBUF .ENDC USRST:: MOV @SP,R0 .IF NE BF CLR (PC)+ ARGPOP: .WORD 0 .IFF .RECUR == .+2 MOV @#RECURS-$RMON,(PC)+ ARGPOP: .WORD 0 BEQ USRA MONERR USRX.E,0,FATAL USRA: .ENDC CLR @.SPUSR MOV (R1)+,(PC)+ ARGM1: .WORD 0 MOV (R1)+,(PC)+ ARGM2: .WORD 0 MOV (R1)+,(PC)+ ARGM3: .WORD 0 MOV R2,(PC)+ USREMT: .WORD 0 MOV SP,(PC)+ USRSP: .WORD 0 CLR R5 ROL R2 TST (R2)+ ADD PC,R2 ADD @R2,PC ULS: ULS: .WORD QSET-ULS .IF EQ BF .WORD CDFN-ULS .ENDC .WORD DELETU-ULS .WORD PHETCH-ULS .WORD KLOSE-ULS .WORD ENTER-ULS .WORD LOOKUP-ULS .WORD RENAMU-ULS .WORD GESTAT-ULS .IF EQ BF .WORD SOFRST-ULS .WORD HDRSET-ULS .ENDC ..CSI == <. - ULS> / 2 .WORD CSI-ULS .SBTTL RENAMU/LOOKUP - LOOKUP AND RENAME REQUESTS RENAMU: MOV #RENAM$,R5 LOOKUP: JSR R5,USRCOM BR LNFILE BR SPLOOK JSR R5,SEARCH BR LKER1 MOV #E.LENG,R2 TST R5 BEQ 1$ ADD R2,R0 JMP CLOCOM 1$: TST (R3)+ ADD R2,R1 MOV SBLK,(R3)+ MOV (R1),(SP) MOV (R1)+,(R3)+ MOV (R1)+,(R3)+ .IF NE MMG$T CALL @.P1SD .ENDC CALL @ARGM3 BR COMXIT SPLOOK: BIS #DWRIT$,@R3 TST R5 BNE SPRNAM JSR R4,SPSHL1 .BYTE 377,LOOK.. SPRNAM: JSR R4,SPSHL1 .BYTE 377,RENM.. .SBTTL COMXIT - COMMON EXIT FOR ALL USR REQUESTS LNFILE: CMP (R3)+,(PC)+ PROERR: .WORD EMTERR+3 BR DELOUT LKER1: .WORD EMTERR+1 DELOUT: CLR (R3)+ CLR @SP .BR COMXIT COMXIT: MOV ARGPOP,R2 .MONOU == .+2 JMP @#MONOUT-$RMON .SBTTL COMERR - COMMON ERROR EXIT FOR FATAL USR ERRORS COMERR: MOVB @R5,CODE MOV USRSP,SP CLR @.DFLG CLR @.BLKEY EMT 376 .BYTE 0 CODE: .BYTE 0 BR COMXIT .SBTTL DELETU - DELETE A FILE DELETU: JSR R5,USRCOM BR DELOUT BR SPDEL JSR R5,SEARCH BR LKER1 BMI PROERR MOV #EMPTY,@R1 JMP CLSQSH SPDEL: JSR R4,SPSHL1 .BYTE 377,DELE.. .SBTTL ENTER - OPEN A FILE ON A DEVICE .ENABL LSB ENTER: CLR @.BLKEY INC ARGPOP MOV #DWRIT$,R5 JSR R5,USRCOM BR LNFILE BR SPENTR MOV USRBUF+D.HIGH,LSTBLK CLR ARGM2 1$: CLR FNAME CLR FNAME+2 BR 4$ SPENTR: JSR R4,SPESHL .BYTE 377,ENTR.. 2$: MOV .USRBO,R1 JSR R5,FILSCN BR 3$ BMI PROERR 3$: JSR R5,NXBLK BR 10$ 4$: CALL CONSOL 5$: MOV (PC)+,R5 .FNAME:: .WORD FNAME-USRBUF JSR R5,ENTRY .WORD EMPTY BR 2$ MOV E.LENG(R1),R4 MOV ARGM1,R2 BEQ 6$ CMP #-1,R2 BNE 13$ 6$: CMP (R5)+,R4 BHIS 9$ CMP @R5,R4 BHIS 7$ MOV @R5,-(R5) ADD #8.,R5 MOV -(R5),-(R5) 7$: MOV R4,-(R5) 8$: MOV @R3,4(R5) 9$: ADD R4,SBLK CALL INCR1 BR 5$ 10$: TST (R5)+ TST R2 BNE 12$ ROR @R5 CMP @R5,-(R5) BLO 11$ TST (R5)+ .MAXBL == .+2 11$: CMP @#MAXBLK-$RMON,@R5 BHIS 121$ MOV @.MAXBL,@R5 BIC #DBLK$M,4(R5) INCB 5(R5) .ASSUME DBLOK$ EQ 400 BR 121$ 12$: COM ARGM2 INC R2 BNE 121$ MOV @R5,-2(R5) 121$: MOV @R5,ARGM1 BEQ LKER1 MOV 4(R5),@R3 RENTR: JSR R5,BLKCHK TST ARGM2 BEQ 1$ BR 4$ 13$: CMP R4,R2 BLO 9$ TST @R5 BEQ 132$ CMP R4,@R5 BHI 9$ BEQ 131$ 132$: MOV R4,(R5)+ MOV R2,@R5 BR 8$ 131$: TST ARGM2 BEQ 9$ 14$: MOV R1,-(SP) MOV DREND,R1 CALL INCR2 CALL INCR1 CMP R1,(PC)+ .USRTO:: .WORD USRBUF+L.UBUF-USRBUF BHI EXTEND MOV (SP)+,R1 MOV SBLK,R4 MOV R1,R5 SUB R2,E.LENG(R1) SUB #L.ENTR,R5 SUB USRBUF+D.EXTR,R5 CMP R5,(PC)+ .USRBO:: .WORD USRBUF+L.HDR-USRBUF BLO 15$ BIT #TENT,@R5 BEQ 15$ CALL PUSH MOV #EMPTY,@R1 CLR E.LENG(R1) CALL INCR1 15$: CALL PUSH MOV #TENT,(R1)+ MOV (R0)+,(R1)+ MOV (R0)+,(R1)+ MOV (R0)+,(R1)+ MOV R2,(R1)+ .IF NE BF MOVB CHNLRG,(R1)+ .JOBNU == .+2 MOVB @#JOBNUM-$RMON,(R1)+ .IFF MOV CHNLRG,(R1)+ .ENDC .$DATE == .+2 MOV @#$DATE-$RMON,@R1 .IF NE MMG$T CALL @.P1SD .ENDC CALL @ARGM3 TST (R3)+ CLR @R3 JSR R5,SEGWR MOV R4,(R3)+ MOV R2,(R3)+ CLR @R3 MOV -(R3),@SP JMP COMXIT .DSABL LSB .SBTTL EXTEND - ENLARGE THE SIZE OF A DIRECTORY .ENABL LSB EXTEND: MOV R0,@SP MOV (PC)+,R2 LSTBLK: .WORD 0 .DFLG == .+2 INC @#DFLG-$RMON CMP R2,USRBUF BGE 6$ MOV (PC)+,R4 .M.USR:: .WORD USRBUF+<512.-5-1/2+5*2>-USRBUF MOV (PC)+,R1 .D.USR:: .WORD USRBUF+D.STRT-USRBUF MOV (R1)+,R5 1$: CALL INCR1A CMP R1,R4 BLO 1$ BIT #PERM!TENT,@R1 BEQ 1$ MOV @R1,-(SP) MOV #ENDBLK,@R1 INC R2 MOV USRBUF+D.NEXT,-(SP) MOV R2,USRBUF+D.NEXT JSR R5,SEGWR MOV .USRBU,R0 TST (R0)+ MOV (SP)+,(R0)+ MOV (SP)+,@R1 CMP (R0)+,(R0)+ MOV R5,(R0)+ 4$: MOV (R1)+,(R0)+ CMP R1,.USRTO BLOS 4$ MOV R2,R0 JSR R5,SEGRW JSR R5,SEGRD1 INC USRBUF+D.HIGH JSR R5,SEGWR DEC @.DFLG MOV (SP)+,R0 JMP RENTR 6$: JSR R5,COMERR .WORD DOVR.E .DSABL LSB .SBTTL PUSH - MAKE ROOM IN CURRENT DIRECTORY SEGMENT FOR NEW ENTRY PUSH: MOV R3,-(SP) MOV R1,R5 JSR R5,ENTRY .WORD 0 MOV R1,R3 CALL INCR1 CMP (R3)+,(R1)+ 1$: MOV -(R3),-(R1) CMP R3,R5 BNE 1$ MOV R5,R1 MOV (SP)+,R3 RTS PC .SBTTL KLOSE - CLOSE A FILE, DELETE UNPROTECTED DUPLICATES .ENABL LSB KLOSE: ASR R4 MOV R4,CHNLRG MOV @R3,R5 BIC #^C<76>,R5 .$STAT == .+2 ADD #$STAT-$RMON,R5 BIT #SPECL$,@R5 BNE SPCLOS CLR 2(R3) JSR R5,BLKCHK BR 2$ 1$: JSR R5,NXBLK BR CLSOUT 2$: JSR R5,ENTRY .WORD TENT BR 1$ .IF NE BF CMPB E.JNUM(R1),@.JOBNUM BNE 3$ .ENDC CMPB E.CHAN(R1),CHNLRG BEQ 4$ 3$: CALL INCR1 BR 2$ 4$: MOV R1,R2 TST (R2)+ MOV .FNAME,R0 MOV (R2)+,(R0)+ MOV (R2)+,(R0)+ MOV @R2,@R0 CMP -(R0),-(R0) CLOCOM: MOV R1,R4 MOV @R3,@SP BIC #DBLK$M,@R3 ADD #DBLOK$,@R3 JSR R5,SEARCH BR 8$ CMP @R3,@SP BNE 5$ CMP R1,R4 BEQ 9$ 5$: TST @R1 BPL 7$ 6$: .WORD EMTERR+3 BIT #RENAM$,@R3 BEQ 8$ BR CLSOUT .ASSUME PERM EQ <2*EMPTY> 7$: ASR @R1 CMP @R3,@SP BEQ 8$ INC @.DFLG CALL CLOSUP 8$: MOV @SP,@R3 JSR R5,BLKCHK MOV R4,R1 BIT #RENAM$,@R3 BNE 9$ MOV #PERM,@R1 ADD #E.LENG,R1 MOV @R1,R2 MOV C.USED(R3),@R1 SUB @R1,R2 CALL INCR1 ADD R2,@R1 CLSQSH: CALL CLOSUP CLR @.DFLG CLSOUT: JMP DELOUT 9$: TST (R1)+ MOV (R0)+,(R1)+ MOV (R0)+,(R1)+ MOV (R0)+,(R1)+ CMP (R1)+,(R1)+ .IF NE MMG$T CALL @.P1SD .ENDC CALL @ARGM3 BR CLSQSH SPCLOS: JSR R4,SPESHL .BYTE 377,CLOS.. .DSABL LSB .SBTTL CLOSUP - CONSOLIDATE AND REWRITE A DIRECTORY SEGMENT CLOSUP: MOV R0,-(SP) MOV .USRBO,R1 CALL CONSOL JSR R5,SEGWR MOV (SP)+,R0 RTS PC .IF NE MMG$T .SBTTL MAPFIL - MAP TO USER FILE BLOCK MAPFIL: BIT #PMODE,@#PS BNE 1$ CALL @.P1SD RTS PC .$RELM == .+2 1$: JMP @#$RELOM-$RMON .ENDC .SBTTL SPESHL/SPSHL1 - PROCESS USR REQUESTS FOR SPECIAL DEVICES SPSHL1: MOV ARGM1,ARGM2 SPESHL: BIC #EOF$!HDERR$,@R3 CLR -(SP) MOV (R4)+,-(SP) MOV ARGM1,-(SP) MOV R0,-(SP) CLR -(SP) TST USREMT BPL 1$ MOV ARGM2,@SP 1$: MOV CHNLRG,-(SP) ADD #10*400,@SP MOV SP,R0 EMT 375 BCC 2$ JMP IOER 2$: ADD #14.,SP CLR @.BLKEY .SPUSR == .+2 MOV @#SPUSR-$RMON,R0 BNE 3$ CMPB -(R4),#LOOK.. BEQ 5$ CMPB @R4,#ENTR.. BEQ 5$ BR 4$ 3$: BIS (PC)+,R0 .WORD EMTERR MOV R0,@PC .WORD EMTERR 4$: CLR (R3)+ .SPSIZ == .+2 5$: MOV @#SPSIZE-$RMON,@SP COMXT2: JMP COMXIT .SBTTL GESTAT - GET DEVICE STATUS EMT (.DSTATUS) .ENABL LSB GESTAT: CALL LK4DV1 .IF NE MMG$T MOV R2,-(SP) CALL MAPFIL MOV (SP)+,R2 .ENDC MOV @R2,(R0)+ MOV $HSIZE-$STAT(R2),(R0)+ MOV @R5,(R0)+ MOV $DVSIZ-$STAT(R2),@R0 COMXT3: BR COMXT2 .DSABL LSB LK4DV1: .IF NE MMG$T CALL MAPFIL .ENDC INC ARGPOP ASR ARGM1 JSR R4,LK4DEV BR FCE0X MOV ARGM1,R0 ASL R0 MOV R0,2(SP) RETURN .SBTTL PHETCH - FETCH A DEVICE DRIVER .ENABL LSB PHETCH: CALL LK4DV1 .SYSLO == .+2 MOV @#SYSLOW-$RMON,R3 .IF NE BF MOV @.JOBNUM,R0 .ENDC;NE BF CMP @SP,#V.MAX BLOS RLEAS .IF NE BF TST R0 BEQ 1$ CMP @R5,R3 BHIS PHOUT UNLDRV: JSR R5,COMERR .WORD UDRV.E 1$: .ENDC TST @R5 BNE PHOUT .IF NE MMG$T .IF EQ XM$FET TST @.KMONIN BEQ UNLDRV .ENDC CALL @.P1SD MOV @SP,R0 MOV @SP,ARGM1 .IFTF MOV R5,R3 MOV $HSIZE-$ENTRY(R3),R4 MOV (PC)+,R5 .FNAM6:: .WORD FNAME+6-USRBUF CLR -(R5) MOV R4,-(R5) ASR @R5 .IFT .$KADR == .+2 CALL @#$KADR-$RMON BCC 2$ MOV R4,R0 CLR R4 .PLBYT == .+2 CALL @#PLBYTE-$RMON BCS BADFT 2$: MOV R2,@SP .IFF MOV @SP,R2 .ENDC MOV R2,-(R5) MOV $DVREC-$ENTRY(R3),R0 BNE 3$ BR FCE0 FCE0X: TST (SP)+ FCE0: .WORD EMTERR+0 COMXT4: BR COMXT3 3$: MOV @(PC)+,R1 .USRIO:: .WORD .USRBU-USRBUF ADD $HSIZE-$ENTRY(R3),R2 BCS BADFT CMP R2,@#SYSPTR BHI BADFT CMP R2,R1 BLOS 4$ ADD #USRSIZ,R1 CMP @SP,R1 BLO BADFT .IF EQ MMG$T CMP R2,@.SYSLO BLOS 4$ .ENDC .KMONIN == .+2 TST @#KMONIN-$RMON BNE 4$ BADFT: JSR R5,COMERR .WORD FETC.E 4$: .IF EQ MMG$T .$SYS == .+2 CALL @#$SYS-$RMON .IFF CALL $SYS.KM .ENDC BCS BADFT MOV @SP,R1 TST 10(R1) BPL 45$ TST @.KMONIN BEQ UNLDRV 45$: CLR 10(R1) CLR R0 MOV (R1)+,R5 BPL 7$ ASL R5 ADD R5,R1 MOV (R1)+,R5 BPL 6$ MOV (R1)+,-(SP) MOV @#SYSPTR,R5 CALL @GETVEC-$RMON(R5) MOV (SP)+,R0 BCS BADFT 5$: MOV (R1)+,R5 6$: ADD R0,R5 7$: BLE 8$ MOV R1,@R5 ADD (R1)+,(R5)+ MOV (R1)+,@R5 BIS #PR7,@R5 .IF NE MMG$T .IF NE XM$FET .INTSET == .+2 CALL @#INTSET-$RMON BCS UNLDRV .ENDC .ENDC BR 5$ .IF EQ BF UNLDRV: JSR R5,COMERR .WORD UDRV.E .ENDC;EQ BF 8$: MOV @SP,R0 ADD #6,R0 .IF NE MMG$T ADD R4,ARGM1 .IFF ADD R4,@SP .ENDC .DRVTB == .+2 MOV (PC)+,R1 .IF EQ BF .WORD DRVTBL+DRVTSZ-2-USRBUF .IFF .WORD DRVTBL+DRVTSZ-2-$RMON .ENDC 9$: MOV @R1,-(R2) ADD @#SYSPTR,@R2 TST -(R1) BNE 9$ MOV R0,@R3 CLR R1 .DRCAL == .+2 CALL @#DRCALL-$RMON BCC 93$ CLR @R3 BR BADFT 93$: .IF NE MMG$T MOV ARGM1,@SP .ENDC PHOUT: BR COMXT4 .DSABL LSB .SBTTL RLEAS - GET RID OF A .FETCHED DEVICE HANDLER RLEAS: TST @.KMONIN BNE 1$ CMP @R5,R3 BHI PHOUT 1$: .IF NE BF TST R0 BNE PHOUT .ENDC .CNFG2 == .+4 BIS #,@#CONFG2-$RMON MOV #2,R1 MOV R5,R3 CALL @.DRCAL .IF EQ MMG$T CLR @R5 .IFF .IF EQ XM$FET CLR @R5 .IFF .INTRLS == .+2 CALL @#INTRLS-$RMON .ENDC .ENDC BR PHOUT .IF NE MMG$T $SYS.KM::CLC MOV @#PS,R1 BIC #CMODE!PMODE,@#PS .$SYS == .+2 CALL @#$SYS-$RMON BIS R1,@#PS RETURN .ENDC .IF EQ BF .SBTTL DRVTBL - COPY OF TABLE OF RMON OFFSETS WHICH IS IN EACH DRIVER DRVTBL: .WORD 0 .IF NE MMG$T .WORD $RELOC-$RMON .WORD $MPPHY-$RMON .WORD $GETBYT-$RMON .WORD $PUTBYT-$RMON .WORD $PUTWRD-$RMON .ENDC .IF NE ERL$G .WORD $ERLOG-$RMON .ENDC .IF NE TIM$IT .WORD $TIMIO-$RMON .ENDC .WORD $INTEN-$RMON .WORD $FORK-$RMON DRVTSZ = . - DRVTBL .ENDC .SBTTL USRCOM - SET UP USR FOR LOOKUP, ENTER, RENAME, DELETE .ENABL LSB USRCOM: ASR R4 MOV R4,CHNLRG MOV (SP)+,R2 TST @R3 BMI FCE0 ROR R0 JSR R2,1$ RTS PC 1$: BCS 2$ MOV R2,ARGM3 2$: ASL R0 MOV R0,2(SP) CLR C.SBLK(R3) .IF NE MMG$T CALL MAPFIL .ENDC MOV R5,-(SP) MOV R3,-(SP) ASR ARGM3 JSR R4,LK4DEV BR COMNDV BEQ COMNDV ASL ARGM3 .IF NE BF MOV R1,R5 ASR R5 ADD R3,R5 ADD R3,R5 .$OWNER == .+2 MOVB $OWNER-$RMON(R5),R5 BIT #1,R1 BEQ 3$ ASR R5 ASR R5 ASR R5 ASR R5 3$: BIC #^C<17>,R5 BEQ 4$ DEC R5 CMP @.JOBNUM,R5 BNE COMNDV 4$: .ENDC MOV R3,R5 MOV (SP)+,R3 BIS R5,@R3 BIS #ACTIV$+DBLOK$*1,@R3 MOV (SP)+,R5 SWAB R1 MOV R1,C.DEVQ(R3) TST @R2 BPL USRNF BIS @SP,@R3 TST @R0 BEQ USR3 JSR R5,BLKCHK USR2: TST (R5)+ ENXT: TST (R5)+ USR3: RTS R5 USRNF: BIT #SPECL$,@R2 BEQ USR3 BIS @SP,@R3 BR ENXT COMNDV: JSR R5,COMERR .WORD NODV.E .DSABL LSB .SBTTL ENTRY - SCAN FOR ENTRY OF SPECIFIED TYPE IN CURRENT SEGMENT ENTRY: BIT @R5,@R1 BNE USR2 BIT @R1,#ENDBLK BNE ENXT ADD E.LENG(R1),(PC)+ SBLK: .WORD 0 CALL INCR1 BR ENTRY .SBTTL INCR1/INCR1A/INCR2 - MOVE R1 PAST ONE OR TWO DIRECTORY ENTRIES INCR1A: ADD E.LENG(R1),R5 BR INCR1 INCR2: MOV PC,-(SP) INCR1: ADD USRBUF+D.EXTR,R1 ADD #L.ENTR,R1 RTS PC .SBTTL SEARCH - FIND A SPECIFIED PERMANENT FILE .ENABL LSB SEARCH: JSR R5,BLKCHK 1$: JSR R5,FILSCN BR 4$ 2$: TST (R5)+ TST @R1 3$: RTS R5 4$: JSR R5,NXBLK BR 3$ BR 1$ .SBTTL FILSCN - SCAN A DIR SEGMENT IN USR BUFFER FOR A SPECIFIC PERM FILE FILSCN: JSR R5,ENTRY .WORD PERM BR 3$ CMP @R0,E.NAME(R1) BNE 5$ CMP 2(R0),E.NAME+2(R1) BNE 5$ CMP 4(R0),E.NAME+4(R1) BEQ 2$ 5$: ADD E.LENG(R1),SBLK CALL INCR1 BR FILSCN .DSABL LSB .SBTTL NXBLK - READ NEXT LOGICAL DIRECTORY BLOCK INTO USR BUFFER NXBLK: MOV R0,-(SP) MOV USRBUF+2,R0 BEQ ENRTS SWAB R0 BIC #DBLK$M,@R3 BIS R0,@R3 CMP (R5)+,(PC)+ .BR BLKCHK .SBTTL BLKCHK - READ A DIRECTORY BLOCK INTO USR BUFFER BLKCHK: MOV R0,-(SP) MOV @R3,R0 SWAB R0 BIC #^C<37>,R0 MOV C.DEVQ(R3),-(SP) MOVB @R3,@SP BIC #301,@SP CMP R0,@.BLKEY BNE 1$ CMP @SP,@.CHKEY BEQ 2$ 1$: MOV R0,@.BLKEY JSR R5,SEGRD .CHKEY == .+2 2$: MOV (SP)+,@#CHKEY-$RMON MOV .D.USR,R1 MOV (R1)+,SBLK BEQ ILLDIR BIT #^C<107400>,@R1 BNE ILLDIR ENRTS: MOV (SP)+,R0 RTS5: RTS R5 ILLDIR: JSR R5,COMERR .WORD ILLD.E .SBTTL SEGRD1/SEGRD/SEGWR/SEGRW - READ/WRITE DIRECTORY SEGMENTS SEGRD1: MOV #1,@.BLKEY SEGRD: CMP (PC)+,PC SEGWR: CLC .BLKEY == .+2 MOV @#BLKEY-$RMON,R0 SEGRW: JSR R0,SKIPBL .WORD 0 .WORD 0 .USRBU:: .WORD USRBUF-USRBUF .WORD 1000 .WORD 0 SKIPBL: MOVB (PC)+,(R0)+ CHNLRG: .WORD 0 MOVB #11,@R0 SBCB (R0)+ ASL @SP ADD #DOFSET,@SP MOV (SP)+,@R0 TST -(R0) EMT 375 BCC RTS5 IOER: JSR R5,COMERR .WORD DIRI.E .SBTTL CONSOL - REMOVE UNNECESSARY ENTRIES FROM A DIRECTORY .ENABL LSB CONSOL: MOV SBLK,-(SP) MOV R4,-(SP) MOV R3,-(SP) MOV R1,-(SP) MOV #L.ENTR,R4 ADD USRBUF+D.EXTR,R4 1$: JSR R5,ENTRY .WORD TENT BR 5$ .IF NE BF MOVB E.JNUM(R1),R2 BIT #^C,R2 BNE 3$ .$IMPUR == .+2 MOV $IMPUR-$RMON(R2),R2 BEQ 3$ .ENDC CLR R5 BISB E.CHAN(R1),R5 .IF NE BF CMPB I.CNUM(R2),R5 BLOS 3$ .CNTXT == .+2 CMP @#CNTXT-$RMON,R2 BNE 2$ .IFF .I.CNU == .+2 CMPB @#I.CNUM-$RMON,R5 BLOS 3$ .ENDC CMPB CHNLRG,R5 BEQ 3$ 2$: ASL R5 MOV R5,-(SP) ASL R5 ASL R5 ADD (SP)+,R5 .IF NE BF ADD I.CSW(R2),R5 .IFF .I.CSW == .+2 ADD @#I.CSW-$RMON,R5 .ENDC TST @R5 BPL 3$ MOV C.DEVQ(R5),R2 CLRB R2 BISB @R5,R2 BPL 3$ BIC #301,R2 CMP @.CHKEY,R2 BEQ 4$ 3$: MOV #EMPTY,@R1 4$: ADD R4,R1 BR 1$ 5$: MOV @SP,R1 6$: JSR R5,ENTRY .WORD EMPTY BR CNSLOV MOV R1,R2 ADD R4,R2 BIT #EMPTY,@R2 BEQ 9$ ADD E.LENG(R2),E.LENG(R1) 7$: MOV R2,R5 ADD R4,R5 MOV R1,-(SP) JSR R5,ENTRY .WORD 0 MOV R1,R3 8$: MOV (R5)+,(R2)+ CMP R5,R3 BLOS 8$ MOV (SP)+,R1 BR 6$ 9$: TST E.LENG(R1) BNE 10$ MOV R1,R2 MOV R1,R3 SUB R4,R3 CMP R3,@SP BLO 10$ BIT #PERM,@R3 BNE 7$ 10$: ADD R4,R1 BR 6$ CNSLOV: MOV R1,(PC)+ DREND: .WORD 0 MOV (SP)+,R1 MOV (SP)+,R3 MOV (SP)+,R4 MOV (SP)+,SBLK RTS PC .DSABL LSB .SBTTL LK4DEV - SCAN MONITOR DEVICE TABLES FOR SPECIFIED DEVICE .ENABL LSB LK4DEV:: MOV (R0)+,R5 BEQ RTS4 BCS 2$ .$UNAM == .+2 MOV #$UNAM2-$RMON,R1 MOV #$SLOT+3,R3 1$: DEC R3 BEQ 2$ CMP R5,(R1)+ BNE 1$ MOV $UNAM1-$UNAM2-2(R1),R5 .$PNAM == .+2 2$: MOV #$PNAME-$RMON,R2 CMP -(R2),-(R2) MOV #-2,R3 3$: MOV R5,R1 SUB (R2)+,R1 BLO 4$ BEQ 5$ SUB #<^R 0>,R1 BLO 4$ CMP R1,#7 BLOS 5$ 4$: INC R3 CMP R3,#$SLOT BLT 3$ RTS R4 5$: ASL R3 BPL 6$ .SYIND == .+2 MOV @#SYINDX-$RMON,R3 .$ENTR == .+2 6$: MOV #$ENTRY-$RMON,R5 ADD R3,R5 MOV R5,R2 ADD #$STAT-$ENTRY,R2 TST (R4)+ TST @R5 RTS4: RTS R4 .DSABL LSB .SBTTL COMMAND STRING INTERPRETER .ENABL LSB CSI: .IF EQ MMG$T MOV (PC)+,R2 .STKSV:: .WORD STKSAV-USRBUF 1$: MOV (SP)+,-(R2) CMP R2,.HANSP BHI 1$ ASR @R2 BCS 2$ CLR -(SP) 2$: MOV (SP)+,(PC)+ ORGSPT: .WORD 0 ASL @R2 .ENDC MOV SP,STKLVL .IF NE MMG$T MOV @SP,REG0 GET SP,R0 ADDR STRING+2,R2 GET (R0)+,-(R2) GET (R0)+,-(R2) GET (R0)+,-(R2) CLR ORGSPTR ASR @R2 BCC 3$ MFPI (R0)+ MOV (SP)+,(PC)+ ORGSPT: .WORD 0 3$: ASL @R2 PUT R0,SP MOV R0,UMODSP MOV R0,JOBSTK .ENDC .DSABL LSB .ENABL LSB RESTRT: MOV R4,EMTMOD BNE 2$ MOV #3*400+10,R5 1$: MOV R5,R0 EMT 374 DECB R5 BPL 1$ 2$: BIT #GTLIN$,@#JSW BNE 3$ .STATWD == .+2 TSTB @#STATWD-$RMON BPL 3$ JMP ABORT2 3$: MOV R2,R5 CLR INFLAG MOV STRING,R3 .IF EQ MMG$T BNE 12$ .IFF;EQ MMG$T MOV R3,R0 BEQ 5$ CALL MAPFIL MOV R5,R2 MOV R0,R3 BR 12$ .ENDC .IF EQ BF MOV PC,R0 CMP (R0)+,(PC)+ .ASCII "*"<200> CMP @R2,#2 BHI 51$ MOV DEFEXT,R1 BNE 4$ CMPB (R0)+,(PC)+ 4$: MOV R1,R0 TST @R2 BNE 10$ 51$: .IFF 5$: CMP @R2,#2 BEQ 10$ TST @.JOBNUM BNE 6$ .ENDC BIT #IFRVTTY,@.STATWD BNE 10$ .INBFPT == .+2 MOV @#INBFPT-$RMON,R3 BEQ 6$ MOV .INBFPT,-(SP) CMPB @R3,#-1 BNE 6$ BIC @(SP)+,R3 BIC #IFINP,@.STATWD 6$: CLR CSIBUF-2 MOV R3,INFLAG .IF EQ BF BEQ 10$ BIT #GTLIN$,@#JSW BEQ 9$ MOVB @R3,-(SP) BIC #^C<177>,@SP CMPB (SP)+,#CTRLC BNE 9$ TSTB (R3)+ BPL 7$ BIS #IFRVTTY,@.STATWD 7$: BIS #IFGTCC,@.STATWD 8$: TSTB (R3)+ BNE 8$ MOV R3,@(SP)+ BR RESTRT 9$: CMPB #<177>,@R3 BEQ 913$ TSTB @R3 BPL 12$ 913$: BIT #,@.STATWD BNE 12$ .ENDC 10$: .IF EQ BF .IF NE BATC$H MOV .$ENTR,R1 MOV BA.NUM(R1),R1 BEQ 11$ TST BATSW$(R1) BNE 12$ .ENDC 11$: .PRINT ..ECSI::MOV R5,R5 .ENDC 12$: MOV #CSIBFL,R1 CLR R4 13$: .IF EQ MMG$T TST R3 .IFF TST STRING BNE 14$ TST INFLAG .ENDC BEQ 18$ 14$: MOVB (R3)+,R0 BIC #^C<177>,R0 BEQ 19$ 15$: CMP @R5,#2 BLOS 17$ CMP #EQUALS,R0 BEQ 16$ CMP #LANGLE,R0 BNE 17$ INC R0 16$: COM R4 BNE 17$ CLR R1 17$: DEC R1 BLE 171$ MOVB R0,-(R2) 171$: CMP #CTRLC,R0 BEQ 19$ BR 13$ .MCALL .TTINR 18$: .TTINR MOV R5,R5 BCS 18$ CMP #CR,R0 BEQ 18$ CMP #LF,R0 BNE 15$ 19$: MOV INFLAG,R0 BEQ 21$ MOV R3,@(SP)+ MOVB @R0,R3 BPL 20$ BIT #IFEKO$,@.STATWD BNE 20$ BICB #200,@R0 .PRINT 20$: CMPB CSIBUF-1,#CTRLC BNE 21$ ABORT2: BIS SP,R0 .IF NE BF BIS #IFCTLC,@.STATWD .ENDC .EXIT PRERR: CSIERR ,2 21$: TST R1 BLE SYNBLE .DSABL LSB .SBTTL GET FILE DESCRIPTORS AND OPEN FILES .ENABL LSB CSI2: CLRB -(R2) MOV ORGSPT,R0 BEQ 2$ MOV R5,R3 .IF NE MMG$T CALL MAPFIL .ENDC 1$: MOVB -(R3),(R0)+ BNE 1$ 2$: MOV @R5,R2 CMP R2,#2 BHI 3$ JRETRN: JMP RETURN SPECAL: CALL GETFD TST R4 BEQ SWITLK TST @R0 BEQ 8$ CALL OUSTF1 8$: TST (R2)+ .IF EQ MMG$T SWITLK: BR SWITCH .IFF SWITLK: JMP SWITCH .ENDC 3$: MOV R2,REG0 .IF NE MMG$T MOV R2,(PC)+ VHNSPC: .WORD 0 .ENDC TST EMTMOD BEQ 5$ .IF NE MMG$T MOV R2,R0 CALL MAPFIL MOV R0,R2 MOV R0,VHNSPC .ENDC MOV #39.,R1 MOV R2,R3 4$: CLR (R3)+ SOB R1,4$ 5$: CLR R3 CLR SWTCNT .IF NE MMG$T ADDR DEFBLK+10,R0 MOV DEFEXT,R1 ADD #4*2,R1 MOV #4,-(SP) 6$: GET -(R1),-(R0) DEC @SP BNE 6$ TST (SP)+ MOV R0,(PC)+ VDFEXT: .WORD 0 .ENDC TST R4 BNE GETDE STRTIN: MOV #3,R3 .IF EQ MMG$T MOV HANSPC,R2 .IFF MOV VHNSPC,R2 .ENDC ADD #<5*2>*3,R2 CLR R4 GETDE: .IF EQ MMG$T MOV DEFEXT,R1 .IFF;EQ MMG$T MOV VDFEXT,R1 .ENDC MOV #<^RDK >,DEV1 NXTFIL: CMP #9.,R3 SYNBLE: BLE SYNERR NXT1: TST R4 BEQ 7$ TST (R1)+ 7$: TST (PC)+ EMTMOD:: .WORD 0 BNE SPECAL MOV (PC)+,R2 .FILDE:: .WORD FILDES-USRBUF CALL GETFD TST @R0 BEQ SWITCH MOV R0,-(SP) MOV REG0,-(SP) EMT 343 BCS HANERR MOV R0,REG0 MOV R0,HANSPC MOV (SP)+,R0 TST R4 BEQ INFILE CALL OUSTUF MOV @R2,-(SP) MOV #EMT+40,-(SP) ADD R3,@SP MOV (SP)+,@PC HALT BCC SWITCH CMPB #1,@#ERRBYT BNE PRERR CSIERR ,3 INFILE: MOV #EMT+20,-(SP) ADD R3,@SP MOV (SP)+,@PC HALT BCC SWITCH CSIERR ,4 .DSABL LSB .SBTTL GET SWITCHES NOSWIT: INC R3 CMPB @R5,#COMMA BEQ NXTFIL CMPB @R5,#EQUALS BEQ STRTIN MOV (PC)+,-(SP) SWTCNT: .WORD 0 .IF NE MMG$T CALL PUSHSP .ENDC TSTB @R5 BEQ RETURN SYNERR: CSIERR ,0 .IF EQ MMG$T SWITCH: CMPB #SLASH,@R5 BNE NOSWIT MOV R3,-(SP) SWAB @SP MOVB -(R5),@SP BEQ SYNERR INC SWTCNT CMPB #'a,@SP BHI 1$ CMPB #'z,@SP BLO 1$ BICB #40,@SP 1$: CMPB #COLON,-(R5) BNE SWITCH MOV @SP,-(SP) BPL 2$ INC SWTCNT MOV @SP,-(SP) 2$: BIS #100000,@SP MOV R2,-(SP) MOV R5,R0 CALL DECNUM CMPB #PERIOD,@R5 BEQ 5$ CMPB -(R0),(R5)+ BNE 3$ MOV SP,R2 .IF EQ GT$NM CALL @.GTNM1 .IFF;EQ GT$NM CALL GETNM1 .ENDC BR 4$ 3$: MOV R0,R5 CMPB (SP)+,(R5)+ CALL OCTNUM 4$: INC R5 5$: MOV (SP)+,4(SP) MOV (SP)+,R2 BR 1$ HANERR: CSIERR ,1 .IFF .ENABL LSB 1$: TST R0 BMI SWITCH MOV R0,-(SP) CALL PUSHSP INC SWTCNT SWITCH: CMPB @R5,#SLASH BNE NOSWIT MOVB -(R5),R0 BEQ SYNERR CMPB #'a,R0 BHI 11$ CMPB #'z,R0 BLO 11$ BICB #40,R0 11$: SWAB R0 ADD R3,R0 SWAB R0 DEC R5 2$: CMPB @R5,#COLON BNE 1$ CMPB #'A-1,-1(R5) BLO 5$ MOV R5,-(SP) CALL DECNUM DEC R5 CMPB 1(R5),#PERIOD BEQ 4$ TST (SP)+ MOV @SP,R5 3$: CALL OCTNUM 4$: MOV (SP)+,@SP CALL PUSHSP BR 6$ HANERR: CSIERR ,1 5$: MOV R2,-(SP) MOV SP,R2 MOV @SP,-(SP) MOV R0,-(SP) .IF EQ GT$NM CALL @.GTNM1 .IFF;EQ GT$NM CALL GETNM1 .ENDC MOV (SP)+,R0 MOV (SP)+,R2 CALL PUSHSP 6$: BIS #100000,R0 MOV R0,-(SP) CALL PUSHSP INC SWTCNT BR 2$ .DSABL LSB .ENDC SYNELK: BR SYNERR .SBTTL RETURN AND ERROR PROCESSING .ENABL LSB MSG: MOV (PC)+,SP STKLVL: .WORD 0 .IF NE MMG$T MOV UMODSP,JOBSTK .ENDC TSTB @#ERRBYT BMI CSIER1 MOVB (R0)+,@#ERRBYT TST STRING BNE CSIER1 JSR R0,1$ .ASCII "?CSI-F-"<200> .EVEN 1$: .PRINT MOV (SP)+,R0 .PRINT TST (PC)+ INFLAG: .WORD 0 BEQ CSRTRY BIS #IFABRT,@.STATWD .EXIT CSIER1: .IF EQ MMG$T BIS #1,SAVSTK .IFF BIS #1,SAVEST+4(SP) .ENDC RETURN: .IF EQ MMG$T MOV #8.,R2 MOV (PC)+,R1 .SVSTK:: .WORD SAVSTK-USRBUF 2$: MOV (R1)+,-(SP) SOB R2,2$ .IFF CLR R2 MOV REG0,(SP) PUT JOBSTK,SP .ENDC .IF NE BF MOV @.CNTXT,-(SP) BIC #CSIRN$,@(SP)+ .ENDC JMP @.MONOU CSRTRY: MOV (PC)+,R2 .HANSP:: .WORD HANSPC-USRBUF .IF EQ BF MOV EMTMOD,R4 JMP RESTRT .IFF .IF EQ MMG$T MOV ORGSPT,-(SP) BEQ 4$ INC @R2 3$: TST -(SP) 4$: MOV (R2)+,@SP CMP R2,.STKSV BLO 3$ .IFF;EQ MMG$T MOV (PC)+,R0 UMODSP: .WORD 0 TST ORGSPT BEQ 4$ PUT ORGSPT,-(R0) INC @R2 4$: PUT (R2)+,-(R0) PUT (R2)+,-(R0) PUT (R2)+,-(R0) PUT R0,SP .ENDC MOV EMTMOD,R4 .CSIER == .+2 JMP @#CSIERR-$RMON .ENDC .DSABL LSB .SBTTL OUSTUF .ENABL LSB OUSTF1: .IF NE MMG$T MOV R0,-(SP) MOV (R0)+,FILDES MOV @R0,FILDES+2 ADDR FILDES,R0 BR 7$ .ENDC OUSTUF: MOV R0,-(SP) 7$: TST 2(R0) BNE 1$ MOV (PC)+,-(SP) .DVSTS:: .WORD DEVSTS-USRBUF EMT 342 BCS HANERR TST @R0 BMI SYNELK 1$: CLR @R2 CMPB @R5,#LBRACK BNE 3$ CALL DECNUM CMPB @R5,#RBRACK BNE SYNELK DEC R5 MOV (SP)+,@R2 3$: MOV (SP)+,R0 RTS PC .IF NE MMG$T PUSHSP: SUB #2,JOBSTK PUT JOBSTK,SP PUT 2(SP),@JOBSTK MOV (SP)+,@SP RTS PC .ENDC .SBTTL GET FILE DESCRIPTOR SUBROUTINE GETFD:: MOV R2,-(SP) CLR (R2)+ CALL GETNAM BEQ 5$ CMPB @R5,#COLON BNE 4$ TST 2(R2) BNE 4$ MOV @R2,DEV1 CALL GETNAM 4$: MOV (PC)+,-(R2) DEV1:: .RAD50 "DK" ADD #3*2,R2 MOV @R1,@R2 CMPB @R5,#PERIOD BNE 6$ .IF EQ GT$NM .GTNM1 == .+2 CALL @#GTNM1-$RMON .IFF;EQ GT$NM CALL GETNM1 .ENDC TST -(R2) 5$: CMP (R2)+,(R2)+ 6$: TST (R2)+ BR 3$ .DSABL LSB .SBTTL GET NAME SUBROUTINE .IF EQ GT$NM GETNAM::MOV EMTMOD,@.EMTMO .GETNM == .+2 JMP @#GETNM-$RMON .EMTMO == . .WORD EMTMO1-$RMON .PSECT USRRMN GETNM:: CALL GTNM1 .IFF;EQ GT$NM GETNAM::CALL GETNM1 .IFTF;EQ GT$NM CMP (R2)+,(R2)+ INC R5 .IFT;EQ GT$NM GTNM1:: .IFF;EQ GT$NM GETNM1:: .IFTF;EQ GT$NM DEC R5 MOV #3,R0 CLR @R2 1$: DEC R0 JSR R0,4$ 2$: .ASCII "%%" .ASCII "**" .ASCII "09" .ASCII "AZ" .BYTE 'A+40,'Z+40 3$: .WORD -11 .WORD -15 .WORD -22 .WORD -100 .WORD -140 4$: CLR -(SP) 5$: CMPB (R0)+,@R5 BHI 7$ CMPB (R0)+,@R5 BLT 5$ CMPB -(R0),-(R0) BNE 6$ .IFT;EQ GT$NM TST #.-. EMTMO1 == .-2 .IFF;EQ GT$NM TST EMTMOD .IFTF;EQ GT$NM BEQ 7$ 6$: MOVB @R5,@SP ADD 3$-2$(R0),@SP DEC R5 7$: ASL @R2 ASL @R2 ASL @R2 ADD @R2,@SP ASL @R2 ASL @R2 ADD (SP)+,@R2 MOV (SP)+,R0 BNE 1$ TST -(R2) RTS PC .IFT;EQ GT$NM .PSECT RMNUSR .ENDC .SBTTL OCTAL/DECIMAL CONVERSION ROUTINE .IF EQ CVT$NU .$OCTN==.+2 OCTNUM::JMP @#$OCTNUN-$RMON .$DECN==.+2 DECNUM::JMP @#$DECNUN-$RMON .$CVTN==.+2 CVTNUM::JMP @#$CVTNUN-$RMON .PSECT USRRMN .IFTF;EQ CVT$NU .ENABL LSB .IFF;EQ CVT$NU OCTNUM::TST (PC)+ DECNUM::SEC CVTNUM::MOV @SP,-(SP) .IFT;EQ CVT$NU $OCTNUM::TST (PC)+ $DECNUM::SEC $CVTNUM::MOV @SP,-(SP) .IFTF;EQ CVT$NU MOV R3,-(SP) MOV R4,-(SP) MOV #100004,-(SP) ADC @SP CMPB -(R5),#MINUS BNE 1$ ADD #140000,@SP 1$: ASL @SP ADC R5 CLR R4 2$: MOVB -(R5),R3 SUB #'0,R3 CMPB R3,@SP BHIS 4$ ASL R4 CMPB @SP,#10. BNE 3$ ADD R4,R3 3$: ASL R4 ASL R4 ADD R3,R4 BR 2$ 4$: TST (SP)+ BPL 5$ NEG R4 5$: MOV R4,6(SP) MOV (SP)+,R4 MOV (SP)+,R3 RTS PC .DSABL LSB .IFT;EQ CVT$NU .PSECT RMNUSR .ENDC;EQ CVT$NU .SBTTL DRCALL -- call handler entry points .PSECT USRRMN .ENABLE LSB .MCALL .CKXX .CKXX SP S.BEG=1000 DRCALL:: CK.SP=S.BEG MOV R5,-(SP) CK.SP ,-2,S.R5 MOV R4,-(SP) CK.SP ,-2,S.R4 MOV R3,-(SP) CK.SP ,-2,S.R3 MOV R2,-(SP) CK.SP ,-2,S.R2 MOV R1,-(SP) CK.SP ,-2,S.R1 MOV R0,-(SP) CK.SP ,-2,S.R0 .ADDR #DRREAD,R4 MOV GETVEC,DRGVEC CMP R1,#12 BNE 10$ MOV R0,R4 MOV R5,DRGVEC 10$: MOV R3,R5 TST R1 BNE 20$ TST KMONIN BEQ 20$ MOV #4,R1 20$: MOV R1,R3 MOV @R5,R0 MOV 4(R0),R0 CMP #240,R0 BHI 50$ CMP #277,R0 BLO 50$ ASR R1 .ADDR #DRTABL,R1,ADD BITB @R1,R0 BEQ 50$ CLR BLKEY MOV $DVREC-$ENTRY(R5),R0 DEC R0 MOV #256.,R1 MOV $USRLC,R2 CALL @R4 BCS 60$ MOV R2,R1 CMP (R1)+,#^rHAN BNE 50$ ADD R3,R1 CMP R3,#10 BLO 30$ SUB #6,R1 30$: MOV @R1,R0 BEQ 50$ CMP R0,#1000 BLO 40$ MOV R0,-(SP) CK.SP ,-2 ROR R0 SWAB R0 BIC #^c377,R0 ADD $DVREC-$ENTRY(R5),R0 DEC R0 MOV #2*256.,R1 CALL @R4 MOV (SP)+,R0 CK.SP ,+2 BCS 60$ BIC #^c777,R0 40$: ADD R2,R0 MOV #$SLOT*2,R2 .IF NE MMG$T MOV @#PS,R1 BIC #PMODE!CMODE,@#PS MOV R1,-(SP) CK.SP ,-2,S.PS CK.SP S.PS BIC #1,@SP .IFTF MOV #.-.,R1 DRGVEC =:.-2 CALL @R0 .IFT CK.SP S.PS ADC @SP CK.SP S.PS,+2 MOV (SP)+,@#PS .ENDC BCC 50$ CK.SP S.R0 MOV R0,@SP BR 70$ 50$: TST (PC)+ 60$: CK.SP S.R0 BIC @SP,@SP 70$: CK.SP S.R0,+2 MOV (SP)+,R0 CK.SP S.R1,+2 MOV (SP)+,R1 CK.SP S.R2,+2 MOV (SP)+,R2 CK.SP S.R3,+2 MOV (SP)+,R3 CK.SP S.R4,+2 MOV (SP)+,R4 BR 80$ DRREAD: MOV R5,-(SP) .ADDR #DRCNT+2,R5 CK.R5=DRCNT+2 MOV R1,-(R5) CK.R5 DRCNT,-2 MOV R2,-(R5) CK.R5 DRBUF,-2 CK.R5 DRIOB .IF EQ MMG$T CALL $SYS .IFF;EQ MMG$T MOV $USRLC,-(SP) ADD #$SYS.KM-RMNUSR,@SP CALL @(SP)+ .ENDC;EQ MMG$T 80$: CK.SP S.R5,+2 MOV (SP)+,R5 CK.SP S.BEG RETURN .DSABL LSB DRTABL: .BYTE 001 .BYTE 002 .BYTE 004 .BYTE 010 .BYTE 002 .BYTE 004 .EVEN DRIOB: DRBUF: .BLKW 1 DRCNT: .BLKW 1 .WORD 0 .PSECT RMNUSR .SBTTL LINE BUFFER AND STACK SAVE AREA FNAME: BSS 4 .IF NE MMG$T JOBSTK: .WORD 0 .ENDC DEVSTS::.BLKW 4 .IIF NDF CSIBFL, CSIBFL = 81. .BLKB CSIBFL .EVEN CSIBUF: HANSPC: .WORD 0 DEFEXT: .WORD 0 STRING: .WORD 0 .IF NE MMG$T DEFBLK: .WORD 0,0,0,0 .ENDC .IF EQ MMG$T SAVSTK: .BLKW 7 .ENDC REG0: .WORD 0 STKSAV: FILDES: .BLKW 5 .SBTTL FINAL SIZE CHECKS AND ADJUSTMENTS USRSZ == . - USRBUF + 777 / 1000 USRSIZE == USRSZ * 1000 USRLEN == USRSZ * 400 $USIZ$ == .-USRBUF/2 .IF EQ MMG$T .IF NE USRSZ-10 .ERROR .-USRBUF-10000/2 .ENDC .ENDC . = USRBUF + USRSIZE SWAPSZ == 27. .IIF DF NLUSR, .LIST .MCALL .MODULE .MODULE XMSUBS,VERSION=28,COMMENT= ; COPYRIGHT (c) 1984, 1985, 1986 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. .SBTTL XM DEFINITIONS XE.WAE = 0 XE.TMW = 1 XE.ILR = 2 XE.ILW = 3 XE.OFF = 4 XE.NMP = 5 XE.TMR = 6 XE.SIZ = 7 XE.ISZ = 10 XE.DEA = 11 XE.NGR = 12 XE.TMG = 13 XE.RIU = 14 XE.PRV = 15 XE.RNA = 16 .SBTTL XM DATA AREA .PSECT XMSUBS $XMSIZ::.WORD 0 $XMPTR::.WORD 1600 .REPT 9. .WORD 0,0 .ENDR .WORD -1 $GLRCB: .REPT X$RCBS-1 .WORD 0,0,0,0,0 .ENDR .WORD 200,177600,GR.NRF!GR.PRM .RAD50 /IOPAGE/ .WORD -1 .SBTTL INTERCEPT DEVICE INTERRUPTS AND FORCE KERNEL MAPPING .IF NE XM$FET .ENABL LSB INTPRO::MOV @#PS,-(SP) MOV @2(SP),2(SP) CMP @#KISAR1,#200 BNE 10$ .IF NE MQH$P2 CMP @#KISAR2,#400 BNE 10$ .ENDC MOV (SP)+,@#PS JMP @(SP)+ 10$: MOV @#KISAR1,-(SP) MOV #200,@#KISAR1 .IF NE MQH$P2 MOV @#KISAR2,-(SP) MOV #400,@#KISAR2 .ENDC MOV @#PS,-(SP) .IF NE MQH$P2 MOV 6(SP),@#PS CALL @10(SP) .IFF MOV 4(SP),@#PS CALL @6(SP) .ENDC .BR RTIRTI RTIRTI: .IF NE MQH$P2 MOV (SP)+,@#KISAR2 .ENDC MOV (SP)+,@#KISAR1 ADD #4,SP RTI .SBTTL SET UP AN ENTRY IN THE $DVINT TABLE .ENABL LSB INTSET::MOV R1,-(SP) MOV 4(SP),R1 .IF EQ MQH$P2 CMP R1,#40000 .IFF CMP R1,#60000 .ENDC BHIS 30$ ADD R2,R1 CMP R1,#20000 BLOS 30$ .BR INTFIL INTFIL: ADDR $DVINT,R1 ADD #4,R1 10$: TST @R1 BEQ 20$ CMP @R1,#-1 BEQ 40$ ADD #6,R1 BR 10$ 20$: MOV -(R5),@R1 SUB #4,R1 MOV R1,(R5)+ 30$: TST (PC)+ 40$: SEC MOV (SP)+,R1 RETURN .DSABL LSB .SBTTL RELEASE ENTRY FROM INTERRUPT FORWARDING TABLE INTRLS::JSR R3,SAVE30 CALL KPSAVE MOV @R5,R0 BEQ 100$ SUB #6,R0 CLR @R5 CLR R1 MOV (R0)+,R3 BEQ 100$ BPL 30$ ASL R3 ADD R3,R0 MOV (R0)+,R3 BPL 20$ MOV (R0)+,-(SP) CALL @GETVEC MOV (SP)+,R1 BCS 100$ 10$: MOV (R0)+,R3 20$: ADD R1,R3 BLE 100$ CALL INTCTE CMP (R0)+,(R0)+ BR 10$ 30$: CALL INTCTE 100$: CALL KPREST RETURN INTCTE: ADDR $DVINT,R2 CMP @R3,R2 BLO 10$ ADD #$DVITT-$DVINT,R2 CMP @R3,R2 BHIS 10$ MOV @R3,R3 CLR 4(R3) 10$: RETURN .ENDC .SBTTL POOL MEMORY ALLOCATION ROUTINE .ENABL LSB PL10WD::ASL R0 BCS 3$ PL5WD:: MUL #10.,R0 TST R0 BNE 3$ MOV R1,R0 BR 1$ GTPOOL = 500 PLBYTE::CLR R1 1$: INC R0 BEQ 3$ BIC #1,R0 BIT #VRUN$,@CNTXT BEQ 3$ MOV #GTPOOL,-(SP) TST JOBNUM BEQ 2$ MOV CNTXT,@SP ADD #FMPUR+77,@SP BIC #77,@SP 2$: CALLR @(SP)+ 3$: SEC RETURN .DSABL LSB .SBTTL SET DEFAULT PAR 1 MAPPING ROUTINES KPSAVE::MOV (SP),-(SP) .IF NE MQH$P2 MOV (SP),-(SP) MOV @#KISAR1,2(SP) MOV @#KISAR2,4(SP) MOV #400,@#KISAR2 .IFF MOV @#KISAR1,2(SP) .ENDC P1SD:: MOV #200,@#KISAR1 RETURN KPREST::MOV 2(SP),@#KISAR1 .IF NE MQH$P2 MOV 4(SP),@#KISAR2 MOV (SP)+,@SP .ENDC MOV (SP)+,@SP RETURN .SBTTL MEMORY TO MEMORY BLOCK MOVE ROUTINE $BLKMV::MOV @#KISAR1,-(SP) MOV @#UISAR1,-(SP) MOV @#UISDR0+2,-(SP) MOV @#PS,-(SP) MOV #PMODE,@#PS MOV #77406,@#UISDR0+2 10$: MOV R1,@#KISAR1 MOV R3,@#UISAR1 MOV #32.,R0 CMP R5,R0 BHIS 30$ MOV R5,R0 30$: SUB R0,R5 40$: PUT (R2)+,(R4)+ SOB R0,40$ TST R5 BEQ 100$ INC R1 INC R3 SUB #64.,R2 SUB #64.,R4 BR 10$ 100$: MOV (SP)+,@#PS MOV (SP)+,@#UISDR0+2 MOV (SP)+,@#UISAR1 MOV (SP)+,@#KISAR1 RETURN .SBTTL EXECUTE CODE CLEAR OF PAR 1 .ENABL LSB $XDEPT: JMP XDEALC .ASSUME $XDEPT EQ $P1EXT-18. $CVPPT: JMP $USRPH .ASSUME $CVPPT EQ $P1EXT-14. $FGRPT: JMP FINDGR .ASSUME $FGRPT EQ $P1EXT-10. $XALPT: JMP XALLOC .ASSUME $XALPT EQ $P1EXT-6 $BLMPT: BR $BLKMV .ASSUME $BLMPT EQ $P1EXT-2 $P1EXT::MOV @#KISAR1,-(SP) MOV R1,-(SP) MOV R2,-(SP) MOV SP,R1 SUB (R0)+,SP MOV SP,R2 10$: MOV (R0)+,(R2)+ CMP R2,R1 BNE 10$ MOV -(R2),@#KISAR1 MOV (PC)+,@R2 RETURN MOV (R1)+,R2 MOV R1,-(SP) MOV @R1,R1 CALL 2(SP) MOV @SP,SP TST (SP)+ MOV (SP)+,@#KISAR1 RTS R0 .SBTTL INTERCEPT BPT, IOT, TRAP, MMU TRAPS IN KERNEL MODE .ENABL LSB .IF NE MPT$Y TRPXMP::MFPI @#V.MPTY+2 MFPI @#V.MPTY MOV #MPAR.E,-(SP) BIT #WINDW$,@CNTXT BEQ 3$ PUT #0,@#V.MPTY BR 2$ .ENDC TRAPBP::MFPI @#V.BPT+2 MFPI @#V.BPT BR 1$ TRAPIO::MFPI @#V.IOT+2 MFPI @#V.IOT BR 1$ TRAPTR::MFPI @#V.TRAP+2 MFPI @#V.TRAP 1$: MOV #ISST.E,-(SP) BR 2$ TRAPMM::TST INTLVL BPL 4$ .ROM INC MMUFLT,VALUE=-1 BGT 4$ MFPI @#V.MMU+2 MFPI @#V.MMU DEC MMUFLT MOV #MMUF.E,-(SP) BIT #WINDW$,@CNTXT BEQ 3$ PUT #0,@#V.MMU 2$: TST 2(SP) BEQ 3$ BIT #1,2(SP) BNE 3$ .BR XMRERT XMRERT::MOV R0,@SP GET SP,R0 SUB #4,R0 PUT R0,SP PUT 6(SP),(R0)+ PUT 10(SP),(R0)+ SPL 0 MOV (SP)+,R0 MOV (SP)+,2(SP) BIS #CMODE+PMODE,@SP MOV (SP)+,2(SP) RTI 3$: SPL 0 MOV (SP)+,R3 CMP (SP)+,(SP)+ MOV (SP)+,R4 TST (SP)+ JMP ERRCOM 4$: JMP FATAL .DSABL LSB .SBTTL FIXTRP - FIX RMON KERNEL MODE VECTORS FOR BPT, TRAP, MMU .ENABL LSB FIXTRP::JSR R5,1$ TRPLST::.WORD TRAPBP,PR7 .WORD TRAPIO,PR7 .WORD TRAPTR,PR7 .WORD TRAPMM,PR7 1$: MOV #V.BPT,R2 MOV (R5)+,(R2)+ MOV (R5)+,(R2)+ MOV (R5)+,(R2)+ MOV (R5)+,(R2)+ MOV #V.TRAP,R2 MOV (R5)+,(R2)+ MOV (R5)+,(R2)+ MOV #V.MMU,R2 MOV (R5)+,(R2)+ MOV @R5,@R2 MOV (SP)+,R5 RETURN .DSABL LSB .SBTTL $RELOK - CONVERT KERNEL VIRTUAL ADDRESS TO PAR1 VALUE & ADDRESS .ENABL LSB $RELOK::MOV #KISAR0,-(SP) BR 1$ .SBTTL $RELOC - CONVERT USER VIRTUAL ADDRESS TO PAR1 VALUE & ADDRESS $RELOC::MOV #UISAR0,-(SP) 1$: MOV R0,R1 CLR R2 ASL R1 ROL R2 ASL R1 ROL R2 ASL R1 ROL R2 ASL R2 ADD (SP)+,R2 CLRB R1 SWAB R1 ROR R1 ADD @R2,R1 MOV R0,R2 BIC #^C<77>,R2 BIS #20000,R2 RETURN .DSABL LSB $KADR:: MOV R0,R2 BIT #WINDW$,@CNTXT BEQ 1$ BIT #VRUN$,@CNTXT BNE 2$ ADD #V.MAX,R2 CMP R2,$USRLC BHIS 2$ 1$: TST (PC)+ 2$: SEC RETURN $U2P1:: CALL $USRPH BCS 1$ CMP #17777,R2 BHIS 1$ CMP R2,#40000 1$: RETURN $USRPH::CALL $RELOC .BR $CNPHY $CNPHY: ASL R2 ASL R2 ASL R2 ASR R2 ROR R1 RORB R2 ASR R1 RORB R2 SWAB R2 BISB R1,R2 SWAB R2 CLRB R1 ASR R1 ASR R1 ASR R1 ASR R1 SEC BNE 1$ CMP #157777,R2 1$: RETURN $MPPHY::MOV @SP,-(SP) MOV @SP,-(SP) MOV R1,-(SP) MOV R2,-(SP) MOV Q.PAR-Q.BUFF(R5),R1 MOV (R5)+,R2 CALL $CNPHY MOV R1,10(SP) MOV R2,6(SP) MOV (SP)+,R2 MOV (SP)+,R1 RETURN $GETBYT:: MOV @SP,-(SP) MOV @SP,-(SP) CALL XIOSUB MOVB @Q.BUFF-Q.BLKN(R4),10(SP) RETURN $PUTBYT:: CALL XIOSUB MOVB 6(SP),@Q.BUFF-Q.BLKN(R4) RETURN $PUTWRD:: CALL XIOSUB MOV 6(SP),@Q.BUFF-Q.BLKN(R4) INC Q.BUFF-Q.BLKN(R4) RETURN XIOSUB: MOV @SP,-(SP) MOV @#KISAR1,2(SP) MOV Q.PAR-Q.BLKN(R4),@#KISAR1 CALL @(SP)+ MOV (SP)+,@#KISAR1 MOV (SP)+,@SP INC Q.BUFF-Q.BLKN(R4) BIT #40000,Q.BUFF-Q.BLKN(R4) BEQ 1$ SUB #20000,Q.BUFF-Q.BLKN(R4) ADD #200,Q.PAR-Q.BLKN(R4) 1$: RETURN REGABT::JSR R3,SAVE30 MOV R5,R3 ADD #I.RGN,R3 MOV #R.GNUM,-(SP) 1$: TST R.BSIZ(R3) BEQ 2$ CMP #1600,@R3 BHI 2$ CALL ELRG 2$: ADD #R.BLGH,R3 DEC @SP BNE 1$ TST (SP)+ RETURN .ENABL LSB ACHBK2::MOV #2*2,R1 ACHBKM::CALL ACHBK BCS 1$ .BR $RELOM $RELOM::CALL $RELOC MOV R1,@#KISAR1 MOV R2,R0 1$: RETURN .SBTTL ACHJBM - ADDRESS CHECK 3 WORD USER VIRTUAL RANGE, MAP TO IT ACHJBM::MOV #3*2,R1 CALL ACHBKM BCC 1$ JMP ADERR .DSABL LSB .SBTTL ACHBK - CHECK USER VIRTUAL ADDRESS RANGE FOR VALIDITY ACHBK:: TST R1 BEQ 1$ DEC R1 BIC #1,R1 1$: ADD R0,R1 BCS 5$ MOV CNTXT,R2 BIT #WINDW$,@R2 BEQ 5$ BIT #BATRN$,@CNTXT BNE 5$ MOV I.WPTR(R2),R2 MOV (R2)+,-(SP) 2$: TST (R2)+ BEQ 3$ CMP R0,@R2 BLO 3$ CMP W.BHVR-W.BLVR(R2),R1 BHIS 4$ 3$: ADD #W.BLGH-2,R2 DEC @SP BGT 2$ SEC 4$: INC (SP)+ 5$: RETURN .SBTTL MAPWN - MAP A VIRTUAL ADDRESS WINDOW TO PHYSICAL MEMORY MAPWN:: .ASSUME W.BLPD EQ W.BLGH-2 ADD #W.BLPD,R4 MOV W.BRCB-W.BLPD(R4),R3 BEQ 3$ .ASSUME W.BOFF EQ W.BLPD-4 CMP -(R4),-(R4) MOV @R3,R0 ADD (R4)+,R0 .ASSUME W.BFPD EQ W.BOFF+2 MOVB (R4)+,R1 .ASSUME W.BNPD EQ W.BFPD+1 MOVB (R4)+,R3 BR 2$ 1$: BIS #177*400,(R1)+ 2$: MOV R0,UISAR0-UISDR0(R1) ADD #200,R0 .ASSUME W.BLPD EQ W.BNPD+1 MOV @R4,@R1 SOB R3,1$ .ASSUME W.BLGH EQ W.BLPD+2 3$: TST (R4)+ RETURN .SBTTL MAPLO - SET USER MAPPING REGISTERS IDENTICAL TO KERNEL MAP MAPLO:: MOV #KISAR0,R0 MOV #UISAR0,R1 MOV #UISDR0,R2 MOV #77406,@R2 MOV (R2)+,@R2 MOV (R0)+,(R1)+ MOV #200,(R1)+ TST (R0)+ CALL @PC MOV (R2)+,@R2 MOV (R2)+,@R2 MOV (R2)+,@R2 MOV (R0)+,(R1)+ MOV (R0)+,(R1)+ MOV (R0)+,(R1)+ RETURN .SBTTL CLRPDR - CLEAR USER PDRS (ERASE PREVIOUS USER MAPPING) CLRPDR::MOV #UISDR0,R0 CALL @PC CLR (R0)+ CLR (R0)+ CLR (R0)+ CLR (R0)+ RETURN .SBTTL .ASTX - AST EXIT ROUTINE .ENABL LSB A$STX:: MOV SP,R2 ADD #SAVEST+2,R2 TST JOBNUM BNE 1$ TST KMONIN BEQ 1$ TST @SP BNE 2$ 1$: TST @R5 BPL 5$ MOV PC,@R2 ADD #$CRTR2-.,(R2)+ BR 4$ 2$: ADDR RDOVLY,R3 CMP #-1,@SP BNE 3$ ADD #ENTRPG-RDOVLY,R3 3$: MOV R3,(R2)+ BIT #VIRT$,@#JSW BEQ 4$ BIS #WINDW$,@R5 4$: MOV #PMODE,@R2 GOERTI: JMP EMTRTI 5$: JMP GOEXIT .DSABL LSB .SBTTL PLAS DIRECTIVE DISPATCH P$LAS:: CMP #PLASMX,R4 BLOS 4$ MOV #R.RLGH,R1 CMP #4,R4 BHI 1$ MOV #W.NLGH,R1 1$: CALL ACHBKM BCS 5$ ADDR 6$,R4,ADD MOV @#SYSPTR,R3 ADD @R4,R3 ENSYS 3$ CALL @R3 BCC 2$ INC 10(SP) 2$: RETURN 3$: BCC GOERTI MOVB R1,@#ERRBYT BIS #1,OLDPS(SP) BR GOERTI 4$: JMP TOOBIG 5$: JMP ERRARG 6$: .WORD C$RRG - $RMON .WORD E$LRG - $RMON .WORD C$RAW - $RMON .WORD E$LAW - $RMON .WORD M$AP - $RMON .WORD U$NMAP - $RMON .WORD G$MCX - $RMON PLASMX = <. - 6$> .SBTTL .CRAW - CREATE VIRTUAL ADDRESS WINDOW EMT C$RAW: MOV I.WPTR(R5),R4 MOV (R4)+,R1 MOV (R0)+,R2 CLRB R2 CMP R2,#7*400 BHI 6$ ASR R2 MOV R2,@R0 ASR @R0 ASR @R0 SWAB (R0)+ TST @R0 BEQ 6$ MOV R2,-(SP) ADD @R0,@SP BCS 5$ CMP @SP,#2000 BHI 5$ CMP -(R0),-(R0) BIC #WS.CRW!WS.UNM!WS.ELW,W.NSTS(R0) MOV R1,-(SP) BIT #WINDW$,@R5 BNE 1$ ADD #W.BLGH,R4 DEC R1 1$: TST W.BSIZ(R4) BEQ 2$ MOV W.BLVR(R4),R3 SWAB R3 ASL R3 ASL R3 CMP 2(SP),R3 BLOS 3$ ADD W.BSIZ(R4),R3 CMP R2,R3 BHIS 3$ CMP R1,@SP BEQ 4$ CALL ELAW 2$: TST @SP BEQ 3$ CMP (R0)+,(R0)+ MOV @R0,W.BSIZ(R4) MOV -(R0),W.BLVR(R4) MOVB -(R0),R3 ASL R3 ADD #UISDR0,R3 MOVB R3,W.BFPD(R4) MOVB @SP,-(R0) SUB R1,@R0 CLR @SP 3$: ADD #W.BLGH,R4 DEC R1 BNE 1$ MOV (SP)+,(SP)+ BNE 7$ BIS #WS.CRW,W.NSTS(R0) BIT #WS.MAP,W.NSTS(R0) BNE M$AP RETURN 4$: TST (SP)+ 5$: TST (SP)+ 6$: CLR R1 .ASSUME XE.WAE EQ 0 BR 8$ 7$: INC R1 .ASSUME XE.TMW EQ 1 8$: SEC RETURN .SBTTL ELIMINATE ADDRESS WINDOW E$LAW: CALL GETWND BIC #WS.CRW!WS.UNM,W.NSTS(R0) ELAW: CALL UNMAPP CLR W.BSIZ(R4) BIS #WS.ELW,W.NSTS(R0) RETURN .SBTTL MAP ADDRESS WINDOW TO REGION M$AP: CALL GETWND ADD #W.NRID,R0 CALL GETREG CMP @R3,#1600 BHIS 1$ CLR KMLOC 1$: MOV R3,-(SP) MOV W.BLVR(R4),-(SP) TST (R0)+ MOV (R0)+,R2 CMP R2,R.BSIZ(R3) BHIS 8$ MOV @R0,R1 BNE 2$ MOV R.BSIZ(R3),R1 SUB R2,R1 CMP R1,W.BSIZ(R4) BLOS 2$ MOV W.BSIZ(R4),R1 2$: MOV R1,(R0)+ MOV R1,-(SP) SWAB @SP RORB @SP ROR @SP ROR @SP DEC @SP ADD 2(SP),@SP MOV W.BSIZ(R4),-(SP) CMP R1,@SP BHI 7$ MOV R2,-(SP) ADD R1,R2 CMP R2,R.BSIZ(R3) BHI 6$ MOV W.BFPD(R4),-(SP) MOV #77406,-(SP) BITB #R.CACH,R.BSTA(R3) BEQ 3$ MOV #177406,@SP 3$: INCB R.BNWD(R3) SUB #W.NSTS,R0 CALL UNMAPS MOVB W.BFPD(R4),R0 MOV R.BADD(R3),R3 ADD 4(SP),R3 CLRB 3(SP) 4$: INCB 3(SP) MOV R3,UISAR0-UISDR0(R0) MOV @SP,(R0)+ ADD #200,R3 SUB #200,R1 BGT 4$ SWAB R1 CLRB R1 ADD R1,@SP ADD R1,-(R0) MOV R4,R3 ADD #W.BLGH,R3 5$: MOV (SP)+,-(R3) CMP R3,R4 BHI 5$ RETURN 6$: TST (SP)+ 7$: CMP (SP)+,(SP)+ 8$: CMP (SP)+,(SP)+ MOV #XE.OFF,R1 SEC RETURN .SBTTL UNMAP AN ADDRESS WINDOW U$NMAP: CALL GETWND MOV #XE.NMP,R1 UNMAPS: BIC #WS.UNM,W.NSTS(R0) UNMAPP: CALL UNMAP BCS 1$ BIS #WS.UNM,W.NSTS(R0) 1$: RETURN .SBTTL CREATE AN EXTENDED MEMORY REGION C$RRG: TST (R0)+ .ASSUME R.GSIZ EQ R.GID+2 MOV (R0)+,R2 .ASSUME R.GSTS EQ R.GSIZ+2 BIC #RS.CRR!RS.NEW!RS.UNM,@R0 ADD #I.RGN+R.BSTA,R5; R5 -> region control blocks. MOV #XE.TMR,R1 .IF EQ R.GNUM-XE.TMR MOV R1,R3 .IFF MOV #R.GNUM,R3 .ENDC 1$: .ASSUME R.BLGH EQ XE.TMR ADD R1,R5 DEC R3 BEQ 15$ .ASSUME R.BSIZ EQ R.BSTA-2 BIT -(R5),(R5)+ BNE 1$ CLR @R5 CLR R4 BIT #RS.GBL,@R0 BEQ 6$ MOV R5,-(SP) MOV R0,R5 .ASSUME R.NAME EQ R.BSTA+2 TST (R5)+ CALL FINDGR MOV (SP)+,R5 BCS 5$ TSTB GR.SHC(R1) BMI 20$ MOV R2,R3 BNE 2$ .ASSUME GR.SIZ EQ 0 MOV @R1,R3 2$: .ASSUME GR.SIZ EQ 0 MOV (R1)+,R2 BIT #RS.BAS,@R0 BEQ 3$ CMP R.GBAS-R.GSTS(R0),@R1 BNE 16$ 3$: BIT (R1)+,(R1)+ CMP R3,R2 BHI 13$ INCB -(R1) BITB #GR.CAC,-(R1) BEQ 4$ BISB #R.CACH,@R5 4$: BISB #R.SHAR,@R5 .ASSUME GR.ADD EQ GR.SIZ+2 MOV -(R1),R1 BR 8$ 5$: BIT #RS.CGR,@R0 BEQ 17$ MOV R1,R4 BEQ 18$ BIT (R4)+,(R4)+ .ASSUME GR.STA EQ GR.SIZ+4 .ASSUME GR.SHC EQ GR.STA+1 MOV #<377*400>,@R4 MOV R.GBAS-R.GSTS(R0),R1 BIT #RS.BAS,@R0 BNE 7$ 6$: CLR R1 7$: TST R2 BEQ 19$ CALL XALLOF BCS 13$ BNE 8$ BIT #RS.NSM,@R0 BEQ 13$ BISB #GR.NRF,@R4 8$: .ASSUME R.GID EQ R.GSTS-4 BIT -(R0),-(R0) .ASSUME R.BADD EQ R.BSTA-4 BIT -(R5),-(R5) MOV R5,(R0)+ .ASSUME R.BSIZ EQ R.BADD+2 MOV R2,(R0)+ .ASSUME R.BSTA EQ R.BSIZ+2 BIS #RS.CRR,@R0 MOV R1,(R5)+ .ASSUME R.BSIZ EQ R.BADD+2 MOV R2,(R5)+ .ASSUME R.BSTA EQ R.BSIZ+2 TST R4 BEQ 12$ BIS #RS.NEW,@R0 BIS #R.SHAR,@R5 BIT #RS.EXI,@R0 BEQ 9$ BIS #R.EXIT,@R5 9$: BIT #RS.AGE,@R0 BEQ 10$ BISB #GR.AGE,@R4 10$: BIT #RS.CAC,@R0 BEQ 11$ BISB #GR.CAC,@R4 BISB #R.CACH,@R5 11$: .ASSUME GR.ADD EQ GR.STA-2 MOV R1,-(R4) .ASSUME GR.SIZ EQ GR.ADD-2 MOV R2,-(R4) 12$: TST (R5)+ RETURN 13$: MOV #XE.SIZ,R1 14$: MOV R2,14(SP) 15$: SEC RETURN 16$: MOV #XE.RNA,R1 BR 15$ 17$: MOV #XE.NGR,R1 BR 15$ 18$: MOV #XE.TMG,R1 BR 15$ 19$: MOV #XE.ISZ,R1 BR 14$ 20$: MOV #XE.PRV,R1 BR 15$ .SBTTL GET WINDOW MAPPING CONTEXT G$MCX: CALL GETWN0 INC R0 MOV (R4)+,R3 MOV (R4)+,R1 MOVB -1(R4),@R0 ASLB @R0 ROLB @R0 ROLB @R0 ROLB (R0)+ MOV R1,(R0)+ MOV (R4)+,R2 MOV (R4)+,(R0)+ MOV R3,(R0)+ BEQ 3$ ADD #I.RGN,R5 CMP R3,R5 BNE 1$ BIC -(R0),(R0)+ 1$: MOV (R4)+,(R0)+ SUB R1,R2 ADD #77,R2 BIC #77,R2 ROL R2 ROL R2 ROLB R2 SWAB R2 MOV R2,(R0)+ BIS #WS.MAP,(R0)+ 2$: RETURN 3$: CLR (R0)+ CLR (R0)+ CLR @R0 RETURN .SBTTL GETREG - GET RCB CORRESPONDING TO REGION ID .ENABL LSB GETREG: MOV R5,R3 ADD #I.RGN,R3 TST @R0 BEQ 5$ CMP @R0,R3 BEQ 5$ CMP #-1,@R0 BNE 1$ ADD #R.BLGH,R3 BR 5$ 1$: MOV #R.GNUM+1,R2 BR 3$ 2$: ADD #R.BLGH,R3 3$: DEC R2 BEQ 4$ CMP @R0,R3 BNE 2$ TST @R3 BNE 5$ 4$: TST (SP)+ PLERR2: MOV #XE.ILR,R1 SEC 5$: RETURN .DSABL LSB .SBTTL ELIMINATE AN EXTENDED MEMORY REGION ELRG: BIT #R.EXIT,R.BSTA(R3) BNE 1$ JSR R0,ELRG1 .WORD 0 1$: JSR R0,ELRG1 .WORD RS.EGR E$LRG: TST @R0 BEQ PLERR2 1$: CALL GETREG BIT (R0)+,(R0)+ .ASSUME R.GSTS EQ R.GID+4 BIC #RS.CRR!RS.NEW!RS.UNM,@R0 MOV I.WPTR(R5),R4 MOV (R4)+,-(SP) 2$: TST W.BSIZ(R4) BEQ 3$ CMP @R4,R3 BNE 3$ CALL UNMAP BIS #RS.UNM,@R0 3$: ADD #W.BLGH,R4 DEC @SP BNE 2$ ELRG1: MOV (R3)+,R1 MOV (R3)+,R2 MOV @R3,@SP CLR @R3 CLR -(R3) CLR -(R3) BIT #R.SHAR,(SP)+ BEQ XDEALC CALL FGRADR TSTB GR.SHC(R1) BPL 1$ CLRB GR.SHC(R1) BR 3$ 1$: DECB GR.SHC(R1) BEQ 2$ BIT #RS.EGR,@R0 BEQ 5$ MOV #XE.RIU,R1 SEC RETURN 2$: BIT #GR.AGE,GR.STA(R1) BNE 4$ 3$: BIT #RS.EGR,@R0 BEQ 5$ 4$: JSR R5,VMDAL1 5$: CLC RETURN .SBTTL XDEALC - DEALLOCATE A REGION IN EXTENDED MEMORY .ENABL LSB XDEALC: MOV R4,-(SP) MOV R3,-(SP) MOV R2,-(SP) 1$: MOV @SP,-(SP) ADD R1,@SP CLR R4 ADDR $XMSIZ-2,R2 2$: TST (R2)+ MOV (R2)+,R3 BEQ 3$ CMP R3,#-1 BEQ 5$ CMP @R2,@SP BEQ 4$ ADD @R2,R3 CMP R3,R1 BNE 2$ MOV @R2,R1 4$: TST (SP)+ ADD -(R2),@SP CLR @R2 BR 1$ 3$: TST R4 BNE 2$ MOV R2,R4 BR 2$ 5$: MOV R4,(SP)+ BEQ 7$ MOV R1,@R4 MOV (SP)+,-(R4) 6$: MOV (SP)+,R3 MOV (SP)+,R4 RETURN 7$: COM (SP)+ MOV #XE.DEA,R1 BR 6$ .DSABL LSB .SBTTL PLAS SUBROUTINES .SBTTL GETWND - GET WCB CORRESPONDING TO WINDOW ID .ENABL LSB GETWND: TSTB @R0 BEQ 1$ GETWN0: MOV I.WPTR(R5),R4 MOVB @R0,R3 CMP R3,(R4)+ BHIS 1$ MUL #W.BLGH,R3 ADD R3,R4 TST W.BSIZ(R4) BNE 2$ 1$: COM (SP)+ MOV #XE.ILW,R1 2$: RETURN .DSABL LSB .SBTTL UNMAP - UNMAP A WINDOW UNMAP: MOV R1,-(SP) SEC MOV @R4,R1 BEQ 3$ CLR @R4 DECB R.BNWD(R1) MOVB W.BFPD(R4),R1 MOV #77406,-(SP) BIT #WINDW$,@R5 BEQ 1$ CLR @SP 1$: MOV KISAR0-UISDR0(R1),UISAR0-UISDR0(R1) CMP R1,#UISDR0+2 BNE 2$ MOV #200,UISAR0-UISDR0(R1) 2$: MOV @SP,(R1)+ DECB W.BNPD(R4) BGT 1$ TST (SP)+ 3$: MOV (SP)+,R1 RETURN .SBTTL XALLOC - ALLOCATE A REGION IN EXTENDED MEMORY .ENABL LSB XALLOC: CLR R1 XALLOF: MOV R4,-(SP) TST R1 BNE 5$ ADDR $XMSIZ,R1 CLR R4 MOV #-1,R3 CLR -(SP) 1$: CMP @R1,#-1 BEQ 4$ CMP @R1,R2 BLO 2$ CMP @R1,R3 BHIS 2$ MOV @R1,R3 MOV R1,@SP 2$: CMP @R1,R4 BLOS 3$ MOV @R1,R4 3$: CMP (R1)+,(R1)+ BR 1$ 4$: MOV (SP)+,R1 BEQ X$SZER MOV 2(R1),R1 5$: CLR R3 CMP R1,$MEMSZ BHIS 11$ ADDR $XMSIZ-2,R3 6$: TST (R3)+ MOV (R3)+,R4 BEQ 6$ CMP R4,#-1 BEQ 9$ CMP @R3,R1 BHI 6$ ADD @R3,R4 SUB R1,R4 BLO 6$ CMP R4,R2 BLO X$SZER SUB R2,-2(R3) MOV R1,-(SP) SUB @R3,@SP BNE 7$ ADD R2,@R3 BR 8$ 7$: MOV -(R3),R4 SUB @SP,R4 BEQ 8$ MOV (SP)+,@R3 MOV R1,-(SP) ADD R2,R1 BCS 10$ MOV R2,-(SP) MOV R4,R2 CALL XDEALC MOV (SP)+,R2 MOV @SP,R1 8$: TST (SP)+ BR 11$ 9$: CLR R4 X$SZER: MOV R4,R2 MOV #XE.SIZ,R1 COM -(SP) 10$: INC (SP)+ 11$: MOV (SP)+,R4 MOV R3,R3 RETURN .DSABL LSB .SBTTL XMSTOP - SETTOP FOR JOBS CREATED WITH THE LINKER /V SWITCH .ENABL LSB XMSTOP::BNE 1$ TST KMONIN BNE 2$ 1$: MOV I.VHI(R4),R3 BNE 4$ TST R2 BNE 3$ 2$: BIT #WINDW$,@R4 BEQ 3$ BIT #VRUN$,@R4 BNE 3$ MOV #V.MAX,(PC)+ V$BIAS:: .WORD 0 ADD V$BIAS,R0 BCC 3$ MOV #-2,R0 3$: RETURN 4$: TST (SP)+ ADD #2,R3 BEQ 11$ BIT #WINDW$,@R4 BNE 5$ CMP R0,R3 BLO 11$ CMP R3,SYSLOW BHIS 11$ JMP S$EPRV .ASSUME R.GSTS EQ R.GLGH-2 5$: CLR -(SP) .ASSUME R.GLGH EQ 6 CMP -(SP),-(SP) MOV #R.GNUM,R5 ADD #I.RGN,R4 6$: BIT #R.STOP,R.BSTA(R4) BNE 7$ ADD #R.BLGH,R4 DEC R5 BNE 6$ CLR R4 7$: MOV R4,@SP BEQ 8$ MOV 2(R4),R4 MOV R4,R.GSIZ(SP) 8$: CMP R0,R3 BHIS 13$ 9$: MOV SP,R0 ENSYS 10$ MOV CNTXT,R5 CALL E$LRG RETURN 10$: ADD #R.GLGH,SP 11$: MOV CNTXT,R0 MOV I.VHI(R0),R0 12$: JMP S$ERTN 13$: SUB #W.NLGH+2,SP ENSYS 22$ CLR W.NOFF+14(SP) MOV #WS.MAP,W.NSTS+14(SP) SUB R3,R0 ADD #77+2,R0 BIC #77,R0 ASL R0 ROL R0 ROLB R0 SWAB R0 ROR R3 ASR R3 ASR R3 ASR R3 ASR R3 MOV R3,W.NID+14(SP) TST R.GID+W.NLGH+14(SP) BNE 17$ 14$: MOV R0,R.GSIZ+W.NLGH+14(SP) MOV R0,W.NSIZ+14(SP) MOV R0,W.NLEN+14(SP) MOV SP,R0 ADD #W.NLGH+R.GID+14,R0 MOV CNTXT,R5 CALL C$RRG MOV 12(SP),R0 BCS 15$ BIS #R.STOP,-(R5) BR 19$ 15$: CMP #XE.SIZ,R1 BEQ 14$ 16$: MOV CNTXT,R0 MOV I.VHI(R0),R0 BR 21$ 17$: MOV R4,W.NSIZ+14(SP) CMP R0,R4 BLE 18$ MOV R4,R0 18$: MOV R0,W.NLEN+14(SP) 19$: MOV R.GID+W.NLGH+14(SP),W.NRID+14(SP) MOV SP,R0 ADD #W.NID+14,R0 MOV CNTXT,R5 CALL C$RAW BCS 16$ 20$: MOV W.NLEN+14(SP),R0 SWAB R0 RORB R0 ROR R0 ROR R0 ADD W.NBAS+14(SP),R0 SUB #2,R0 21$: RETURN 22$: ADD #R.GLGH+W.NLGH+2,SP BR 12$ .DSABL LSB .SBTTL VMDALC, VMDAL1 - DEALLOCATE A GLOBAL REGION .ENABL LSB VMDALC::CALL FINDGR BIT (R5)+,(R5)+ SEZ BCS 2$ VMDAL1: BITB #GR.PRM,GR.STA(R1) BNE 2$ MOVB GR.SHC(R1),-(SP) ASLB (SP)+ BNE 2$ MOV R3,-(SP) MOV @R1,R2 CLR (R1)+ MOV (R1)+,R3 BITB #GR.NRF,@R1 BNE 1$ MOV R3,R1 CALL XDEALC 1$: MOV (SP)+,R3 TST (PC)+ 2$: SEC RTS R5 .DSABL LSB .SBTTL FINDGR - FIND A GLOBAL REGION CONTROL BLOCK FINDGR::ADDR <$GLRCB-GR.ESZ>,R1 CLR -(SP) 1$: ADD #GR.ESZ,R1 CMP #-1,@R1 BEQ 4$ TST @R1 BNE 3$ MOV R1,@SP BR 1$ 3$: CMP GR.NAM(R1),@R5 BNE 1$ CMP GR.NAM+2(R1),2(R5) BNE 1$ TST (SP)+ RETURN 4$: MOV (SP)+,R1 BEQ 5$ MOV @R5,GR.NAM(R1) MOV 2(R5),GR.NAM+2(R1) 5$: SEC RETURN .SBTTL FGRADR - FIND A GLOBAL REGION CONTROL BLOCK FGRADR::ADDR <$GLRCB-GR.ESZ+2>,R1,PUSH 1$: ADD #GR.ESZ-2,R1 CMP #-2,@R1 BLO 2$ TST (R1)+ BEQ 1$ .ASSUME GR.ADD EQ GR.SIZ+2 CMP @R1,@SP BNE 1$ TST -(R1) 2$: INC (SP)+ RETURN .END .MCALL .MODULE .MODULE DL,VERSION=28,COMMENT=,AUDIT=YES ; COPYRIGHT (c) 1984,1985,1986,1987 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. .SBTTL CONDITIONAL ASSEMBLY SUMMARY .SBTTL MACROS AND DEFINITIONS .ENABL LC .MCALL .DRDEF, .MFPS, .MTPS, .ASSUME, .ADDR, .BR NXM.V =: 4 IOT.V =: 20 .IIF NDF VENU$C, VENU$C == 0 .IF NE MMG$T .ASSUME VENU$C EQ 0 MESSAGE=<; no VENUS support under extended memory > .ENDC .IF NE ERL$G .ASSUME VENU$C EQ 0 MESSAGE=<; no VENUS support under error logger> .ENDC .IIF NDF DL$UN, DL$UN == 2 .IIF GT DL$UN-4, DL$UN == 4 .IIF LE DL$UN, DL$UN == 1 .IRP X,<\DL$UN> .SBTTL *** THIS HANDLER SUPPORTS X UNITS *** .ENDR .IIF NE VENU$C, FN$GET =: 370 FN$SIZ =: 373 FN$REP =: 374 FN$WRT =: 376 FN$RED =: 377 DLRCNT =: 8. DLREG =: 6 DLBPT =: 20. DLWPT =: 256.*DLBPT DLNBAD =: 10. DLSIZE =: <256.*2-1>*DLBPT-DLNBAD DLSIZ2 =: <512.*2-1>*DLBPT-DLNBAD DLTSIZ =: DLNBAD*4.+2 .IF EQ VENU$C .DRDEF DL,5,FILST$!SPFUN$!VARSZ$,DLSIZE,174400,160 .IF NE MMG$T .DRPTR FETCH=FETCH,LOAD=FETCH .IFF .DRPTR .ENDC .DREST CLASS=DVC.DK,REPLACE=RTABLE .IFF .DRDEF DL,5,FILST$!SPFUN$!VARSZ$,DLSIZ2,174400,130 .DRPTR .DREST CLASS=DVC.DK .ENDC .DRSPF .IIF NE VENU$C, .DRSPF .DRSPF .DRSPF .DRSPF .DRSPF .IIF NDF EIS$I EIS$I = MMG$T .IIF EQ EIS$I .MCALL SOB .SBTTL HARDWARE DEFINITIONS .IF EQ VENU$C RLCS =: 0 RLBA =: 2 RLDA =: 4 RLMP =: 6 RLBAE =: 10 .IFF RLCS =: 174400 RLBA =: 174402 RLDA =: 174404 RLMP =: 174406 RLBAE =: 174410 .ENDC CSERR =: 100000 CSDE =: 040000 CSERRC =: 036000 CSNXM =: 020000 CSDLT =: 010000 CSHNF =: 010000 CSDCRC =: 004000 CSHCRC =: 004000 CSOPI =: 002000 CSDS01 =: 001400 CSDS0 =: 000400 CSCRDY =: 000200 CSIE =: 000100 CSBA17 =: 000040 CSBA16 =: 000020 CSFUN =: 000016 CSDRDY =: 000001 FNNOP =: 0*2 FNWCHK =: 1*2 FNGSTS =: 2*2 FNSEEK =: 3*2 FNRDH =: 4*2 FNWRITE =: 5*2 FNREAD =: 6*2 FNRDNH =: 7*2 STWDE =: 100000 STCHE =: 040000 STWL =: 020000 STSKTO =: 010000 STSP =: 004000 STWGE =: 002000 STVC =: 001000 STDSE =: 000400 STDT =: 000200 STHS =: 000100 STCO =: 000040 STHO =: 000020 STBH =: 000010 STST =: 000007 STSLM =: 000005 SKCADF =: 077600 SKCA0 =: 000200 SKHS =: 000020 SKDIR =: 000004 SKMARK =: 000001 IOCA =: 077600 IOCA0 =: 000200 IOHS =: 000100 IOSA =: 000077 GSRST =: 000010 GSGS =: 000002 GSMARK =: 000001 SYSPTR =: 54 CONFG2 =: 370 PROS$ =: 020000 .READ =: 375 ..READ =: 010 .WRITE =: 375 ..WRIT =: 011 SYSCHN =: 17 .IF NE VENU$C .SBTTL QBUS/RL GENERIC ACCESS MACROS .MACRO MOVTORL SRC,DST .IIF DIF , MOV SRC,R5 JSR R4,TORL .WORD DST .ENDM MOVTORL .MACRO MOVFMRL SRC,DST JSR R4,FMRL .WORD SRC .IF NB,DST .IIF DIF , MOV R5,DST .ENDC .ENDM MOVFMRL .MACRO HANTORL SRC,DST .IIF DIF , MOV SRC,R4 CALL HTORL .WORD DST .ENDM HANTORL .MACRO HANFMRL SRC,DST CALL HFMRL .WORD SRC .IIF DIF , MOV R4,DST .ENDM HANFMRL .ENDC .IF NE VENU$C .SBTTL QBUS Interface registers and bit definitions BIT0 =: 000001 BIT1 =: 000002 BIT2 =: 000004 BIT3 =: 000010 BIT4 =: 000020 BIT5 =: 000040 BIT6 =: 000100 BIT7 =: 000200 BIT8 =: 000400 BIT9 =: 001000 BIT10 =: 002000 BIT11 =: 004000 BIT12 =: 010000 BIT13 =: 020000 BIT14 =: 040000 BIT15 =: 100000 $QCSR0 =: 176400 $QCSR1 =: 176401 $QCSR2 =: 176402 $QCSR3 =: 176403 $QDAT0 =: 176404 $QDAT1 =: 176405 $QADR0 =: 176406 $QADR1 =: 176407 REQMASTER =: BIT0 MSTRPEND =: BIT1 QBAWRT =: BIT2 QBAREAD =: BIT3 QBAIE =: BIT4 DMAENA =: BIT5 QBAINIT =: BIT6 DIAGMODE =: BIT7 .ENDC .IF EQ VENU$C .SBTTL INSTALLATION CODE .DRINS DL BR 10$ .ASSUME . EQ INSSYS BR 20$ 10$: MOV @#SYSPTR,R0 BIT #PROS$,CONFG2(R0) BNE 30$ 20$: TST (PC)+ 30$: SEC RETURN O.SYWL: MOV @SP,R0 INC R0 CMPB #BR/400,(R0)+ BNE O.BAD MOV R0,@SP BR O.BAD RTABLE: .BYTE 0,10.,5.,2.,40.,1. .Assume . LE 400,MESSAGE=<;Install code overflow> .ENDC .IF EQ VENU$C .SBTTL SET OPTIONS .DRSET CSR, 160000, O.CSR, OCT .DRSET VECTOR, 500, O.VEC, OCT .DRSET RETRY, 127., O.RTRY, NUM .IF NE ERL$G .DRSET SUCCES, -1, O.SUCC, NO .ENDC BTCSR = ++1000 O.CSR: CMP R0,R3 BLO O.BAD MOV R0,INSCSR MOV R0,DISCSR .ADDR #BAREA+4,R1 .ADDR #1000,R2 MOV R2,(R1) MOV #BTCSR/1000,-(R1) TST -(R1) MOV R0,R3 MOV R1,R0 EMT .READ BCS O.BAD MOV R3,(R2) MOV R1,R0 .ASSUME ..READ+1 EQ ..WRIT INCB 1(R0) EMT .WRITE BCS O.SYWL MOV R1,R0 .ASSUME ..WRIT-1 EQ ..READ DECB 1(R0) MOV #1,2(R0) EMT .READ BCS O.BAD MOV R3,DLCSR O.GOOD: TST (PC)+ O.BAD: SEC RETURN O.VEC: CMP R0,R3 BHIS O.BAD BIT #3,R0 BNE O.BAD MOV R0,DLSTRT BR O.GOOD O.RTRY: CMP R0,R3 BHI O.BAD MOV R0,DRETRY BEQ O.BAD BR O.GOOD .IF NE ERL$G O.SUCC: MOV #0,R3 MOV R3,SCSFLG BR O.GOOD .ENDC BAREA: .BYTE SYSCHN,..READ .BLKW .BLKW .WORD 256. .WORD 0 .Assume . LE 1000,MESSAGE=<;Set area overflow> .ENDC .SBTTL REQUEST ENTRY POINT .ENABL LSB .DRBEG DL MOV DLCQE,R5 MOV (PC)+,R4 .ASSUME .-DLSTRT LT 1000 DLCSR: .WORD DL$CSR MOV Q$FUNC(R5),R0 MOVB R0,R2 .IF NE VENU$C CMPB R2,#FN$GET BEQ 10$ .ENDC CMPB R2,#FN$SIZ BLT 5$ CMPB R2,#FN$REP+1 BNE 10$ 5$: JMP DLQCOM 10$: BIC #^C<7*400>,R0 CMP R0,#DL$UN*400 BHIS DLELNK MOV R0,DLUNIT .ASSUME CSDS01 EQ 3*400 MOV #FNREAD!CSIE,DLCODE .IF NE MMG$T CMPB R2,#FN$SIZ BEQ 15$ .ASSUME Q$BLKN+4 EQ Q$BUFF CMP (R5)+,(R5)+ .ASSUME Q$BUFF+2 EQ Q$WCNT CALL @$MPPTR .ASSUME Q$WCNT-2 EQ Q$BUFF MOV (SP)+,-(R5) .ASSUME Q$BUFF-4 EQ Q$BLKN CMP -(R5),-(R5) MOV (SP)+,Q$PAR(R5) .ENDC 15$: .ADDR #DLBBUF-,R3 SWAB R0 20$: ADD #DLTSIZ+2,R3 DEC R0 BPL 20$ MOV R3,(PC)+ DLCC: .WORD 0 TST (R3)+ .ASSUME .+4 EQ DLUSIZ .IF EQ VENU$C MOV #DLSIZE,(PC)+ .IFF MOV #DLSIZ2,(PC)+ .ENDC DLUSIZ: .WORD 0 .IF EQ VENU$C CALL DLGST TSTB R1 BPL 25$ MOV #DLSIZ2,DLUSIZ 25$: TST R0 BMI 30$ BIT #STVC,R1 BEQ 35$ 30$: MOV #-1,-(R3) MOV (R3)+,@R3 .IFF CMPB R2,#FN$GET BEQ DLGSTA CALL DLGST TST R0 BMI 30$ CALL INVVC BR 35$ 30$: CALL INVAL .ENDC 35$: CMPB R2,#FN$REP BGE 40$ JMP DLGSIZ 40$: BEQ 50$ BHI 55$ TST Q$WCNT(R5) BNE 45$ DLFLNK: JMP DLQCOM 45$: TST @R3 BPL DLTRAN 50$: MOV #1,R1 MOV #DLTSIZ/2,R2 CALL DLSQUE .IF NE MMG$T CLR Q$PAR(R5) .ENDC MOV #-1,@R3 MOV @R3,-(R3) BR DLADDR 55$: INCB R2 .ASSUME FN$RED EQ 377 BEQ DLADDR MOV #FNWRITE!CSIE,DLCODE BR DLADDR .IF NE ERL$G .ASSUME .-DLSTRT LT 1000 SCSFLG: .WORD 0 .ENDC .DSABL LSB .IF NE VENU$C .SBTTL GET SPECIAL DEVICE STATUS DLGSTA: MOV @R5,R4 CMP #4,R4 BLO DLELNK ASL R4 ADD R4,PC .370.X: .ASSUME . EQ .370.X+<0*2> BR .370.0 .ASSUME . EQ .370.X+<1*2> BR .370.1 .ASSUME . EQ .370.X+<2*2> BR .370.2 .ASSUME . EQ .370.X+<3*2> BR .370.3 .ASSUME . EQ .370.X+<4*2> .370.4: CLRB VOLCHK BR DLFLNK .370.3: MOV R4,#0 .=.-2 VOLCHK: .BLKB 1 NEWVOL: .BLKB 1 BR DLFLNK .370.2: CALL DLGST CALL INVVC CALL DLRST CLRB NEWVOL BR .370.1 .370.0: CALL DLGST .370.1: .IF EQ MMG$T MOV Q$BUFF(R5),R4 MOV STATCS,(R4)+ MOV STATMP,(R4)+ BR DLFLNK .IFF MOV R5,R4 MOV STATCS,-(SP) CALL @$PTWRD MOV STATMP,-(SP) CALL @$PTWRD BR DLFLNK .ENDC INVVC: BIT #STVC,R1 BEQ INVRET INVAL: MOV #-1,-(R3) MOV (R3)+,@R3 MOVB @PC,NEWVOL TSTB VOLCHK BNE DLELNK INVRET: RETURN .ENDC DLELNK: JMP DLEROR .SBTTL INITIALIZE FOR TRANSFER, SET FUNCTION CODE, FIX WORD COUNT .ENABL LSB DLTRAN: TST Q$WCNT(R5) BPL 1$ NEG Q$WCNT(R5) MOV #FNWRITE!CSIE,DLCODE 1$: MOV Q$WCNT(R5),R2 MOV R2,R3 ADD #255.,R3 CLRB R3 SWAB R3 .ASSUME Q$BLKN EQ 0 ADD @R5,R3 CMP DLUSIZ,R3 BLO DLELNK MOV DLCC,R0 2$: TST (R0)+ MOV (R0)+,R1 BEQ DLADDR .ASSUME Q$BLKN EQ 0 CMP R1,@R5 BLO 2$ CMP R1,R3 BHIS DLADDR MOV @R0,R1 MOV -(R0),R0 .ASSUME Q$BLKN EQ 0 SUB @R5,R0 BNE 3$ INC R0 SWAB R2 BEQ 5$ BR 4$ .ASSUME Q$BLKN EQ 0 3$: MOV @R5,R1 4$: MOV R0,R2 5$: SWAB R2 MOV Q$BUFF(R5),R3 .ASSUME Q$BLKN EQ 0 ADD R0,@R5 SUB R2,Q$WCNT(R5) MOV R2,R0 ASL R0 ADD R0,Q$BUFF(R5) .IF NE MMG$T MOV Q$PAR(R5),DLBPAR BCC 6$ ADD #CSBA16,Q$PAR(R5) 6$: .ENDC CALL DLSQUE .BR DLADDR .DSABL LSB .SBTTL COMPUTE DISK ADDRESS AND START TRANSFER .ENABL LSB DLADDR: MOV R5,(PC)+ DLQPTR: .WORD 0 .ASSUME Q$BLKN EQ 0 MOV @R5,R2 BMI DLELNK MOV #DLBPT,R1 .ASSUME DLBPT EQ 20. CLR R0 BR 2$ 1$: MOV R2,R3 BIC #^C<17>,R2 BIC R2,R3 ADD R3,R0 .ASSUME IOHS/2/2 EQ 16. ASR R3 ASR R3 SUB R3,R2 2$: CMP R2,R1 BHIS 1$ ASL R0 BIS R2,R0 ASL R0 BCS DLELNK BPL 3$ CMP DLUSIZ,#DLSIZ2 BNE DLELNK 3$: MOV R0,DLDA SUB R2,R1 SWAB R1 MOV R1,DLWTRK .IF NE ERL$G MOV Q$WCNT(R5),DLWC .ENDC MOV #1,(PC)+ DLRTY: .WORD 0 CALL DLRST CALL DLGST BMI DLERJM ASR R0 .ASSUME CSDRDY EQ 1 BCC DLERJM BIC #STWL!STHS!STDT,R1 CMP #STHO!STBH!STSLM,R1 BNE DLERJM DRETRY = .+2 .ASSUME DRETRY-DLSTRT LT 1000 MOV #DLRCNT,DLRTY .BR DLTRAK .DSABL LSB .SBTTL ENSURE THAT DISK IS ON TRACK BEFORE TRANSFER .ENABL LSB DLTRAK: CLR (PC)+ DLREV: .WORD 0 MOV @DLCC,R1 CMP #-1,R1 BNE 2$ MOV DRETRY,R2 ASL R2 1$: MOV #FNRDH,R1 CALL DLXCT BPL 2$ SOB R2,1$ INCB DLREV DLERJM: JMP DLERRH 2$: MOV DLDA,R0 MOV #IOSA,R2 BIC R2,R0 BIC R2,R1 CMP R0,R1 BEQ DLXFER MOV R0,R3 INC R2 .ASSUME IOHS EQ IOSA+1 BIC R2,R0 BIC R2,R1 SUB R0,R1 .ASSUME SKCADF EQ IOCA BHIS 3$ NEG R1 BIS #SKDIR,R1 3$: INC R1 .ASSUME SKMARK EQ 1 BIT R2,R3 BEQ 4$ BIS #SKHS,R1 4$: MOV #-1,@DLCC CALL DLSEEK BMI DLERRH MOV DLDA,@DLCC .BR DLXFER .DSABL LSB .SBTTL DLXFER - START AN I/O TRANSFER .ENABL LSB DLXFER: .IF EQ VENU$C ADD #RLMP,R4 .ENDC ADD #Q$WCNT,R5 MOV (PC)+,R3 DLWTRK: .WORD 0 CMP R3,@R5 BLOS 1$ MOV @R5,R3 1$: MOV R3,(PC)+ DLWC: .WORD 0 NEG R3 .IF EQ VENU$C MOV R3,@R4 MOV (PC)+,-(R4) DLDA: .WORD 0 MOV -(R5),-(R4) .IFF HANTORL R3,RLMP MOV (PC)+,R4 DLDA: .WORD 0 CALL HTORL .WORD RLDA HANTORL -(R5),RLBA .ENDC MOV (PC)+,R0 DLCODE: .WORD 0 BIS (PC)+,R0 DLUNIT: .WORD 0 .IF NE MMG$T $RLV1A: BR 10$ MOV Q$PAR-Q$BUFF(R5),-(SP) ASR (SP) ASR (SP) ASR (SP) ASR (SP) MOV (SP)+,RLBAE-RLBA(R4) MOV Q$PAR-Q$BUFF(R5),-(SP) BIC #<^C60>,(SP) BIS (SP)+,R0 BR 30$ 10$: BIT #1700,Q$PAR-Q$BUFF(R5) BEQ 20$ JMP DLEROR 20$: BIS Q$PAR-Q$BUFF(R5),R0 30$: .ENDC .IF EQ VENU$C MOV R0,-(R4) .IFF HANTORL R0,RLCS .ENDC RETURN .DSABL LSB .SBTTL DLINT - INTERRUPT ENTRY POINT .ENABL LSB .DRAST DL,5 .IF NE VENU$C BISB #QBAIE,@#$QCSR0 NOP NOP BICB #QBAIE,@#$QCSR0 .ENDC .FORK DLFBLK MOV DLCSR,R4 MOV DLQPTR,R5 TSTB DLREV BNE DLTRAK .IF EQ VENU$C TST @R4 .IFF HANFMRL RLCS,R4 TST R4 .ENDC BMI DLERRH .ASSUME CSERR EQ 100000 MOV DLWC,R3 SUB R3,Q$WCNT(R5) BNE 2$ CMP DLCODE,#FNWRITE!CSIE BNE DLEXFR .IF EQ VENU$C BIT #1,RLDA(R4) .IFF HANFMRL RLDA,R4 BIT #1,R4 .ENDC BEQ DLEXFR INC Q$WCNT(R5) .ADDR #DLFILL,-(SP) MOV (SP)+,Q$BUFF(R5) .IF EQ VENU$C MOV RLDA(R4),DLDA .IFF HANFMRL RLDA,DLDA .ENDC .IF NE MMG$T CLR Q$PAR(R5) .ENDC 1$: JMP DLTRAK 2$: ASL R3 ADD R3,Q$BUFF(R5) .IF NE MMG$T BCC 3$ ADD #CSBA16,Q$PAR(R5) 3$: .ENDC BIS #77,DLDA INC DLDA BEQ DLEROR BPL 301$ CMP DLUSIZ,#DLSIZ2 BNE DLEROR 301$: MOV #DLWPT,DLWTRK 4$: BR 1$ .SBTTL HANDLE THE ERRORS DLERRH: .IF EQ ERL$G .IF EQ VENU$C MOV @R4,R3 .IFF HANFMRL RLCS,R3 .ENDC .IFF MOV R4,R1 .ADDR #DLRBLK,R2 MOV R2,R3 MOV (R1)+,(R3)+ MOV (R1)+,(R3)+ MOV (R1)+,(R3)+ MOV (R1)+,(R3)+ CALL DLGST MOV R1,(R3)+ COM R1 BIT #STWL,R1 BEQ 5$ MOV DLDA,(R3)+ $RLV1B: BR 10$ MOV RLBAE(R4),(R3)+ 10$: MOV DRETRY,R3 SWAB R3 ADD #DLREG,R3 $RLV1C: BR 20$ INC R3 20$: JSR R4,FIXWC MOV DLRTY,R4 ADD #DL$COD*400-1,R4 CALL @$ELPTR MOV (SP)+,Q$WCNT(R5) 5$: MOV DLCSR,R4 MOV DLRBLK,R3 .ENDC MOV #-1,@DLCC CALL DLRST TSTB DLREV BEQ 6$ 51$: INCB DLREV MOV #177600!SKMARK,R1 CALL DLSEEK BMI DLEROR MOV DLUNIT,R0 BIS #CSIE!FNRDH,R0 .IF EQ VENU$C MOV R0,@R4 .IFF HANTORL R0,RLCS .ENDC RETURN 6$: ASRB R3 BCC 51$ .ASSUME CSDRDY EQ 1 ASL R3 ASL R3 BMI DLEROR .ASSUME CSNXM EQ 020000 BCC 7$ .ASSUME CSDE EQ 040000 CALL DLGST BIT #STWGE,R1 BEQ DLEROR BIT #STWL,R1 BNE DLEROR 7$: DEC DLRTY BGT 4$ DLEROR: MOV DLCQE,R5 .ASSUME Q$BLKN-2 EQ Q$CSW BIS #HDERR$,@-(R5) BR DLQCOM .DSABL LSB .SBTTL FINISH SUCCESSFUL OPERATION .ENABL LSB DLEXFR: MOV DLCQE,R5 CMP R5,DLQPTR BEQ 1$ CMPB Q$FUNC(R5),#FN$REP BEQ 1$ TST Q$WCNT(R5) BEQ 1$ JMP DLTRAN 1$: .IF NE ERL$G JSR R4,FIXWC TST (SP)+ TST SCSFLG BNE DLQCOM MOV #DL$COD*400+377,R4 CALL @$ELPTR .ENDC DLQCOM: .DRFIN DL .DSABL LSB .SBTTL GET DEVICE SIZE DLGSIZ: .IF EQ MMG$T MOV DLUSIZ,@Q$BUFF(R5) .IFF MOV DLUSIZ,-(SP) MOV R5,R4 CALL @$PTWRD .ENDC TST R0 .Assume CSERR EQ 100000 BPL DLQCOM BIT #CSERRC,R0 BNE DLEROR BIT #STVC,R1 BEQ DLEROR BR DLQCOM .SBTTL DLXCT - FUNCTION EXECUTION ROUTINES .ENABL LSB DLSEEK: .IF EQ VENU$C MOV R1,RLDA(R4) .IFF HANTORL R1,RLDA .ENDC MOV #FNSEEK,R1 BR DLXCT DLGST: .IF EQ VENU$C MOV #GSGS!GSMARK,RLDA(R4) .IFF HANTORL #GSGS!GSMARK,RLDA .ENDC CALL 1$ BPL 4$ .IF EQ VENU$C TST RLBA(R4) .IFF HANFMRL RLBA,R4 TST R4 .ENDC BNE 4$ CALL DLRST .IF EQ VENU$C MOV #GSGS!GSMARK,RLDA(R4) .IFF HANTORL #GSGS!GSMARK,RLDA .ENDC BR 1$ DLRST: .IF EQ VENU$C MOV #GSRST!GSGS!GSMARK,RLDA(R4) .IFF HANTORL #GSRST!GSGS!GSMARK,RLDA .ENDC 1$: MOV #FNGSTS,R1 DLXCT: BIS DLUNIT,R1 .IF EQ VENU$C MOV R1,@R4 2$: TSTB @R4 .IFF HANTORL R1,RLCS 2$: HANFMRL RLCS,R4 TSTB R4 .ENDC BPL 2$ 3$: .IF EQ VENU$C MOV RLMP(R4),R1 MOV @R4,R0 .IFF HANFMRL RLMP,R1 MOV R1,(PC)+ STATMP: .WORD -1 HANFMRL RLCS,R0 MOV R0,(PC)+ STATCS: .WORD -1 .ENDC 4$: RETURN .DSABL LSB .IF NE VENU$C .SBTTL Macro routines to access q-bus adapter (IN_LINE) HTORL: BICB #QBAWRT!QBAREAD,@#$QCSR0 BISB #REQMASTER!QBAWRT!DMAENA,@#$QCSR0 CALL HGETQB MOV R4,@#$QDAT0 BR HBCYCLE HFMRL: BICB #QBAWRT!QBAREAD,@#$QCSR0 BISB #REQMASTER!QBAREAD!DMAENA,@#$QCSR0 CALL HGETQB HBCYCL: MOV (SP)+,R4 MOV (R4)+,@#$QADR0 HWAITF: BITB #MSTRPEND,@#$QCSR0 BNE HWAITF MOV R4,-(SP) MOV @#$QDAT0,R4 BICB #REQMASTER,@#$QCSR0 RETURN HGETQB: BITB #MSTRPEND,@#$QCSR0 BEQ HGETQB RTS PC .ENDC .DSABL LSB .SBTTL DLSQUE - SETUP PSEUDO QUEUE ELEMENT DLSQUE: .ADDR #DLBWCT,R0 MOV R2,@R0 MOV R3,-(R0) MOV Q$FUNC(R5),-(R0) MOV R1,-(R0) .ASSUME Q$BLKN-2 EQ Q$CSW MOV -(R5),-2(R0) MOV R0,R5 RETURN .IF NE ERL$G .SBTTL FIXWC - FIX WORD COUNT FOR LOGGER FIXWC: MOV Q$WCNT(R5),@SP MOV DLWC,Q$WCNT(R5) CMP DLCODE,#FNWRITE!CSIE BNE 1$ NEG Q$WCNT(R5) 1$: JMP @R4 .ENDC .SBTTL DATA AREAS .WORD -1 .WORD -1 .BYTE 0 .BYTE -1 DLBADD: .WORD -1 DLBWCT: .WORD -1 .IF NE MMG$T .WORD 0 DLBPAR: .WORD -1 .WORD 0,0 .ENDC DLFILL: .WORD 0 DLBBUF: .REPT DL$UN .WORD -1 .WORD -1 .BLKB DLTSIZ-2 .ENDR DLFBLK: .WORD 0,0,0,0 .IF NE ERL$G DLRBLK: .BLKW DLREG+1 .ENDC .SBTTL BOOTSTRAP DRIVER .DRBOT DL,BOOT1,B.READ . = DLBOOT+40 BOOT1: JMP @#BOOT-DLBOOT .SBTTL BOOTSTRAP READ ROUTINE .ENABL LSB . = DLBOOT+210 B.READ: CLR R4 1$: SUB #DLBPT,R0 BLO 2$ ADD #IOHS,R4 BR 1$ 2$: ADD #DLBPT,R0 ASL R0 BIS R4,R0 .IF EQ VENU$C MOV BOTCSR,R5 ADD #RLDA,R5 MOV RLCS-RLDA(R5),B.DLCS BIC #^C,B.DLCS .ENDC CALL B.SEEK NEG R1 .IF EQ VENU$C MOV R2,RLBA-RLDA(R5) .IFF MOVTORL R2,RLBA .ENDC DLREAD: .IF EQ VENU$C MOV R1,RLMP-RLDA(R5) MOV R0,@R5 .IFF MOVTORL R1,RLMP MOVTORL R0,RLDA .ENDC JSR R0,B.XCT .WORD FNREAD CLC BPL 5$ .IF EQ VENU$C MOV @R5,R3 .IFF MOVFMRL RLDA,R3 MOV R3,R4 .ENDC BIC #^C,R3 CMP #DLBPT*2,R3 BNE BIOERR .IF EQ VENU$C MOV @R5,R3 .IFF MOV R4,R3 .ENDC SUB R0,R3 SWAB R3 ASR R3 ADD R3,R1 .IF EQ VENU$C MOV @R5,R0 .IFF MOV R4,R0 .ENDC ADD #IOHS-,R0 MOV #DLREAD-DLBOOT,-(SP) .BR B.SEEK B.SEEK: JSR R0,B.XCT .WORD FNRDH .IF EQ VENU$C MOV RLMP-RLDA(R5),R3 .IFF MOVFMRL RLMP,R3 .ENDC BIC #IOHS!IOSA,R3 MOV R0,R4 BIC #IOHS!IOSA,R4 SUB R4,R3 BCC 3$ NEG R3 BIS #SKDIR,R3 3$: BIT #IOHS,R0 BEQ 4$ BIS #SKHS,R3 4$: INC R3 .IF EQ VENU$C MOV R3,@R5 .IFF MOVTORL R3,RLDA .ENDC JSR R0,B.XCT .WORD FNSEEK BMI BIOERR .IF EQ VENU$C MOV R0,@R5 .IFF MOVTORL R0,RLDA .ENDC 5$: RETURN B.XCT: MOV (R0)+,R3 .IF EQ VENU$C BIS (PC)+,R3 B.DLCS: .WORD 0 MOV R3,RLCS-RLDA(R5) 6$: BIT #CSERR!CSCRDY,RLCS-RLDA(R5) .IFF MOVTORL R3,RLCS 6$: MOVFMRL RLCS BIT #CSERR!CSCRDY,R5 .ENDC BEQ 6$ RTS R0 .IF NE VENU$C .SBTTL Macro routines to access q-bus adapter (BOOT) TORL: MOVB #REQMASTER!QBAWRT!DMAENA,@#$QCSR0 CALL GETQB MOV R5,@#$QDAT0 BR BCYCLE FMRL: MOVB #REQMASTER!QBAREAD!DMAENA,@#$QCSR0 CALL GETQB BCYCLE: MOV (R4)+,@#$QADR0 WAITF: BITB #MSTRPEND,@#$QCSR0 BNE WAITF MOV @#$QDAT0,R5 BICB #REQMASTER,@#$QCSR0 RTS R4 GETQB: BITB #MSTRPEND,@#$QCSR0 BEQ GETQB RTS PC .ENDC .DSABL LSB .SBTTL BOOTSTRAP CONTINUED .IF NE VENU$C .ASSUME .-DLBOOT-612 LE 0 . = DLBOOT+612 .IFF . = DLBOOT+600 .ENDC BOOT: MOV #10000,SP .IF EQ VENU$C MOV @(PC)+,-(SP) BOTCSR: .WORD DL$CSR BIC #^C1400,@SP SWAB @SP .ENDC MOV #2,R0 MOV #4*256.,R1 MOV #1000,R2 CALL B.READ MOV #B.READ-DLBOOT,@#B$READ MOV #B$DNAM,@#B$DEVN .IF EQ VENU$C MOV (SP)+,@#B$DEVU .IFF CLR @#B$DEVU .ENDC JMP @#B$BOOT .DREND DL .IF EQ VENU$C .IF NE MMG$T .SBTTL FETCH/LOAD CODE FETCH: MOV @R5,R5 MOV DLCSR-DLLQE(R5),R4 CLR -(SP) .MFPS .MTPS #340 MOV @#NXM.V+2,-(SP) MOV @#NXM.V,-(SP) .ADDR #$DLNXM,-(SP) MOV (SP)+,@#NXM.V MOV #340,@#NXM.V+2 TST RLBAE(R4) MOV (SP)+,@#NXM.V MOV (SP)+,@#NXM.V+2 ROL 2(SP) .MTPS ROR (SP)+ BCS 30$ .IF EQ ERL$G MOV #NOP,$RLV1A-DLLQE(R5) .IFF MOV #NOP,R0 MOV R0,$RLV1A-DLLQE(R5) MOV R0,$RLV1B-DLLQE(R5) MOV R0,$RLV1C-DLLQE(R5) .ENDC 30$: CLC RETURN $DLNXM: BIS #1,2(SP) RTI .ENDC .ENDC .END .MCALL .MODULE .MODULE DX,VERSION=10,COMMENT=,AUDIT=YES ; COPYRIGHT (c) 1986 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. .SBTTL CONDITIONAL ASSEMBLY SUMMARY .SBTTL DEFINITIONS .ENABL LC .MCALL .DRDEF .ASSUME .BR .ADDR .DSTATUS=:342 .READ =:375 ..READ =:010 .WRITE =:375 ..WRIT =:011 SYSCHN =:17 JSW =:44 SYSPTR =:54 P1EXT =: 432 .IIF NDF DXT$O, DXT$O=0 .IIF NDF DX$CS2, DX$CS2 == 177174 .IIF NDF DX$VC2, DX$VC2 == 270 .DRDEF DX,22,FILST$!SPFUN$!DX$COD,494.,177170,264 .DRPTR .DREST CLASS=DVC.DK,MOD=DVM.DX .DRSPF <377> .DRSPF <376> .DRSPF <375> CSGO =: 1 CSUNIT =: 20 CSDONE =: 40 CSINT =: 100 CSTR =: 200 CSRX02 =: 4000 CSINIT =: 40000 CSERR =:100000 CSFBUF =:0*2 CSEBUF =:1*2 CSWRT =:2*2 CSRD =:3*2 CSRDST =:5*2 CSWRTD =:6*2 CSMAIN =:7*2 CSREAD =:CSEBUF&CSRD&CSRDST&CSMAIN .ASSUME CSRD&2 NE 0 .ASSUME CSWRT&2 EQ 0 .ASSUME CSWRTD&2 EQ 0 ESCRC =: 1 ESPAR =: 2 ESID =: 4 ESDD =: 100 ESDRY == 200 DXNREG =:3 RETRY =:8. SPFUNC =:100000 .SBTTL INSTALLATION CHECKS .IF EQ DXT$O .DRINS DX .IFF .DRINS DX, .ENDC NOP BIT #CSRX02,@INSCSR BEQ O.GOOD BR O.BAD FINDRV: .ADDR #DEVNAM,R0 .ADDR #DAREA+1,-(SP) EMT .DSTATUS BCS O.BAD MOV DAREA+4,R1 BNE O.GOOD BR O.BAD DAREA: .BLKW 4 DEVNAM: .RAD50 /DX / BAREA: .BYTE SYSCHN,..READ .BLKW .BLKW .WORD 256. .WORD 0 X.WP: .ADDR #DXWPRO,R0 ADD R3,R0 MOVB (PC)+,(R0) O.WPF: .BLKW 1 CALL FINDRV BCS O.GOOD CMP @#SYSPTR,R1 BHI 10$ MOV #100000,DXW1-DXLQE(R1) 10$: ADD R3,R1 MOVB O.WPF,DXWPRO-DXLQE(R1) BR O.GOOD .IIF GT,<.-376> .ERROR .SBTTL SET OPTIONS .DRSET CSR, 160000, O.CSR, OCT .DRSET VECTOR, 500, O.VEC, OCT .IF NE DXT$O .DRSET CSR2, 160000, O.CSR2, OCT .DRSET VEC2, 500, O.VEC2, OCT .ENDC;NE DXT$O .DRSET RETRY, 127., O.RTRY, NUM .IF NE ERL$G .DRSET SUCCES, -1, O.SUCC, NO .ENDC .DRSET WRITE, 1, O.WP, NO BTCSR = ++1000 O.CSR: CMP R0,R3 BLO O.BAD MOV R0,INSCSR MOV R0,DISCSR .ADDR #BAREA+4,R1 .ADDR #1000,R2 MOV R2,(R1) MOV #BTCSR/1000,-(R1) TST -(R1) MOV R0,R3 MOV R1,R0 EMT .READ BCS O.BAD MOV R3,(R2) MOV R1,R0 .ASSUME ..READ+1 EQ ..WRIT INCB 1(R0) EMT .WRITE BCS O.SYWL MOV R1,R0 .ASSUME ..WRIT-1 EQ ..READ DECB 1(R0) MOV #1,2(R0) EMT .READ BCS O.BAD .IF EQ DXT$O MOV R3,RXCSA .IFF MOV R3,DXCSR .ENDC O.GOOD: TST (PC)+ O.BAD: SEC RETURN O.SYWL: MOV @SP,R0 INC R0 CMPB #BR/400,(R0)+ BNE O.BAD MOV R0,@SP BR O.BAD O.VEC: CMP R0,R3 BHIS O.BAD BIT #3,R0 BNE O.BAD .IF EQ DXT$O MOV R0,DXSTRT .IFF MOV R0,DX$VTB .ENDC BR O.GOOD .IF NE DXT$O O.CSR2: CMP R0,R3 BLO O.BAD MOV R0,DXCSR2 MOV R0,DISCS2 BR O.GOOD O.VEC2: CMP R0,R3 BHIS O.BAD BIT #3,R0 BNE O.BAD MOV R0,DX$VTB+6 BR O.GOOD .ENDC O.RTRY: CMP R0,R3 BHI O.BAD MOV R0,DRETRY BNE O.GOOD BR O.BAD .IF NE ERL$G O.SUCC: MOV #0,R3 N.SUCC: MOV R3,SCSFLG .ASSUME O.SUCC+4 EQ N.SUCC BR O.GOOD .ENDC O.WP: NOP CLR R3 N.WP: .ASSUME O.WP+4 EQ N.WP MOV R3,O.WPF MOV R1,R3 CMP R3,#DXT$O*2+1 BHI O.BAD JMP X.WP .IIF GT,<.-1000> .ERROR .SBTTL DRIVER REQUEST ENTRY POINT .ENABL LSB .DRBEG DX BR DXENT DXWPRO: .REPT DXT$O+1 .BYTE 0,0 .ENDR .ASSUME . LE DXSTRT+1000 .IF NE ERL$G SCSFLG: .WORD 0 .ASSUME . LE DXSTRT+1000 .ENDC .IF NE DXT$O .DRVTB DX,DX$VEC,DXINT .DRVTB ,DX$VC2,DXINT .ENDC DXENT: .IF NE MMG$T MOV @#SYSPTR,R4 MOV P1EXT(R4),(PC)+ $P1EXT: .WORD P1EXT .ENDC MOV (PC)+,(PC)+ DRETRY: .WORD RETRY .ASSUME . LE DXSTRT+1000 RXTRY: .WORD 0 MOV DXCQE,R3 MOV (R3)+,R5 MOV #CSRD!CSGO,R4 .ASSUME Q$BLKN+2 EQ Q$FUNC MOVB (R3)+,R1 .ASSUME Q$FUNC+1 EQ Q$UNIT MOVB (R3)+,R0 ASRB R0 BCC 1$ BIS #CSUNIT,R4 1$: .IF EQ DXT$O BITB #6/2,R0 BNE RXERR .IFF MOV (PC)+,-(SP) DXCSR = . .WORD DX$CSR .ASSUME . LE DXSTRT+1000 ASRB R0 BCC 2$ MOV (PC)+,(SP) DXCSR2 = . .WORD DX$CS2 .ASSUME . LE DXSTRT+1000 2$: MOV (SP)+,RXCSA ASRB R0 BCS RXERR .ENDC .ASSUME Q$UNIT+1 EQ Q$BUFF MOV (R3)+,R0 .ASSUME Q$BUFF+2 EQ Q$WCNT MOV (R3)+,R2 BPL 3$ ASL (PC)+ DXW1: .WORD .-. .ASSUME . LE DXSTRT+1000 BCS 33$ CLR -(SP) .ASSUME Q$WCNT+2 EQ Q$COMP MOVB Q$UNIT-Q$COMP(R3),(SP) BIC #<^C3>,(SP) .ADDR #DXWPRO,(SP),ADD; TO UNIT OFFSET TSTB @(SP)+ BNE RXERR .ASSUME CSRD-2 EQ CSWRT 33$: CMPB -(R4),-(R4) .ASSUME CSWRT EQ CSRD-2 NEG R2 3$: ASL R1 ADD PC,R1 ADD CHGTBL-.(R1),R4 MOV R4,RXFUN2 BMI 7$ MOVB R2,FILLCT DECB FILLCT ASL R2 ASL R5 ASL R5 MOV (PC)+,R4 .BYTE -7,-26. 4$: CMP #26.*200,R5 BHI 5$ ADD #-26.*200,R5 5$: ROL R5 INCB R4 BLE 4$ MOVB R5,R1 ADD R4,R5 MOV R1,R4 ASL R1 ADD R4,R1 ASL R1 6$: SUB #26.,R1 BGT 6$ MOV R1,TRKOFF BR 8$ 7$: SWAB R5 BISB R2,R5 MOV #128.,R2 .IF EQ MMG$T CLR (R0)+ .IFF MOV DXCQE,R4 CLR -(SP) CALL @$PTWRD TST (R0)+ .ENDC 8$: MOV R0,(PC)+ BUFRAD: .WORD 0 MOV R5,TRACK MOV R2,(PC)+ BYTCNT: .WORD 0 .IF NE MMG$T TST (R3)+ MOV @R3,PARVAL .ENDC .BR RXINIT .DSABL LSB .SBTTL START TRANSFER OR RETRY .ENABL LSB RXINIT: MOV #100000,RXIRTN MOV RXCSA,R4 BR RXIENB 1$: BIT #CSREAD,R0 BNE 3$ 2$: JSR R0,SILOFE .WORD CSFBUF!CSGO MOVB (R2)+,@R5 MOV R1,@R5 3$: MOVB SECTOR,R2 BGT 5$ SUB #-14.,R2 BGT 4$ ADD #12.,R2 SEC 4$: ROL R2 ADD (PC)+,R2 TRKOFF: .WORD 0 BGT 5$ ADD #26.,R2 5$: MOV R0,@R4 6$: TSTB @R4 BEQ 6$ BPL RXRTRY MOVB R2,@R5 7$: TSTB @R4 BEQ 7$ BPL RXRTRY MOVB (PC)+,@R5 TRACK: .BYTE 0 SECTOR: .BYTE 0 RXIENB: BIS #CSINT,@R4 RETURN RXERR: MOV DXCQE,R4 BIS #HDERR$,@-(R4) BR 13$ .DRAST DX,5,RXABRT .FORK DXFBLK MOV (PC)+,R0 RXFUN2: .WORD 0 MOV #128.,R3 MOV (PC)+,R4 RXCSA: .WORD DX$CSR .ASSUME . LE DXSTRT+1000 MOV R4,R5 TST (R5)+ BMI RXRTRY ASL (PC)+ RXIRTN: .WORD 0 BCS 1$ BIT #CSREAD,R0 BEQ 10$ TST R0 BPL 9$ BIT #ESDD,@R5 BEQ 9$ .IF EQ MMG$T MOV BUFRAD,R2 INC -(R2) .IFF MOV R4,R1 MOV DXCQE,R4 MOV #1,-(SP) SUB #2,Q$BUFF(R4) CMP Q$BUFF(R4),#20000 BHIS 85$ ADD #20000,Q$BUFF(R4) SUB #200,Q$PAR(R4) 85$: CALL @$PTWRD MOV R1,R4 .ENDC 9$: JSR R0,SILOFE .WORD CSEBUF!CSGO MOVB @R5,(R2)+ MOV @R5,R2 10$: INCB SECTOR BNE 11$ ADD #-26.*400+1,TRACK ADD #6,TRKOFF BLE 11$ SUB #26.,TRKOFF 11$: .IF EQ MMG$T ADD R3,BUFRAD .IFF ADD #2,PARVAL .ENDC SUB R3,BYTCNT BHI 1$ CLR BYTCNT BIT #CSREAD!SPFUNC,R0 BNE 12$ ADD #040000,(PC)+ .BYTE 0 FILLCT: .BYTE 0 BCC 2$ 12$: .IF NE ERL$G TST SCSFLG BNE 13$ MOV #DX$COD*400+377,R4 MOV DXCQE,R5 CALL @$ELPTR .ENDC 13$: CLR @RXCSA 14$: .DRFIN DX RXABRT: MOV #CSINIT,@RXCSA CLR DXFBLK+2 BR 14$ .DSABL LSB RXRTRY: .IF NE ERL$G .ADDR #DXRBUF,R3 MOV R3,R2 MOV @R4,(R3)+ MOV @R5,(R3)+ MOV #CSMAIN!CSGO,@R4 1$: BIT #CSDONE,@R4 BEQ 1$ MOV @R5,@R3 MOV DRETRY,R3 SWAB R3 ADD #DXNREG,R3 MOV #DX$COD*400,R4 BISB RXTRY,R4 DECB R4 MOV DXCQE,R5 CALL @$ELPTR MOV RXCSA,R4 .ENDC DEC RXTRY BGT 2$ JMP RXERR 2$: MOV #CSINIT,@R4 JMP RXINIT .SBTTL SILOFE - FILL OR EMPTY THE SILO .ENABL LSB SILOFE: MOV (R0)+,@R4 MOV (R0)+,3$ MOV (R0)+,5$ MOV BYTCNT,R1 BEQ 4$ CMP R1,R3 BLOS 1$ MOV R3,R1 1$: MOV BUFRAD,R2 .IF NE MMG$T JSR R0,@$P1EXT .WORD PARVAL-. .ENDC 2$: TSTB @R4 BPL 2$ 3$: HALT TSTB @R4 DECB R1 BNE 2$ .IF NE MMG$T PARVAL: .WORD 0 .ENDC 4$: TSTB @R4 BGT 6$ BEQ 4$ 5$: HALT BR 4$ 6$: RTS R0 .DSABL LSB .SBTTL TABLES, FORK BLOCK, END OF DRIVER .WORD CSWRTD-CSRD+SPFUNC .WORD CSWRT-CSRD+SPFUNC .WORD CSRD-CSRD+SPFUNC CHGTBL: .WORD 0 DXFBLK: .WORD 0,0,0,0 .IF NE ERL$G DXRBUF: .BLKW DXNREG .ENDC .SBTTL BOOTSTRAP DRIVER .DRBOT DX,BOOT1,READ . = DXBOOT+14 .WORD READS-DXBOOT .WORD 340 .WORD WAIT-DXBOOT .WORD 340 . = DXBOOT+34 BOOT1: MOVB UNITRD-DXBOOT(R0),RDCMD REETRY: MOV @PC,SP MOV #200,R2 CLR R0 BR B2$ . = DXBOOT+56 UNITRD: .BYTE CSGO+CSRD .BYTE CSGO+CSRD+CSUNIT;READ FROM UNIT 1 . = DXBOOT+70 WAIT: TST @R4 BEQ WAIT BMI REETRY RTIRET: RTI . = DXBOOT+120 READS: MOV (PC)+,R4 BOTCSR: .WORD DX$CSR MOV R4,R5 MOV (PC)+,(R5)+ RDCMD: .WORD 0 IOT MOV R3,@R5 IOT MOV R0,@R5 IOT MOV #CSGO+CSEBUF,@R4;LOAD EMPTY BUFFER FUNCTION INTO RXCS BROFFS = READF-. RDX: IOT TSTB @R4 BPL RTIRET MOVB @R5,(R2)+ DEC R1 BGT RDX CLR R2 BR RDX B2$: MOV SP,R1 INC R0 MOV @PC,R3 .ASSUME BPT EQ 3 BPT BOOT2: CMPB (R3)+,(R3)+ BPT CMPB (R3)+,(R3)+ BPT BIT #CSUNIT,RDCMD BNE BOOT CLR R0 BR BOOT READ: MOV (PC)+,@(PC)+ .WORD 167 .WORD RDX-DXBOOT MOV (PC)+,@(PC)+ .WORD READF-RDX-4 .WORD RDX-DXBOOT+2 MOV #READ1-DXBOOT,@#B$READ MOV #TRWAIT-DXBOOT,@#20 CLR @#JSW TST HRDBOT BEQ READ1 MOV @#B$DEVU,R3 MOVB UNITRD-DXBOOT(R3),RDCMD READ1: ASL R0 ASL R0 ASL R1 1$: MOV R0,-(SP) MOV R0,R3 MOV R0,R4 CLR R0 BR 3$ 2$: SUB #23.,R3 3$: INC R0 SUB #26.,R4 BPL 2$ CMP #-14.,R4 ROL R3 4$: SUB #26.,R3 BPL 4$ ADD #27.,R3 BPT MOV (SP)+,R0 INC R0 TST R1 BGT 1$ RETURN READF: TST @R4 BEQ READF BMI BIOERR TSTB @R4 BPL READFX MOVB @R5,(R2)+ DEC R1 BGT READF MOV #1,R2 BR READF TRWAIT: TST @R4 BMI BIOERR BEQ TRWAIT READFX: RTI . = DXBOOT+606 BOOT: MOV #10000,SP MOV R0,-(SP) MOV #2,R0 MOV #<4*400>,R1 MOV #1000,R2 CLR (PC)+ HRDBOT: .WORD 1 CALL READ MOV #READ1-DXBOOT,@#B$READ MOV #B$DNAM,@#B$DEVN MOV (SP)+,@#B$DEVU JMP @#B$BOOT .DREND DX .END .MCALL .MODULE .MODULE DY,VERSION=12,COMMENT=,AUDIT=YES ; COPYRIGHT (c) 1986 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. .SBTTL CONDITIONAL ASSEMBLY SUMMARY .SBTTL MACROS AND DEFINITIONS .ENABL LC .MCALL .DRDEF .ADDR .ASSUME .BR .DSTATUS=342 SYSPTR = 54 PNPTR = 404 .MACRO BNE. LABEL,?ALT BEQ ALT JMP LABEL ALT: .ENDM .IIF NDF DYT$O, DYT$O = 0 .IIF NDF DY$DD, DY$DD = 0 .IIF NDF DY$CS2 DY$CS2 == 177150 .IIF NDF DY$VC2 DY$VC2 == 270 .DRDEF DY,6,FILST$!SPFUN$!VARSZ$,494.,177170,264 .DRPTR .IIF EQ DY$DD .DREST CLASS=DVC.DK,MOD=DVM.DX .IIF NE DY$DD .DREST CLASS=DVC.DK .DRSPF <373> .DRSPF <375> .DRSPF <376> .DRSPF <377> CSGO = 1 CSUNIT = 20 CSDONE = 40 CSINT = 100 CSTR = 200 CSDN = 400 CSHEAD = 1000 CSRX02 = 4000 CSINIT = 40000 CSERR = 100000 DNERR = 20 CSFBUF = 0*2 CSEBUF = 1*2 CSWRT = 2*2 CSRD = 3*2 CSRDST = 5*2 CSWRTD = 6*2 CSMAIN = 7*2 .ASSUME CSRD&2 NE 0 .ASSUME CSWRT&2 EQ 0 .ASSUME CSWRTD&2 EQ 0 ESCRC = 1 ESPAR = 2 ESID = 4 ESSID1 = 10 ESDNER = 20 ESDN = 40 ESDD = 100 ESDRY = 200 DDNBLK = DYDSIZ*2 DYNREG = 3 RETRY = 8. SPFUNC = 100000 SIZ$FN = 373 WDD$FN = 375 WRT$FN = 376 RED$FN = 377 .SBTTL INSTALLATION CHECKS .IF EQ DYT$O .DRINS DY .IFF .DRINS DY, .ENDC NOP BIT #CSRX02,@INSCSR BNE O.GOOD BR O.BAD FINDRV: .ADDR #DEVNAM,R0 .ADDR #DAREA+1,-(SP) EMT .DSTATUS BCS O.BAD MOV DAREA+4,R1 BEQ O.BAD BR O.GOOD DAREA: .BLKW 4 DEVNAM: .RAD50 /DY / BAREA: .BYTE 17,10 .BLKW .BLKW .WORD 256. .WORD 0 .IIF GT,<.-356> .ERROR .SBTTL SET OPTIONS .DRSET CSR, 160000, O.CSR, OCT .IF EQ DYT$O .DRSET VECTOR, 500, O.VEC, OCT .IFF; EQ DYT$O .DRSET VECTOR, +1, O.VEC, OCT .DRSET CSR2, 160000, O.CSR2, OCT .DRSET VEC2, +1+6, O.VEC2, OCT .ENDC .DRSET RETRY, 127., O.RTRY, NUM .IF NE ERL$G .DRSET SUCCES, -1, O.SUCC, NO .ENDC .DRSET WRITE, 1, O.WP, NO BTCSR = ++1000 O.CSR: CMP R0,R3 BLO O.BAD MOV R0,INSCSR MOV R0,DISCSR .ADDR #BAREA+4,R1 .ADDR #1000,R2 MOV R2,(R1) MOV #BTCSR/1000,-(R1) TST -(R1) MOV R0,R3 MOV R1,R0 EMT 375 BCS O.BAD MOV R3,(R2) MOV R1,R0 INCB 1(R0) EMT 375 BCS O.SYWL MOV R1,R0 DECB 1(R0) MOV #1,2(R0) EMT 375 BCS O.BAD .IF EQ DYT$O MOV R3,DYCSA .IFF MOV R3,DYCSR .ENDC O.GOOD: TST (PC)+ O.BAD: SEC RETURN O.SYWL: ADD #2,@SP BR O.BAD .IF EQ DYT$O O.VEC: CMP R0,R3 BHIS O.BAD BIT #3,R0 BNE O.BAD MOV R0,DYSTRT BR O.GOOD .IFF; EQ DYT$O O.CSR2: CMP R0,R3 BLO O.BAD MOV R0,DYCSR2 MOV R0,DISCS2 BR O.GOOD O.VEC: O.VEC2: CMP R0,#500 BHIS O.BAD BIT #3,R0 BNE O.BAD .ADDR #DY$VTB-1,R3,ADD MOV R0,@R3 BR O.GOOD .ENDC O.RTRY: CMP R0,R3 BHI O.BAD MOV R0,DRETRY BNE O.GOOD BR O.BAD .IF NE ERL$G O.SUCC: MOV #0,R3 N.SUCC: .ASSUME O.SUCC+4 EQ N.SUCC MOV R3,SCSFLG BR O.GOOD .ENDC O.WP: NOP CLR R3 N.WP: .ASSUME O.WP+4 EQ N.WP MOV R3,O.WPF MOV R1,R3 CMP R3,#DYT$O*2+1 BHI O.BAD .ADDR #DYWPRO,R0 ADD R3,R0 MOVB (PC)+,(R0) O.WPF: .BLKW 1 CALL FINDRV BCS O.GOOD CMP @#SYSPTR,R1 BHI 10$ MOV #100000,DYW1-DYLQE(R1) 10$: ADD R3,R1 MOVB O.WPF,DYWPRO-DYLQE(R1) BR O.GOOD .IIF GT,<.-1000> .ERROR .SBTTL DRIVER REQUEST ENTRY POINT .ENABL LSB .DRBEG DY BR DYENT DYWPRO: .REPT DYT$O+1 .BYTE 0,0 .ENDR .ASSUME . LE DYSTRT+1000 .IF NE ERL$G SCSFLG: .WORD 0 .ENDC .ASSUME . LE DYSTRT+1000 .IF NE DYT$O .DRVTB DY,DY$VEC,DYINT .DRVTB ,DY$VC2,DYINT .ASSUME . LE DYSTRT+1000 .ENDC DYENT: MOV (PC)+,(PC)+ DRETRY: .WORD RETRY .ASSUME . LE DYSTRT+1000 DYTRY: .WORD 0 MOV DYCQE,R5 MOV (R5)+,R3 MOV #CSGO!CSRD!CSINT,R4 MOVB (R5)+,R1 MOVB (R5)+,R0 BIC #^C<7>,R0 MOV R0,R2 ASR R0 .IF EQ DYT$O BNE 5$ .ENDC BCC 1$ BIS #CSUNIT,R4 1$: .IF NE DYT$O MOV (PC)+,-(SP) DYCSR = . .WORD DY$CSR .ASSUME . LE DYSTRT+1000 ASR R0 BNE 5$ BCC 2$ MOV (PC)+,(SP) DYCSR2 = . .WORD DY$CS2 .ASSUME . LE DYSTRT+1000 2$: MOV (SP)+,DYCSA .ENDC .IF EQ DY$DD ASL R2 .ADDR #SAVDEN,R2,ADD MOV R2,(PC)+ DENPTR: .WORD 0 BIS @R2,R4 .IFF BIS #CSDN,R4 CMPB R1,#SIZ$FN BNE 3$ .IF EQ MMG$T MOV #DDNBLK,@(R5)+ .IFF MOV #DDNBLK,-(SP) MOV DYCQE,R4 CALL @$PTWRD .ENDC JMP DYDONE .ENDC 3$: .IF EQ MMG$T MOV (R5)+,R0 .IFF CALL @$MPPTR MOV (SP)+,R0 MOV R4,(PC)+ 35$: .BLKW MOV (SP)+,R4 BIT #1700,R4 BNE. DYERR SWAB R4 BIS 35$,R4 .ENDC MOV @R5,WRDCNT BPL 4$ ASL (PC)+ DYW1: .WORD .-. .ASSUME . LE DYSTRT+1000 BCS 33$ CLR -(SP) MOVB Q.UNIT-Q.WCNT(R5),(SP) BIC #<^C3>,(SP) .ADDR #DYWPRO,(SP),ADD; TO UNIT OFFSET TSTB @(SP)+ BNE. DYERR 33$: ADD #CSWRT-CSRD,R4 NEG WRDCNT 4$: ASL R1 BEQ 6$ MOV R1,R5 ADD PC,R1 ADD CHGTBL-.(R1),R4 .IF EQ DY$DD SUB #377*400!SIZ$FN*2,R5 BEQ 7$ .ENDC .IF EQ MMG$T CLR (R0)+ .IFF MOV R4,-(SP) MOV DYCQE,R4 CLR -(SP) CALL @$PTWRD TST (R0)+ MOV (SP)+,R4 .ENDC BR 7$ 5$: JMP DYERR 6$: ASL R3 TST @R5 BEQ DYDONE .IF EQ DY$DD TST @R2 BNE 7$ ASL R3 .ENDC 7$: MOV R0,BUFRAD MOV R3,DYLSN MOV R4,(PC)+ DYFUN2: .WORD 0 .IF EQ DY$DD MOV R5,(PC)+ SIZFLG: .WORD 0 .ENDC MOV #CSINT,R0 CALL INWAIT .BR DYINIT .DSABL LSB .SBTTL START TRANSFER OR RETRY .ENABL LSB DYINIT: .IF EQ DY$DD TST SIZFLG BNE 4$ CALL INWAIT BIT #ESDRY,(R5) BEQ DYERR MOV #DYDSIZ,-(SP) BIT #ESDN,@R5 BEQ 3$ ASL @SP 3$: .IF EQ MMG$T MOV (SP)+,@BUFRAD .IFF MOV DYCQE,R4 CALL @$PTWRD .ENDC BR DYDONE .ENDC 4$: .IF NE MMG$T MOV R0,DYFUN2 .ENDC BIT #1*2,R0 BNE 5$ CALL DOSILO 5$: CALL DOXFER BIT #1*2,R0 BEQ 7$ TST R0 BPL 6$ BIT #ESDD,@R5 BEQ 6$ .IF EQ MMG$T MOV BUFRAD,R2 INC -(R2) .IFF MOV R4,R1 MOV DYCQE,R4 MOV #1,-(SP) SUB #2,Q.BUFF-Q.BLKN(R4) CMP Q.BUFF-Q.BLKN(R4),#20000 BHIS 55$ ADD #20000,Q.BUFF-Q.BLKN(R4) SUB #200,Q.PAR-Q.BLKN(R4) 55$: CALL @$PTWRD MOV R1,R4 .ENDC 6$: CALL DOSILO 7$: TST R0 BMI DYDONE MOV R3,R2 ASL R2 ADD R2,(PC)+ BUFRAD: .WORD 0 .IF NE MMG$T BCC 8$ ADD #10000,R0 .ENDC 8$: INC (PC)+ DYLSN: .WORD 0 SUB R3,(PC)+ WRDCNT: .WORD 0 BHI 4$ BIT #1*2,R0 BNE DYDONE MOV #1,WRDCNT .ADDR #ZERO,R3 MOV R3,BUFRAD .IF NE MMG$T BIC #30000,R0 .ENDC .IF EQ DY$DD MOV #3,R1 BIT #CSDN,R0 BEQ 9$ ASR R1 9$: BIT R1,DYLSN .IFF BIT #1,DYLSN .ENDC BNE 4$ .SBTTL DONE WITH I/O, FINISH UP AND EXIT DYDONE: .IF NE ERL$G TST SCSFLG BNE 10$ MOV DYCQE,R5 MOV #DY$COD*400+377,R4 CALL @$ELPTR .ENDC 10$: CLR @DYCSA 11$: .DRFIN DY DYABRT: MOV (PC)+,-(SP) DYCSA: .WORD DY$CSR .ASSUME . LE DYSTRT+1000 MOV #CSINIT,@(SP)+ CLR DYFBLK+2 BR 11$ DYERR: MOV DYCQE,R4 BIS #HDERR$,@-(R4) BR 10$ .DSABL LSB .SBTTL INWAIT - START FUNCTION AND WAIT FOR INTERRUPT FROM FLOPPY INWAIT: MOV (SP)+,INTRTN MOV R0,@DYCSA RETURN .SBTTL INTERRUPT ENTRY POINT .DRAST DY,5,DYABRT .FORK DYFBLK CALL SETDY BMI DYERR2 INTDSP: JMP @(PC)+ INTRTN: .WORD 0 .SBTTL ERROR HANDLING - CHANGE DENSITY, RETRY DYERR2: .IF EQ DY$DD BIT #ESDNER,@R5 BEQ 5$ MOV DENPTR,R2 BIC (R2)+,R0 NEGB -(R2) INCB (R2)+ BIS -(R2),R0 BMI 4$ BCS 3$ ASR DYLSN BR 4$ 3$: ASL DYLSN 4$: MOV R0,DYFUN2 CMP DYTRY,#RETRY BNE 5$ CALL SETDY BR 9$ .ENDC 5$: .IF NE ERL$G .ADDR #DYRBUF,R3 MOV R3,R2 MOV @R4,(R3)+ MOV @R5,(R3)+ MOV #CSMAIN!CSGO,@R4 6$: BIT #CSTR,(R4) BEQ 6$ MOV R3,(R5) 61$: BIT #CSDONE,(R4) BEQ 61$ MOV DRETRY,R3 SWAB R3 ADD #DYNREG,R3 MOV DYCQE,R5 MOV DYTRY,R4 ADD #DY$COD*400-1,R4 CALL @$ELPTR MOV DYCSA,R4 7$: .ENDC MOV #CSINIT,@R4 MOV #CSINT,R0 CALL INWAIT 9$: DEC DYTRY BEQ DYERR JMP DYINIT .SBTTL DOSILO - INITIATE A SILO FILL OR EMPTY COMMAND DOSILO: MOV (SP)+,INTRTN MOV WRDCNT,R2 BIC #6*2,R0 BPL 1$ MOV R3,R2 1$: MOV R0,@R4 CMP R3,R2 BLOS 2$ MOV R2,R3 BEQ INTDSP 2$: MOV BUFRAD,R2 BR DYDOFN .SBTTL DOXFER - START A SECTOR READ OR WRITE DOXFER: MOV (SP)+,INTRTN MOV R0,@R4 MOV WRDCNT,R2 MOV DYLSN,R3 TST R0 BMI DYDOFN MOV #8.,R2 2$: CMP #26.*200,R3 BHI 3$ ADD #-26.*200,R3 3$: ROL R3 DEC R2 BGT 2$ MOVB R3,R2 CLRB R3 SWAB R3 CMP #12.,R3 ROL R3 ASL R2 ADD R2,R3 ADD R2,R3 ADD R2,R3 ASR R2 INC R2 4$: SUB #26.,R3 BGE 4$ ADD #27.,R3 .BR DYDOFN .SBTTL DYDOFN - START A TRANSFER OR SILO OPERATION DYDOFN: BITB #CSTR!CSDONE,@R4 BEQ DYDOFN BPL DYERR2 MOV R3,@R5 1$: BITB #CSTR!CSDONE,@R4;TRANSFER OR DONE? BEQ 1$ BPL DYERR2 MOV R2,@R5 RETURN .SBTTL SETDY - SET UP REGISTERS SETDY: MOV DYFUN2,R0 MOV #128.,R3 .IF EQ DY$DD TST @DENPTR BNE 1$ ASR R3 1$: .ENDC MOV DYCSA,R4 MOV R4,R5 TST (R5)+ RETURN .SBTTL TABLES, FORK BLOCK, END OF DRIVER ZERO: .WORD 0 .IF EQ DY$DD .WORD CSRDST-CSRD+SPFUNC .WORD 0 .ENDC .WORD CSWRTD-CSRD+SPFUNC .WORD CSWRT-CSRD+SPFUNC .WORD CSRD-CSRD+SPFUNC CHGTBL: .IF EQ DY$DD SAVDEN: .WORD CSDN,CSDN .IF NE DYT$O .WORD CSDN,CSDN .ENDC .ENDC DYFBLK: .WORD 0,0,0,0 .IF NE ERL$G DYRBUF: .BLKW DYNREG .BLKW 4 .ENDC .SBTTL BOOTSTRAP READ ROUTINE .DRBOT DY,BOOT1,READ1 . = DYBOOT+40 BOOT1: JMP @#BOOT-DYBOOT .ENABL LSB . = DYBOOT+210 UNTRED: .WORD CSGO+CSRD+CSDN .WORD CSGO+CSRD+CSDN+CSUNIT READ1: MOV @#B$DEVU,R3 BR 100$ READ: MOV BTUNIT,R3 100$: ASL R3 MOV UNTRED-DYBOOT(R3),REDCMD 1$: ASL R0 2$: MOV (PC)+,R5 BOTCSR: .WORD DY$CSR MOV (PC)+,(R5)+ REDCMD: .WORD 0 MOV R0,-(SP) MOV R0,R3 MOV R0,R4 CLR R0 BR 4$ 3$: SUB #23.,R3 4$: INC R0 SUB #26.,R4 BPL 3$ CMP #-14.,R4 ROL R3 5$: SUB #26.,R3 BPL 5$ ADD #27.,R3 MOV BOTCSR,R4 CALL WAIT MOV R3,@R5 CALL WAIT MOV R0,@R5 6$: BIT #CSDONE,@R4 BEQ 6$ TST @R4 BMI RTRY MOV (PC)+,(R4) EMTCMD: .WORD CSEBUF+CSGO+CSDN;STORE EMTY BUFFER COMMAND HERE MOV #64.,R3 BIT #CSDN,EMTCMD BEQ 7$ ASL R3 7$: CMP R1,R3 BHIS 8$ MOV R1,R3 8$: CALL WAIT MOV R3,@R5 CALL WAIT MOV R2,@R5 9$: BIT #CSDONE,@R4 BEQ 9$ TST @R4 BMI RTRY MOV (SP)+,R0 SUB R3,R1 BLE 10$ ADD R3,R2 ADD R3,R2 INC R0 BR 2$ WAIT: BITB #CSTR!CSDONE,@R4;TRANSFER OR DONE? BMI 11$ BEQ WAIT RTRY: MOV (SP)+,R0 BITB #DNERR,@R5 BEQ BIOERR BIC #CSDN,REDCMD BIC #CSDN,EMTCMD BR 1$ 10$: CLC 11$: RETURN .DSABL LSB . = DYBOOT+576 BOOT: BIT #CSDONE,@BOTCSR BEQ BOOT MOV #10000,SP MOV R0,(PC)+ BTUNIT: .WORD 0 MOV #2,R0 MOV #<4*400>,R1 MOV #1000,R2 CALL READ MOV #READ1-DYBOOT,@#B$READ MOV #B$DNAM,@#B$DEVN MOV BTUNIT,@#B$DEVU JMP @#B$BOOT .DREND DY .END