! programmable clock program ! prog to snoop on a task ! date: 5.mar.81 %control 1 %include "deimosperm" %begin %recordformat clockf(%integer status, data) %constrecord (clockf) %name clock == k'112540'; ! in seg 4 %recordformat pf(%byteinteger ser, reply, %integer a, b, c) %record (pf) p %integer i,j,k,n, sum, maxi, sumn %owninteger speed = 23210; ! every 2.321 secs %owninteger target task = 0 %string (5) targ, s %owninteger repf %ownintegerarray pc(0:385) %string (5) %fn find name(%integer task) %string (5) s %recordformat segf(%integer a,b,c) %recordformat psectf(%byteinteger x, y, id, state, %byteintegerarray %c name(0:3), %byteinteger prio, %integer poffq, %c %integerarray r(0:8), %c %integer trpv, %record (segf) %array seg(0:7)) ! nb: r(0-8) are r0, r1, r2, r3, r4, r5, pc, ps, sp %record (psectf) %name p %recordformat d1f(%integer x) %recordformat d3f(%record (psectf) %name p) %record (d1f)d1 %record (d3f) %name d3 %integer pst, i d3 == d1 pst = mappsect(5, task) %if pst = 0 %then %result = "" d1_x = pst p == d3_p s = "" s=s.tostring(p_name(i)) %for i = 0, 1, 3 %result = s %end %routine octal(%integer j) %integer n %cycle n = 15, -3 ,0 printsymbol((j>>n)&7+'0') %repeat %end map hwr(4) prompt("target?") targ="" %cycle j = 1, 1, 4 readsymbol(i) targ = targ.tostring(i) %repeat linkin(-10) clock_data = speed; ! int every 2.321 secs clock_status = k'113'; ! count down, repeated, 10khz, run, int %cycle p_ser = 0; poff(p) %if p_ser&x'80' # 0 %start i = p_c&x'ff'; ! task id k = p_b; ! pc %if target task = 0 %start s = "" s = find name(i) %if 30 <= i <= 150 %if s = targ %then target task = i %and printstring("got it ") %finish %else %start k = k>>6; ! page disp %if k > 384 %then k = 385 pc(k) = pc(k)+1 %finish %unless 0<=i<=150 %start printstring("funny task:"); write(i, 1); newline %finish %finish %if int = 'S' %then clock_status = 0 %and %stop %if int = 'F' %start speed = 1231; ! .1 of a sec clock_data = speed int = 0 %finish %if int = '?' %start clock_status = 0; ! ints off write(n, 1); newline sum = 0; maxi = 0 %cycle i = 0, 1, 385 %if pc(i) # 0 %start octal(i); printstring("00 ") write(pc(i), 1) newline %finish %repeat newline int = 0 clock_status = k'113' %finish %if int = 'R' %start repf = repf!!1 int = 0; n = 0 %finish %if int = 'C' %or repf # 0 %start int = 0 %finish %repeat %endofprogram