Код:
.SBTTL KMOV01.MAC
.SBTTL DATE
OVERLAY
.IF EQ BF
.IF NE LOAD$$
OVCMD LOAD
CALLR LOADO
.ENDC
OVCMD OL1
CALLR OL1O
.ENDC
.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-<TMRLST-2>(R0)
ADD #SDTM-<TMRLST-2>,R0
.SDTTM
RETURN
; OUTPUT DATE FROM MONITOR
6$: MOV $DATE-$RMON(R0),R2
BEQ 10$
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
JMP R10OUT ;####
;#### CALL R10OUT
;####K0CRLF:
;#### OJMP KCRLF
10$:
.IF EQ CONT$N
KMEROR <Invalid or no date>
.IFF
KMEROR <Invalid or no date>,,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
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 <Invalid time>
.IFF
KMEROR <Invalid time>,,WARN$
.ENDC
14$: RETURN
.DSABL LSB
.ENDC
.IF NE TIME$$!DATE$$
.SBTTL DECIMAL OUTPUT AND CONVERSION
.ENABL LSB
R10ONF:
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 <File created; protected file already exists>,,WARN$
.ENDC
.IF NE BF
OVERLAY
OVCMD OL1
CALLR OL1O
OVCMD LOAD
.ENDC
.SBTTL LOAD
.IF NE LOAD$$
SYNTAX LOAD
PROMPT $DEVICE
REQBLNK
END
SWITS LOAD
ENDNO
NOS
ENDS
LOADO:
.IFTF
.ENABL LSB
.IFT
ITBLE 0
OJSR PC,INITIT
MOV R5,R2
MOV R5,R3
5$: MOVB -(R2),-(R3)
BEQ OLOAD
CMPB #<SPACE>,@R2
BNE 5$
TSTB (R3)+
BR 5$
OLOAD: OADDR DEVSTS,R2
OJSR PC,GETNAM
OJSR PC,OPTCOL
.ENDC
OL1O:
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 <No such job ->,,<BCKASZ>
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,#<COMMA>
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