!************
!* MOTH6S *
!* 27.NOV.79*
!************
CONTROL K'101011'
PERMINTEGERFNSPEC SVC(INTEGER EP, R0, R1)
BEGIN
SYSTEMROUTINESPEC LINKIN(INTEGER SER)
SYSTEMROUTINESPEC MAP HWR(INTEGER TOSEG)
RECORDFORMAT PF(BYTEINTEGER SERVICE, REPLY, INTEGER A1, A2, A3)
RECORD (PF)P
CONSTINTEGER MAP PSECT = 16; ! SUPERVISOR CALL
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)
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); 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