! file node_umcs !********************* !* umcs/umcy * !* date: 05.apr.82 * !!!!!!!!!!!!!!!!!!!!!! ! umc control program !stack = 140 %control 1 %include "deimosperm" %conststring (7) vsn = "vsn001b" %begin %constinteger umc control = 18 %recordformat xxf(%integer dummy) %recordformat parf(%integer type, %c (%record (xxf) %name b %or %integer address), %c %integer len) %recordformat pf(%byteinteger ser, reply, %integer a, b, c) %ownrecord (pf) p %recordformat umc11f(%integer csr, %integerarray spare(0:6), bit(0:3), %c %byteinteger fn, ext, %integer addr, len) %constrecord (umc11f) %name umc == k'006740' %recordformat parmf(%byteinteger err, ext, %integer addr, len) %recordformat conf(%byteinteger int vect, ext, %integer parm addr) %record (conf) %name con %ownrecord (conf) %array cona(0:63); ! 2*no of lines %constintegerarray vector(0:31) = k'400', k'410', k'420', k'430', k'440', k'450', k'460', k'470', k'500', k'510', k'520', k'530', k'540', k'550', k'560', k'570', k'600', k'610', k'620', k'630', k'640', k'650', k'660', k'670', k'700', k'710', k'720', k'730', k'300', k'310', k'320', k'350' %owninteger line no, i par, o par, flag %owninteger type, f, cad, oseg, i, ext bits %owninteger par, mid, pad, px %ownintegerarray raddr(0:7) linkin(umc control) %cycle p_ser = 0; poff(p) %if 0<= p_a <= 31 %start flag = 0 line no = p_a ! first, the address of i par and o par must be put in cona i par = p_b par = map abs(i par, 20, p_reply) %if par = 0 %start printstring("umc: map fails ") flag = 1 -> fail %finish i = map abs(i par, 0, p_reply); ! map off it again px = par par = par+(i par&k'17777')>>6; ! add in page disp cad = i par&k'77'; ! disp in segment - better be seg 6 ! con == cona(line no<<1) con_int vect = vector(line no)>>2 con_ext = par>>10 con_parm addr = par<<6+cad o par = p_c par = px+(o par&k'17777')>>6; ! page disp cad = o par&k'77' con == cona(line no<<1+1) con_int vect = (vector(line no)+4)>>2 con_ext = par>>10 con_parm addr = par<<6+cad ! second, the address of cona(0) must be put in umc cad = addr(cona(0))&k'17777' par = map abs(addr(cona(0)), 64, id) ! map abs(off again ?) map hwr(0) umc_ext = par>>10; ! addr of cona umc_addr = par<<6+cad ; ! ditto umc_len = 4*64-1; ! length of same (-1 is noel bug) ! nb is 2*no of lines *4 umc_fn = 1; ! tell umc to transfer %while umc_fn#0 %cycle; %repeat; ! wait for it umc_fn = 2; ! restart umc_ext = line no %while umc_fn#0 %cycle; %repeat; ! wait for it fail: printstring("umc: line"); write(line no, 1) printstring(" initialised") %if flag = 0 %start printstring(" ok ") %else printstring(" fails"); write(flag, 1); newline %finish p_ser = p_reply; p_reply = umc control p_a = flag pon(p) %finish %repeat %endofprogram