/*---------- Subroutines for CAMAC ----------------*/ /* PPI AT-2, K0607 */ // A.N. Kirpotin. 12.01.1996. // modifyed by mnk 04/96 // oldppi.c - делает из этого смирновский naf( // oldppi читает (include )этот текст #define ccstat 0x250 #define cccmd 0x252 #define ccdata 0x254 #define ccpipe 0x256 #define ccncr0 0x2000 /* Crate #0 address.+timer enable */ #define ccncr1 0x2200 /* Crate #1 address. */ #define ccread 0x1000 /* Read bit. */ static int ccncr=0x2000, ccnaf=0x3010; /* set crate number */ void camac_crate (int crate) {ccncr = (crate&1) ? ccncr1 : ccncr0;} /* Execute C. */ void camac_c (void) {outport (cccmd, ccncr); outport (ccpipe, 0x100);} /* Execute Z. */ void camac_z (void) {outport (cccmd, ccncr); outport (ccpipe, 0x200);} static void camac_qx (int *q, int *x) { int stat = inport (ccstat); *q=0; *x=0; if (!(stat&02000)) (*q)++; if (!(stat&04000)) (*x)++;} int naf_0 (int n, int a, int f, int *q) {int x; ccnaf=((n&037)<<4)|(a&017)|ccncr; outport (cccmd, ccncr); outport (ccpipe, f&037); outport (cccmd, ccnaf); outport (ccpipe, 0); camac_qx (q, &x); return x;} int naf_w2 (int n, int a, int f, int data, int *q) { int x; ccnaf=((n&037)<<4)|(a&017)|ccncr; outport (cccmd, ccncr); outport (ccpipe, f&037); outport (cccmd, ccnaf); outport (ccpipe, data); camac_qx (q, &x); return x;} int naf_w3 (int n, int a, int f, long data, int *q) {union li2 {long l; int i[2];} d; int x; ccnaf=((n&037)<<4)|(a&017)|ccncr; d.l = data; outport (cccmd, ccncr); outport (ccpipe, f&037); outport (cccmd, ccncr+2); outport (ccpipe, d.i[1]); outport (cccmd, ccnaf); outport (ccpipe, d.i[0]); camac_qx (q, &x); return x;} int naf_r2 (int n, int a, int f, int *data, int *q) {int x; ccnaf=(((n&037)<<4)|(a&017)|ccncr)|ccread; outport (cccmd, ccncr); outport (ccpipe, f&037); outport (cccmd, ccnaf); inport (ccpipe); *data = inport (ccdata); camac_qx (q, &x); return x;} int naf_r3 (int n, int a, int f, long *data, int *q) {union li2 {long l; int i[2];} d; int x; ccnaf=(((n&037)<<4)|(a&017)|ccncr)|ccread; outport (cccmd, ccncr); outport (ccpipe, f&037); outport (cccmd, ccnaf); inport (ccpipe); d.i[0] = inport (ccdata); camac_qx (q, &x); outport (cccmd, ((ccncr+2)|ccread)); inport (ccpipe); d.i[1] = inport (ccdata); d.i[1] &= 0377; *data = d.l; return x;}