.TITLE DMTEST NWORD=1. ; ; DMTEST.MAC ; ; Test for coupled QNECTOR interfaces. ; This interface should have a connection with another QNECTOR where ; the program DMECHO 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 CLR TSTWRD ;1ST TEST CODE AGAIN: MOV #NWORD,R3 MOV #BUF,R4 MOV #BUFSAV,R5 BFLOOP: MOV TSTWRD,(R4)+ ;data to be transmitted. CMP #512.,TSTWRD BEQ 1$ MOV TSTWRD,(R5)+ ;data to be preserved. BR 2$ 1$: CLR (R5)+ ;WRONG(**TEST**)data to be preserved. 2$: ; INC TSTWRD ADD #8.,TSTWRD SOB R3,BFLOOP FAST: MOV #-NWORD,@#WCR MOV #BUF,@#BAR MOV #SND+CE+IE+GO,@#CSR ;SET INTERRUPT ENABLE X .SPND ;WAIT for data transmitted+received or errors MOV @#CSR,R0 BMI ERROR INC NRPASS ;PRINT PASS# ; cmp #2500.,nrpass ; bne fast MOV NRPASS,R0 MOV #TEXT0,R1 CALL CNV10 .PRINT #TEXT MOV #7,R0 MOV #TEXT0,R1 1$: MOVB #' ,(R1)+ SOB R0,1$ ; Compare transmitted with received data MOV #NWORD,N MOV #BUFSAV,R3 MOV #BUF,R4 COMPAR: MOV (R4)+,R5 MOV (R3)+,R0 CMP R0,R5 BNE DATERR DEC N BNE COMPAR BR AGAIN DATERR: MOV #TEXTRC,R1 ;R0=RECEIVED CALL CNVBIN MOV R5,R0 ;R5=TRANSMITTED MOV #TEXTXT,R1 CALL CNVBIN MOV N,R0 MOV #TXTCER,R1 CALL CNV10 .PRINT #TXTERR CLRTXT: MOV #7,R0 MOV #TXTCER,R1 2$: MOVB #' ,(R1)+ SOB R0,2$ DEC N BNE COMPAR BR AGAIN ERROR: BIT #COL,R0 BNE COLLIS .PRINT #NXMERR .EXIT COLLIS: .PRINT #COLERR .EXIT CNV10: MOV R0,-(SP) ;Converts binairy value CLR R0 ;in R0 to ASCII in buffer 1$: INC R0 ;pointed to R1 SUB #10.,@SP BGE 1$ ADD #72,@SP DEC R0 BEQ 2$ CALL CNV10 2$: MOVB (SP)+,(R1)+ RETURN CNVBIN: MOV #16.,R2 ADD #16.,R1 MOV R0,-(SP) LOOP: MOV (SP),R0 BIC #177776,R0 ADD #'0,R0 MOVB R0,-(R1) ASR (SP) SOB R2,LOOP TST (SP)+ RETURN ; ; Interrupt service: ; ------------------ ; ; QNINT: .INTEN PRIO MOV @#CSR,R4 BMI RESUME ;If minus -> error BIT #SND,R4 BEQ RESUME MOV #NWORD,R5 MOV #BUF,R4 ILOOP: CLR (R4)+ ;Cleanup input buffer SOB R5,ILOOP MOV #BUF,@#BAR MOV #-NWORD,@#WCR 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 /?DMTEST-F-Synch fail/ .EVEN ; ; Storage: ; N: .WORD 0 BUF: .BLKW NWORD BUFSAV: .BLKW NWORD CERROR: .WORD 0 ;COMMUNIC. ERROR COUNT. NRPASS: .WORD 0 TSTWRD: .WORD 0 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 /?DMTEST-I-QN connection TEST/<015><012> .ASCIZ /---------------------------/ TEXT: .ASCII /DMTEST-Pass nr. : / TEXT0: .ASCIZ / ./ TXTERR: .ASCII /Word RC: / TEXTRC: .ASCII / /<015><012> .ASCII /Word XT: / TEXTXT: .ASCIZ / / .ASCII / Error at word nr.: / TXTCER: .ASCII / ./<015><012> NXMERR: .ASCIZ /?DMTEST-F-Non existing memory error/ COLERR: .ASCIZ /?DMTEST-F-Collision error/ .EVEN .END START ;