.TITLE DMECHO NWORD=512. ; ; DMECHO.MAC ; ; Echo program for coupled QNECTOR interfaces. ; This interface should have a connection with another QNECTOR where ; the test program DMTEST runs. ; h.h. MAR-83 BAR=172410 WCR=BAR+2 CSR=BAR+4 QNVEC=170 PRIO=4 ;INTERR. PRIORITY COL=20000 STP=400 IE=100 MNT=10 CE=4 SND=2 GO=1 .MCALL .SPND,.RSUM,.SYNCH,.EXIT,.PROTECT,.UNPROTECT .MCALL .INTEN,.PRINT,.GTJB,.DEVICE,.QSET,.SERR ; .ENABL LC ; START: MOV #0,@#CSR .DEVICE #AREA,#DLIST MOV #JOB,R5 .GTJB #AREA,R5 MOV (R5),SYNBLK+2 MOV #QNVEC,R1 .PROTECT #AREA,R1 BCS ERRV MOV #QNINT,(R1)+ MOV #340,(R1) BR NORMAL ERRV: .PRINT #VERR .EXIT VERR: .ASCIZ /QN: vector in use!/ .EVEN NORMAL: .PRINT #STRTXT MOV #BUF,@#BAR MOV #-NWORD,@#WCR ; MOV #CE+IE+GO,@#CSR ;SET INTERRUPT ENABLE RECEIVER MOV #SND+CE+IE+GO,@#CSR ;SET IE. RECEIVER, collis. test .SPND ;WAIT for data transmitted+received or errors ERROR: MOV @#CSR,R0 BPL EX BIT #COL,R0 BNE COLLIS .PRINT #NXMERR .EXIT COLLIS: .PRINT #COLERR EX: .EXIT ; Interrupt service: ; ------------------ ; ; QNINT: .INTEN PRIO MOV @#CSR,R4 BMI RESUME ;If minus -> error MOV #BUF,@#BAR ;Prepare next MOV #-NWORD,@#WCR ; transfer BIT #SND,R4 BNE RECEIV MOV #CE+SND+IE+GO,@#CSR ;Set interrupt for TX RETURN RECEIV: MOV #CE+IE+GO,@#CSR ;Set interrupt for RECEIVER RETURN RESUME: CLR @#CSR .SYNCH #SYNBLK BR SFAIL .RSUM RETURN ; SFAIL: .PRINT #SYNERR .EXIT SYNERR: .ASCIZ /?DMECHO-F-Synch fail/ .EVEN ; ; Storage: ; BUF: .BLKW NWORD DLIST: .WORD CSR .WORD 0 .WORD 0 ;DLIST TERMINATOR SYNBLK: .WORD 0,0,0,0,5,-1,0 JOB: .BLKW 8. AREA: .BLKW 5 STRTXT: .ASCII /?DMECHO-I-QN connection test/<015><012> .ASCIZ /----------------------------/ NXMERR: .ASCIZ /?DMECHO-F-Non existing memory error/ COLERR: .ASCIZ /?DMECHO-F-Collision error/ .EVEN .END START ;