!************ !* 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