CMDRV.401;3=CMDRV.401;2 -11,,/;DBC003/ .IDENT /V4.3/ ;25-MAY-78 -52,52 ; D.B.CURTIS MODIFIED TO ADD OPTION TO ADJUST THE NUMBER OF WORDS TRANSFERED ; IN A COP WHEN THE REQUESTED NUMBER WOULD EXTEND PAST THE END OF THE BUFFER -127,128 ; BIT 3= CRATE OVERRUN ; BIT 4= T02 CAMAC TIMEOUT -236 IE.OVR=IE.SPC ;THIS ERROR OCCURES IF AN ATTEMPT IS MADE TO ACCESS ;OUTSIDE THE DATA BUFFER -248 WCOFOK=40 ;WORDCOUNT OVERFLOW OK IS USED TO INDICATE THAT THE COP ;SHOULD BE MODIFIED IF IT ATTEMPTS TO ACCESS PAST THE END ;OF THE DATA BUFFER -1072 CLR U.BYTR(R5) ;INITALIZE THE NUMBER OF BYTES IN THE TRNSFER -1086,1088 MOV U.DBBR(R5),-(SP) ;SAVE NUMBER OF BYTES IN BUFFER 44$: SUB R0,U.DBBR(R5) ;SUBTRACT OFF ALLOCATED BYTES ;DBC4.0 BPL 47$ ;IF POS, ALL OK BIT #WCOFOK,U.FLAG(R5) ;CHECK IF OVERFLOW OK BEQ 52$ ;IF EQ NO JUST ERROR OUT ADD U.DBBR(R5),R0 ;ADJUST BYTE COUNT TO STOP AT END OF DATA BUF ASR R0 ;CONVERT TO BYTES BIT #MD24,6(R2) ;CHECK IF 24 BIT MODE OPERATION AND IF IT IS, BEQ 45$ ; ASR R0 ;NEED TO MODIFY WORD COUNT AGAIN 45$: NEG R0 ;CONVERT TO NEGATIVE BEFORE SAVING IN COP BIC #^C7777,R0 ;CLEAN OFF CONTROLL BITS OF ADJUSTED WC BIC #^C170000,4(R2) ;AND RESET WORD COUNT IN COP BIS R0,4(R2) ;AND SET INTO THE COP MOV (SP)+,U.DBBR(R5) ;AND RESET THE NUMBER OF FREE BYTES BR 40$ ;AND TRY AGIAN 47$: MOV R0,U.BYTR(R5) ;SAVE NUMBER OF BYTES ALLOWED IN TRANSFER ;DBC4.0 ADD #2,SP ;ADJUST STACK -1096,1099 BR 53$ ;DBC4.0 52$: ADD #2,SP ;ADJUST STACK 50$: MOV #IE.OVR,R0 ;SHOW ATTEMPT TO GO OUTSIDE BUFFER 53$: SEC /