Trailing-Edge
-
PDP-10 Archives
-
decuslib10-01
-
43,50034/t5.c6
There are no other files named t5.c6 in the archive.
SUBROUTINE SIMM(RET)
C INSTRUCTION SIMULATOR.
C OUTPUT: RET=0 - NO STOP POINT.
C =1 - STOP POINT.
IMPLICIT INTEGER(A-Z)
COMMON/MEM/MEM(4096),MEMROL,MEMROH,ROMF,MEMH ,MEMLIM
COMMON/SCRATCH/REGISTER(9),SAV(9)
EQUIVALENCE (LP,REGISTER(8)),(PC,REGISTER(9)),(ST,REGISTER(1))
EQUIVALENCE (ST,STATUS)
COMMON/CNTRLC/CNTRLC
COMMON/GEN1/ IC,OP,IR,IOLINK,STOP(8),STOPC(8),CAR,RESULT,BW,CAD,
1 BRKN,DEV,FIL,FILN,IRET,NOTYO,NOTYI,SG,SGA,SUBOPA,
2 TYEQTY,ADSTOP,ADSTCL,ADSTFL,ADSTAD,TR1,TR2,TR3,TIME,TIMES,
3 TTYSRC,SERMSK,SERLOW,SERHI,TYOERR,TDEV,TFIL,GROUP,GROUPA,OVR
EQUIVALENCE(TI,T1)
COMMON /GEN2/ PTIDEV,PTIFIL,PTODEV,PTOFIL,TIDEV,TIFIL,NOPTI,
1 NOPTO,PUNCH,GENIOR,TYISTY
COMMON/CONST/MH,ML,MAL,MALC,MLC,M7,M8,SCRBEG,SCREND,C2T7,C2T15,
1 TYO,CON,TYI,BIN,TTYNAM,PTRNAM,DSKNAM,TTOFIL,TTIFIL,
2 NUMINW,CR,LF,TAB,CHRLEN,WRDLEN,B,DOL,BLANK,EQUALS,COMMA,
3 WM0,WM1,WM2,WM3,WM4,WM5,WM6,WM7,WM8,WM9,WM10,WM11,WM12,
4 WM13,WM14,WM15,SL8,APC,ACC,ADR0,
5 TSTION
EQUIVALENCE(ETFLG,ADR0)
COMMON/CHAR/LEGALF,NUM,COMMND,COMMNN,SHIFT,CNTRLU,RUBOUT,
1 ALTMD1,ALTMD2,ALTMD3,DOLLFT,BLANKL ,LEGALN,NUMN,TABLFT,ICHAR,
2 COLON,SLASH
DIMENSION LEGALF(4),NUM(2),COMMND(40,2)
EQUIVALENCE (CRLEFT,COMMND(25,1)),(ARO,COMMND(27,1)),
1 (BARO,COMMND(26,1)),(LFLEFT,COMMND(29,1)),(BLF,COMMND(28,1))
COMMON/GEN3/SOUR,DEST,SD,DD,SM,DM,SREG,DREG
COMMON/MESAGE/MES1,MES1A,MES1B,MES1X,MES2,MES2A,MES2B,MES2X,
1 MES3,MES3A,MES3B,MES3X,MES4,MES4X,MES5,MES5A,MES5B,
2 MES5C,MES5D,MES5X,MES6,MES6X,MES7,MES7X,MES8,MES8A,
3 MES8B,MES8X,MES9,MES9A,MES9B,MES9X,MES10,MES10A,
4 MES10B,MES10X,MES11,MES11X,MES12,MES12X,MES13,MES13X,
5 MES14,MES14X,MES15,MES15X,MES16,MES16X,MES17,MES17X,
6 MES18,MES18X,MES19,MES19X,MES20,MES20A,MES20B,MES20C,
7 MES20D,MES20X,MES21,MES21X,MES22,MES22X,MES23,MES23A,
8 MES23B,MES23X,MES24,MES25,MES25X,MES26,MES26X,
9 MES27,MES27A,MES27B,MES27C,MES27D,MES27X,MES28,MES28X,
1 MES29,MES29A,MES29B,MES29C,MES29D,MES29E,MES29F,MES29X,
2 MES30,MES30X,MES31,MES31X,MES32,MES32A,MES32B,MES32C,
3 MES32D,MES32X,MES33,MES33A,MES33B,MES33C,MES33D,MES33X
4 ,MES20E,MES20F,MES24X
DIMENSION MES1(6),MES2(3),MES3(5),MES4(2),MES5(3),MES6(1),MES7(1),
1 MES8(3),MES9(2),MES10(2),MES11(1),MES12(1),MES13(2),MES14(2),
2 MES15(3),MES16(2),MES17(1),MES18(3),MES19(3),MES20(6),MES21(1)
3 ,MES22(1),MES23(4),MES24(1),MES25(1),MES26(2),MES27(7),
4 MES28(2),MES29(5),MES30(2),MES31(1),MES32(3),MES33(2)
COMMON/MESAG2/MES34,MES34X,MES35,MES35X,MES36,MES36X,
1 MES37,MES37X
DIMENSION MES34(2),MES35(1),MES36(1),MES37(6)
COMMON /GEN4/ DE,SE
COMMON /GEN5/ STDEST
COMMON /CNTRLR/ CNTRLR
COMMON /NOTYOA/ NOTYOA
COMMON/SINGIN/SINGIN
COMMON/XPG/XPG,XPGI,XPGJ,TIMEX
DIMENSION XPG(30,10)
COMMON/DCH/DCH,DCHI,DCHJ,NUMDEV
DIMENSION DCH(10,10)
COMMON/POWTWO/ CT0,CT1,CT2,CT3,CT4,CT5,CT6,CT7
C
C
C DEVICE INDEXES
C
C
COMMON/DEVINX/DEVINX
DIMENSION DEVINX(10,6)
C
C
COMMON/LPOVAD/LPOVAD,LPOVFL,TRAF,WAITF
C START AT 105. LOOPS AT 100
GOTO 105
C CHECK FOR ^C-REENTER.
100 IF(CNTRLC.NE.0)GO TO 101
C LOOK FOR ADDRESS STOP DURING LAST INSTRUCTION.
IF(ADSTOP.NE.IC)GO TO 111
IF(ADSTCL.NE.1.AND.ADSTCL.NE.3)GO TO 111
ADSTFL=1
ADSTAD=IC
111 IF(ADSTFL.EQ.0)GO TO 102
CALL CHA(MES27,MES27A,MES27B,ADSTOP)
CALL CHA(MES27,MES27C,MES27D,ADSTAD)
CALL TTYOS(MES27,1,MES27X,4)
CALL ICRWCS
CALL LIST(MES27,1,MES27X,2)
ADSTFL=0
115 CALL PREG(APC,IC)
112 CALL LIST(MES24,1,MES24X,3)
GO TO 1012
C LOOK FOR A STOP-POINT.
102 I=1
109 IF(STOP(I).EQ. IC)GO TO 108
1010 I=I+1
IF(I.LE.8)GO TO 109
C TEST FOR SINGLE INSTRUCTION MODE.
IF(SINGIN.NE.0)GOTO120
C DO AN INSTRUCTION. SAVE ALL REGISTERS.
C CLEAR FLAGS.
105 CONTINUE
1 CALL SAVE
IC=PC
LPOVFL=0
STDEST=0
ITRAP=-1
HALTF=0
WAITF=0
C CHECK PC. FETCH INSTRUCTION INTO IR.
69 CALL ODD(PC,E)
IF(E.NE.0)GOTO 24
CALL FMW(PC,IR,E)
PC=PC+2
CALL LAND(PC,MAL)
C TRAF CAUSES TRT TRAP. CLEAR IT.
C CHECK FOR T BIT IN STATUS.
TRAF=0
T1=STATUS
CALL LAND(T1,16)
IF(T1.NE.0)TRAF=1
C BREAK IR INTO FIELDS FOR OP CODE DECODING
CALL BXT(SG,IR,WM15,WM15)
CALL BXT(OP,IR,WM14,WM12)
CALL BXT(SUBOPA,IR,WM11,WM9)
CALL BXT(GROUP,IR,WM14,WM9)
CALL BXT(GROUPA,IR,WM15,WM9)
CALL BXT(SGA,IR,WM8,WM8)
C TEST FOR RESERVED BINARY.
IF(OP.GE.7)GOTO 8
C TEST FOR BINARIES
IF(OP.GE.1)GOTO 25
C TEST FOR EMT, TRAP
IF(GROUPA.EQ.68)GOTO 504
C TEST FOR CONDITIONAL BRANCHES
IF(GROUPA.EQ.64.OR.1.LE.SUBOPA.AND.SUBOPA.LE.3)GOTO 73
C TEST FOR BR
IF(GROUPA.EQ.0.AND.SGA.EQ.1)GOTO 10
C TEST FOR UNIMPLEMENTED CODES
IF(SUBOPA.EQ.7)GOTO 8
C TEST FOR OPERATES
IF(GROUPA.EQ.0.AND.SGA .EQ.0)GOTO 9
C DO A JSR,UNARY OR ROT/SHF
CALL BXT(SREG,IR,WM8,WM6)
C TEST FOR BAD ROT,SHF
IF(SUBOPA.EQ.6.AND.SREG.GE.4)GOTO8
74 CALL BXT(DEST,IR,WM5,WM0)
CALL GETMOD(DEST,DD,DM,DREG)
C TEST FOR BAD JSR
IF(SUBOPA.EQ.4.AND.DD+DM.EQ.0)GOTO 64
C CALCULATE DEST EFF ADR.
CALL GETDE(DE,E)
IF(E.NE.0)GOTO 24
CALL GREG(SREG,T1)
C GO DO JSR OR UNARY OR ROT/SHF.
GOTO(11,75,28),SUBOPA-3
GOTO 8
C DISPATCH TO UNARY HANDLERS.
75 GOTO(12,13,14,15,16,17,18,19),SREG+1
C
C BINARIES
C DECODE SOURCE ADR. FETCH SOURCE OPERAND.
C
25 CALL BXT(SOUR,IR,WM11,WM6)
CALL GETMOD(SOUR,SD,SM,SREG)
SGTMP=SG
IF(OP.EQ.6)SG=0
CALL GETSE(SE,E)
CALL GSOR(T1,G)
C DECODE DEST ADR.
CALL BXT(DEST,IR,WM5,WM0)
CALL GETMOD(DEST,DD,DM,DREG)
CALL GETDE(DE,F)
C IF SOURCE WAS A REGISTER, GET SOURCE AGAIN.
C THIS FIXES THE BUG MOV R0,(R0)+
IF(SM+SD.EQ.0)CALL GSOR(T1,G)
IF(E+F+G.NE.0)GOTO 24
C DISPATCH TO BINARY HANDLERS.
GOTO(3,6,5,7,800,4,8),OP
C
C CONDITIONAL BRANCHES
C
73 CALL GN(N )
CALL GZ(Z )
CALL GC(CAR)
CALL GV(OVR)
NOVR=OVR+1
CALL LAND(NOVR,1)
TF=SGA
IF(SG.NE.0)GOTO 50
GOTO(42,43,44),SUBOPA
50 GOTO(49,47,48,46),SUBOPA+1
C
C
C
C BEQ-NE
42 CONTINUE
T1=Z
GOTO 60
C BLT-GE
43 CALL LXOR(N,OVR)
T1=N
GOTO 60
C BLE-GT
44 CONTINUE
CALL LXOR(N,OVR)
CALL LOR (Z,N)
T1=Z
GOTO 60
C BMI-PL
49 T1=N
GOTO 60
C BLOS-HI
47 T1=Z
CALL LOR(T1,CAR)
GOTO 60
C BVS-VC
48 T1=OVR
GOTO 60
C BCS-CC, BLO-BHIS
46 T1=CAR
60 CALL LXOR(T1,TF)
IF(T1.EQ.0)GOTO 10
T1=IC+2
GOTO 72
10 CALL BXT(Q,IR,WM7,WM0)
CALL SEXT(Q)
C
C EXECUTE THE BRANCH
C
51 T1=PC
T1=T1+(Q*2)
72 CALL LAND(T1,MAL)
PC=T1
CALL ODD(PC,E)
IF(E.NE.0)GO TO 24
GOTO 26
C
C BINARY OPS
C
C
C MOV
C
3 CONTINUE
C EXTEND SIGN OF SOURCE IF A BYTE.
C IF DEST IS A REG, FORCE WORD MODE.
IF(SG.NE.0)CALL SEXT(T1)
IF(DM+DD.EQ.0)SG=0
C STORE AT DEST ADR.
CALL SDEST(T1,E)
IF(E.NE.0)GOTO 24
CALL GC(CAR)
OVR=0
RESULT=T1
GOTO20
C
C ADD
C
4 CONTINUE
C IF BYTE, DO A SUB.
IF(SGTMP.NE.0)GO TO 500
39 CONTINUE
TIMES=TIME
CALL GDEST(T2,F)
TIME=TIMES
IF(F.NE.0)GOTO 24
40 CALL ADD(T1,T2,T3,CAR,OVR)
22 CALL SDEST(T3,E)
23 RESULT=T3
GOTO 20
C
C SUB
C
C SET SUBTRACT FLAG.
500 SUBA=1
GOTO 21
C
C CMP
C
C SET COMPARE FLAG.
6 SUBA=0
21 CONTINUE
71 CONTINUE
TIMES=TIME
CALL GDEST(T2,F)
IF(SUBA.NE.0)TIME=TIMES
IF(F.NE.0)GOTO 24
IF(SUBA.NE.0)GOTO 35
T3=T1
T1=T2
T2=T3
35 CALL SUB(T1,T2,T3,CAR,OVR)
C SUPPRESS STORE OF DEST IF A COMPARE.
IF(SUBA.NE.0)GOTO 22
GOTO 23
C
C BIT
C
5 CONTINUE
CALL GDEST(T3,E)
IF(E.NE.0)GOTO 24
CALL LAND(T3,T1)
CALL GC(CAR)
OVR=0
GOTO 23
C
C BIC
C
7 TIMES=TIME
CALL GDEST(T2,E)
TIME=TIMES
IF(E.NE.0)GOTO 24
CALL LNOT(T1)
CALL LAND(T2,T1)
501 T3=T2
502 CALL GC(CAR)
OVR=0
GOTO 22
C
C BIS
C
800 CONTINUE
TIMES=TIME
CALL GDEST(T3,E)
TIME=TIMES
IF(E.NE.0)GOTO 24
CALL LOR(T3,T1)
GOTO 502
C
C JSR
C
11 CONTINUE
C FIX JSR R,(R)+
IF(DM.EQ.1.AND.DD.EQ.0)CALL GREG(DREG,DE)
CALL PUSHLP(T1,E)
IF(E.NE.0)GOTO24
CALL PREG(SREG,PC)
PC=DE
CALL ODD(PC,E)
IF(E.NE.0)GOTO 24
GOTO 26
C
C ROT/SHIFT GROUP
C
28 I=1
27 GOTO(29,30,31,32),SREG+1
C
C ROT-R
C
29 CONTINUE
TIMES=TIME
CALL GDEST(T1,E)
TIME=TIMES
IF(E.NE.0)GOTO 24
CAR=T1
CALL LAND(CAR,1)
CALL GC(T4)
IF(T4.EQ.0)GOTO 34
T4=C2T7
IF(SG.EQ.0)T4=C2T15
34 CALL BXT(T3,T1,WM15,WM1)
T3=T3+T4
CALL SC(CAR)
OVR=0
IF(T4.NE.0)OVR=1
CALL LXOR(OVR,CAR)
CALL SDEST(T3,E)
IF(E.NE.0)GOTO 24
33 CONTINUE
GOTO 23
C
C ROT-L
C
30 CONTINUE
TIMES=TIME
CALL GDEST(T1,E)
TIME=TIMES
IF(E.NE.0)GOTO 24
T2=C2T7
IF(SG.EQ.0)T2=C2T15
CAR=T1
CALL LAND(CAR,T2)
CALL GC(T4)
T3=0
CALL BTX(T3,WM15,WM1,T1)
T3=T3+T4
CALL SC(CAR)
OVR=T3
CALL LAND(OVR,T2)
CALL LXOR(OVR,CAR)
CALL SDEST(T3,E)
IF(E.NE.0)GOTO 24
36 CONTINUE
GOTO 23
C
C SHIFT-R
C
31 CONTINUE
TIMES=TIME
CALL GDEST(T1,E)
TIME=TIMES
IF(E.NE.0)GOTO 24
CAR=T1
CALL LAND(CAR,1)
CALL SC(CAR)
T2=C2T7
IF(SG.EQ.0)T2=C2T15
T4=T1
CALL LAND(T4,T2)
CALL BXT(T3,T1,WM15,WM1)
T3=T3+T4
CALL SDEST(T3,E)
IF(E.NE.0)GOTO 24
OVR=0
IF(T4.NE.0)OVR=1
CALL LXOR(OVR,CAR)
37 CONTINUE
GOTO 23
C
C SHIFT-L
C
32 CONTINUE
TIMES=TIME
CALL GDEST(T1,E)
TIME=TIMES
IF(E.NE.0)GOTO 24
T2=C2T7
IF(SG.EQ.0)T2=C2T15
CAR=T1
CALL LAND(CAR,T2)
CALL SC(CAR)
T3=0
CALL BTX(T3,WM15,WM1,T1)
CALL SDEST(T3,E)
IF(E.NE.0)GOTO 24
OVR=T3
CALL LAND(OVR,T2)
CALL LXOR(OVR,CAR)
38 CONTINUE
GOTO 23
C
C UNARIES
C
C
C CLR
C
12 CONTINUE
RESULT=0
CALL SDEST(RESULT,E)
IF(E.NE.0)GOTO 24
CAR=0
OVR=0
GOTO 20
C
C COM
C
13 TIMES=TIME
CALL GDEST(T3,E)
TIME=TIMES
IF(E.NE.0)GOTO 24
CALL LXOR(T3,MAL)
CAR=1
OVR=0
GOTO 22
C
C INC
C
14 T2=1
41 TIMES=TIME
CALL GDEST(T1,E)
TIME=TIMES
IF(E.NE.0)GOTO 24
CALL ADD(T1,T2,T3,T4,OVR)
CALL GC(CAR)
GOTO 22
C
C DEC
C
C ADD A -1.
15 T2=MAL
GOTO 41
C
C NEG
C
C PERFORM DEST=0-DEST.
16 SUBA=1
TIMES=TIME
CALL GDEST(T1,E)
TIME=TIMES
IF(E.NE.0)GOTO 24
T2=0
GOTO 35
C
C ADC
C
17 CONTINUE
CALL GC(T1)
GOTO 39
C
C SBC
C
18 SUBA=1
CALL GC(T1)
GOTO 71
C
C TST
C
19 T1=0
GOTO 39
C
C OPERATES (INCLUDING JMP AND SWAB)
C
9 CALL BXT(X,IR,WM4,WM0)
CALL BXT(SUBOPB,IR,WM7,WM5)
IF(SUBOPB.EQ.0)GOTO 65
IF(SUBOPB.EQ.4)GOTO 66
IF(SUBOPB.EQ.5)GOTO 67
IF(SUBOPB.EQ.2.OR.SUBOPB.EQ.3.OR.SUBOPB.GE.6)GOTO 90
GOTO 8
C DO TO JMP OR SWAB
C CALC DEST EFF ADR.
90 CALL BXT(DEST,IR,WM5,WM0)
CALL GETMOD(DEST,DD,DM,DREG)
C CHECK FOR ILLEGAL JMP.
IF(DD+DM.EQ.0.AND.SUBOPB.LT.6)GOTO 64
CALL GETDE(DE,E)
IF(E.NE.0)GOTO 24
IF(SUBOPB.GE.6)GOTO 91
C DO A JMP.
C FIX JMP (R)+
IF(DD.EQ.0.AND.DM.EQ.1)CALL GREG(DREG,DE)
PC=DE
CALL ODD(PC,E)
IF(E.NE.0)GOTO 24
GOTO 26
C DO A SWAB
91 TIMES=TIME
CALL GDEST(T1,E)
TIME=TIMES
IF(E.NE.0)GOTO 24
T3=0
CALL BXT(T3,T1,WM15,WM8)
CALL BTX(T3,WM15,WM8,T1)
CALL SDEST(T3,E)
CAR=0
OVR=0
SG=1
GOTO 23
C DISPATCH TO OPERATES.
65 IF( X.GT.5)GOTO 8
GOTO(68,94,76,52,53,54),X+1
C
C HALT-WAIT
94 WAITF=1
GOTO 26
68 HALTF=1
GOTO 26
C DO THE HALT. DISPLAY R0.
107 CALL CWA(MES2,MES2A,MES2B,PC)
CALL TTYOS(MES2,1,MES2X)
CALL ICRWCS
CALL LIST(MES2,1,MES2X,4)
CALL GREG(0,I)
CALL CWA(MES9,MES9A,MES9B,I)
CALL LIST(MES37,1,MES37X,1)
CALL LIST(MES9,1,MES9X,3)
1012 CALL LIST(MES6,1,1,1)
1013 RET=0
RETURN
C
C RTI
C
76 CALL POPLP(PC,E)
CALL POPLP(STATUS,F)
CALL ODD(PC,T1)
IF(T1+E+F.NE.0)GOTO 24
GOTO 26
C
C TRT
C
52 CONTINUE
ITRAP=12
GOTO 26
C
C IOT
C
53 CONTINUE
ITRAP=16
GOTO 26
C
C RESET
C
54 CONTINUE
CALL RESET
GOTO 26
C
C RTS
C
66 DREG=X
IF(X.GT.7)GOTO 8
CALL GREG(DREG,T2)
CALL ODD(T2,E)
IF(E.NE.0)GOTO 24
PC=T2
CALL POPLP(T1,E)
IF(E.NE.0)GOTO 24
CALL PREG(DREG,T1)
GOTO 26
C
C CC-DIDDLES
C
67 M=0
IF(X.GT.15)M=1
DO 81 I=1,4
J=WRDLEN-I
CALL BXT(K,X,J,J)
IF(K.EQ.0)GOTO 81
GOTO(84,85,86,87),I
84 CALL SC(M)
GOTO 81
85 CALL SV(M)
GOTO 81
86 CALL SZ(M)
GOTO 81
87 CALL SN(M)
81 CONTINUE
GOTO 26
C
C EMT,TRAP
C
504 CONTINUE
ITRAP=24
IF(SGA.NE.0)ITRAP=28
GOTO 26
C
C END OF INSTRUCTION-SET CC-S.
C
20 CALL NRMSET
C DO THE TRACE FUNCTION.
26 IF(TR3.EQ.0)GOTO 61
IF(IC.LT.TR1.OR.IC.GT.TR2)GOTO 61
CALL CWA(MES29,MES29A,MES29B,IC)
CALL CWA(MES29,MES29C,MES29D,IR)
CALL GC(I)
CALL GV(J)
CALL GN(K)
CALL GZ(L)
T1= ((I*8+J)*8+K)*8+L
CALL CWA(MES29,MES29E,MES29F,T1)
CALL ICRWCS
CALL LIST(MES29,1,MES29X,4)
C UPDATE PC AND GO TO NEXT INST.
61 CONTINUE
CALL LAND(PC,MAL)
IC=PC
TIMEX=TIMEX+1
STDEST=0
C CHECK FOR A TRAP.
IF(ITRAP.GE.0)GOTO 55
C CHECK FOR SP OVERFLOW.
IF(LPOVFL.EQ.0)GOTO 92
IF(ETFLG.EQ.0)GOTO 62
ITRAP=4
GOTO 55
C CHECK FOR HALT OR T-BIT TRAP.
92 IF(HALTF.NE.0)GOTO 107
IF(TRAF.EQ.0)GOTO 56
ITRAP=12
GOTO 55
56 CONTINUE
C
C DO THE DEVICE SIMULATIONS AND TEST FOR
C INTERRUPT REQUEST.
C
510 CONTINUE
CALL LSRKBD
CALL TTY
CALL HSR
CALL HSP
C SORT THE INTERRUPT REQUESTS.
CURPR=0
CURI=0
CALL GETPRI(MP)
DO 520 I=1,NUMDEV
IF(DCH(I,5).EQ.0)GOTO 520
J=DCH(I,3)
IF(J.LE.MP.OR.J.LE.CURPR)GOTO 520
CURPR=J
CURI=I
520 CONTINUE
C CHECK FOR NO INTERRUPT REQUEST.
IF(CURI.EQ.0)GOTO 521
DCH(CURI,5)=0
ITRAP=DCH(CURI,4)
WAITF=0
GOTO 55
C CHECK FOR WAIT. IF A WAIT,
C KEEP DOING DEVICE SIMULATIONS UNTIL
C AN INTERRUPT IS REQUESTED OR UNTIL
C A ^C-REENTER OCCURS.
521 CONTINUE
IF(WAITF.EQ.0)GOTO 100
IF(CNTRLC.NE.0)GOTO 101
TIMEX=TIMEX+1
GOTO 56
C
C CONTROL-C SEQUENCE
C
101 CNTRLC=0
WAITF=0
C FORCE A HALT.
GOTO 107
C
C BAD MEM-REF, STACK OVERFLOW, ETC.
C
24 IF(ETFLG.EQ.0)GOTO 62
ITRAP=4
GOTO 26
C TRAP NOT ENABLED. RESTORE REGISTERS. PRINT MESSAGE.
C RETURN TO ODT.
62 CALL RESTOR
IC=PC
CALL LAND(IC,MAL)
CALL CHA(MES1,MES1A,MES1B,IC)
CALL TTYOS(MES1,1,MES1X)
CALL ICRWCS
CALL LIST(MES1,1,MES1X,4)
93 LPOVFL=0
TRAF=0
WAITF=0
ITRAP=-1
GO TO 1012
C
C BAD OP-CODE
C
64 CONTINUE
ITRAP=4
IF(ETFLG.NE.0)GOTO 26
PC=IC
CALL CHA(MES3,MES3A,MES3B,IC)
CALL TTYOS(MES3,1,MES3X)
CALL ICRWCS
CALL LIST(MES3,1,MES3X,4)
GOTO 93
C
C STOP-POINT
C
108 PC=IC
C DECREMENT PROCEED COUNT. STOP IF 0.
STOPC(I)=STOPC(I)-1
IF(STOPC(I).NE.0)GO TO 1010
BRKN=I
STOPC(I)=1
CALL CHA(MES5,MES5A,MES5B,IC)
CALL CHA(MES5,MES5C,MES5D,I-1)
CALL TTYO(MES6,1,MES6X,2)
CALL TTYO(MES5,1,MES5X,3)
CALL ICRWCS
CALL LIST(MES5,1,MES5X,4)
CALL LIST(MES6,1,1,1)
RET=1
RETURN
C
C RESERVED INSTRUCTION TRAP HANDLER-PUSH ST,PC. VECTOR AT LOC 10(OCTAL).
C
8 CONTINUE
ITRAP=8
GOTO 26
C
C GENERAL TRAP HANDLER -- INTERNAL TRAPS, INTERRUPTS.
C
55 CALL ODD(LP,E)
IF(E.NE.0)GOTO 103
C SAVE CURRENT SP OVERFLOW FLAG.
TMPF=LPOVFL
LPOVFL=0
CALL PUSHLP(ST,E)
C ON "ERROR ON ERROR", HALT.
IF(E.NE.0)GOTO 103
CALL PUSHLP(PC,E)
IF(E.NE.0)GOTO 103
CALL FMW(ITRAP,PC,E)
IF(E.NE.0)GOTO 103
CALL FMW(ITRAP+2,ST,E)
IF(E.NE.0)GOTO 103
CALL ODD(PC,E)
IF(E.NE.0)GOTO 103
TRAF=0
WAITF=0
HALTF=0
ITRAP=-1
IF(LPOVFL.EQ.0)GOTO 57
C IF SP OVERFLOW OCCURRED DURING TRAP AND
C OVERFLOW WAS NOT SET AT START OF TRAP,
C GO BACK AND TRAP AGAIN.
IF(TMPF.EQ.0)GOTO 55
57 TMPF=0
IC=PC
GOTO 100
C ERROR ON ERROR
103 CONTINUE
CALL LAND(PC,MAL)
GOTO 107
C
C SINGLE INST MODE
C
120 SINGIN=2
CALL ICRWCS
GOTO 1012
END