!************ !* moth6s * !* 14.jul.81* !************ %control 1 %include "deimosperm" %begin %recordformat pf(%byteinteger service, reply, %integer a1, a2, a3) %record (pf)p %constintegername sr0 == k'117572' ! indexed into seg 4 %constintegername sr2 == k'117576' %routinespec octal(%integer n) %recordformat psectf(%integer q, %c %byteinteger state, id, %byteintegerarray %c name(0:4)) %constinteger mess lim = 7 %conststring (13) %array flts(0:mess lim) = "not ready!", "bad segment", "address error", "illegal instr", "bpt trap", "illegal svc", "bad ser", "time fault" %switch sw(0:mess lim) %recordformat d1f(%integer x) %recordformat d2f(%record (psectf) %name x) %record (d1f)d1 %record (d2f) %name d2 %record (psectf) %name pst %integer i, j, k, fault, id d2 == d1 linkin(-4); ! address error map hwr(4); ! to segment 4 %cycle p_service = 0 poff(p) %if p_service = 7 %start id = p_reply; fault = 0 %else %if p_service # (-4)&x'ff' %start printstring("?? ") %continue %finish id = p_a2; fault = p_a3 %finish ! d1_x = svc(map psect, id, 3) d1_x = map psect(id, 3) pst == d2_x printstring("***") printsymbol(pst_name(i)) %for i = 0, 1, 3; printsymbol(':') printstring(flts(fault)) -> sw(fault) sw(2):sw(3):sw(4):sw(5):sw(7): newline %continue sw(0): ! not ready sw(6): ! bad ser space octal(p_a1); space; octal(p_a3); newline %continue sw(1): ! segmentation trap space octal(sr0); octal(sr2); sr0 = 1; newline; %continue %repeat %routine octal(%integer n) %integer i printsymbol((n >> i)&7+'0') %for i = 15, -3, 0 space %end %endofprogram