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