EUCSD IMP15 COMPILER 2.0 1 %BEGIN; !HAL-7502 C ENTRY POINT 0 2 ! INPUT/OUTPUT STREAMS 3 %OWNINTEGER MAIN=1, PRE=2; !INPUT D DEFINE 71 D LIT 1 D DEFINE 72 D LIT 2 4 %OWNINTEGER BIN=1, LIS=2; !OUTPUT D DEFINE 73 D LIT 1 D DEFINE 74 D LIT 2 5 ! OPERAND TYPES 6 %OWNINTEGER OPMASK=16_F000; !MACHINE INSTRUCTION OR MACRO D DEFINE 75 D LIT 170000 7 %OWNINTEGER MACRO=16_A000 D DEFINE 76 D LIT 120000 8 %OWNINTEGER FMASK=16_0800; !FORWARD REF D DEFINE 77 D LIT 4000 9 %OWNINTEGER UMASK=16_0200; !UNDEF (FORWARD REF) D DEFINE 100 D LIT 1000 10 %OWNINTEGER REG=16_0080; !REGISTER D DEFINE 101 D LIT 200 11 %OWNINTEGER MEMMASK=16_0040; !MEM REF D DEFINE 102 D LIT 100 12 %OWNINTEGER RELMASK=16_0020; !RELOCATABLE D DEFINE 103 D LIT 40 13 %OWNINTEGER XMASK=16_0010; !INDEXED D DEFINE 104 D LIT 20 14 %OWNINTEGER REGXMASK=16_0090; !=REG+XMASK D DEFINE 105 D LIT 220 15 %OWNINTEGER RELUXMASK=16_0230; !=RELMASK+UMASK+XMASK D DEFINE 106 D LIT 1060 16 ! TEXT POINTERS (BYTE ADDRESSES) 17 %OWNINTEGER CODEPOS; !(NOT ACTUALLY BYTE) D DEFINE 107 D LIT 0 18 %OWNINTEGER STARTPOS; !START OF CURRENT LINE D DEFINE 110 D LIT 0 19 %OWNINTEGER GETPOS; !INPUT POINTER (NEXT) D DEFINE 111 D LIT 0 20 %OWNINTEGER PUTPOS D DEFINE 112 D LIT 0 21 %OWNINTEGER PSEUDOLIM D DEFINE 113 D LIT 0 22 %OWNINTEGER PRINTPOS; !START OF PRINT LINE D DEFINE 114 D LIT 0 23 %OWNINTEGER FAULTPOS D DEFINE 115 D LIT 0 24 %OWNINTEGER MACLIM; !MACRO DEF LIMIT D DEFINE 116 D LIT 0 25 ! OTHER POINTERS (WORD ADDRESSES) 26 %OWNINTEGER MP; !MACRO-CALL PARAMETERS D DEFINE 117 D LIT 0 27 %OWNINTEGER QBASE,QSTART,QLIM,TRANSF; !OPERAND QUEUE D DEFINE 120 D LIT 0 D DEFINE 121 D LIT 0 D DEFINE 122 D LIT 0 D DEFINE 123 D LIT 0 28 %OWNINTEGER DEFMIN; !TAG MIN (DOWN - RESET) D DEFINE 124 D LIT 0 29 %OWNINTEGER DEFLIM; !TAG LIM (FIXED) D DEFINE 125 D LIT 0 30 %OWNINTEGER ALMAX; !ASSEMBLER LAB MAX (UP - RESET) D DEFINE 126 D LIT 0 31 %OWNINTEGER LABMIN; !USER LAB MIN (DOWN - RESET) D DEFINE 127 D LIT 0 32 %OWNINTEGER LABLIM; !USER LAB LIM (FIXED) D DEFINE 130 D LIT 0 33 %OWNINTEGER BP; !BLOCK POINTER (UP - DOWN) D DEFINE 131 D LIT 0 34 %OWNINTEGER NP; !NEST POINTER (DOWN - UP) D DEFINE 132 D LIT 0 35 %OWNINTEGER STORELIM; !(FIXED) D DEFINE 133 D LIT 0 36 37 %INTEGER SYM; !CURRENT SYMBOL 38 %INTEGER TERM; !TAG TERMINATOR 39 %INTEGER FSYM; !FAULT FLAG SYMBOL 40 %OWNINTEGER CHARS=0; !PRINT CHAR COUNT D DEFINE 137 D LIT 0 41 %OWNINTEGER LINES=0; !PRINT LINE COUNT D DEFINE 140 D LIT 0 42 %OWNINTEGER PASS=-1; !CURRENT PASS (-1,0,1) D DEFINE 141 D LIT -1 43 %OWNINTEGER LIST=-1; !LISTING CONTROL D DEFINE 142 D LIT -1 44 %INTEGER ASSCOND,SKIP; !ASSEMBLY CONDITIONS (BIT NEST) 45 %OWNINTEGER SAVE=1; !REG SAVE DISPLACEMENT D DEFINE 145 D LIT 1 46 %OWNINTEGER TEMPS=12; !TEMPORARY REGISTER SET D DEFINE 146 D LIT 14 47 %OWNINTEGER CONTROL=16_40; !OBJECT CODE CONTROL FIELD D DEFINE 147 D LIT 100 48 %OWNINTEGER CHECK=0; !BINARY CHECKSUM D DEFINE 150 D LIT 0 49 %INTEGER LOCTYPE,LOC; !LOCATION COUNTER 50 %INTEGER ACC,ATYPE,AVAL; !MAIN TEMP REGISTER 51 %INTEGER CREG; !CONDITION CODE 52 %INTEGER COND; !CONDITION CODE MASK 53 %INTEGER DREG,DUSE; !DESTINATION REGISTER 54 %INTEGER TYPE,VAL; !CURRENT TYPE,VALUE 55 %INTEGER TAG1,TAG2; !TAG (CHARS 1:3, 4:6) 56 %INTEGER MODE; !ASSEMBLY MODE 57 %INTEGER PEND; !TAG ALREADY RECOGNISED 58 %INTEGER FLAG; !JUMPS 59 60 61 %INTEGER SBOUND 62 SBOUND = FREESTORE-260; !ALLOW FOR INPUT BUFFER C JMS M67 C TAD #-404 C DAC M171 63 SBOUND = SBOUND-256 %IF OUTDEV = 2 C JMS M64 C SAD #2 C SKP C JMP M375 C LAC #-400 C TAD M171 C DAC M171 C DEFINE 375 64 SELECT OUTPUT(LIS) C LAC M74 C JMS M37 65 SBOUND = SBOUND-256 %IF OUTDEV = 2 C JMS M64 C SAD #2 C SKP C JMP M375 C LAC #-400 C TAD M171 C DAC M171 C DEFINE 375 66 %INTEGERARRAY STORE(1:SBOUND) C LAC #1 C DAC M2 C LAC M171 C JMS M11 C DAD M172 67 68 %INTEGERFN CHAR(%INTEGER P) C BLOCK BEGIN 0 69 !BYTE FETCH 70 %OPR 2064;!RCR; %DAC P C CLA!RAR C DAC M174 71 %LAC* P; %OPR 768;!SZL; %JMP L1 C LAC* M174 C SZL C JMP M175 72 %OPR 1040;!RTR; %OPR 1040 C RTR C RTR 73 %OPR 1040; %OPR 1040 C RTR C RTR 74 L1: %AND #255; %JMP* CHAR C DEFINE 175 C AND #377 C JMP* M173 75 %STOP C JMS* M4 C LIT 500 76 %END D DEFINE 174 D LIT 0 D DEFINE 173 D LIT 0 D DAD M174 C ARG -346773 C ARG -273616 C ARG 0 C BLOCK END 173 77 78 %ROUTINE PUT CHAR(%INTEGER K) C BLOCK BEGIN 0 79 !AT PUTPOS WITH POST-INCREMENT 80 %INTEGER P 81 %MONITOR 21 %IF PUTPOS>>1-DEFMIN >= 0 C LAC M112 C CLA!RAR C CMA C TAD M124 C CMA C SPA C JMP M375 C JMS* M4 C LIT 425 C DEFINE 375 82 %LAC PUTPOS; %OPR 2064;!RCR; %DAC P C LAC M112 C CLA!RAR C DAC M176 83 %OPR 768;!SZL; %JMP L1 C SZL C JMP M177 84 %LAC K; %OPR 1032;!RTL; %OPR 1032 C LAC M175 C RTL C RTL 85 %OPR 1032; %OPR 1032; %DAC K C RTL C RTL C DAC M175 86 %LAC #-256; %OPR 513;!SKP!CMA C LAC #-400 C SKP!CMA 87 L1: %LAC #-256; %AND* P; %TAD K; %DAC* P C DEFINE 177 C LAC #-400 C AND* M176 C TAD M175 C DAC* M176 88 %ISZ PUTPOS C ISZ M112 89 %END C JMP* M174 D DEFINE 176 D LIT 0 D DEFINE 175 D LIT 0 D DEFINE 174 D LIT 0 D DAD M175 C ARG -175764 C ARG -121335 C ARG -273616 C BLOCK END 174 90 91 %ROUTINE FAULT(%INTEGER K) C BLOCK BEGIN 0 92 !RECORD (FIRST) FAULT 93 !NOT NECESSARILY CULPABLE IN PASS 0 94 FSYM = K %IF FSYM = ' ' C LAC M136 C SAD #40 C SKP C JMP M375 C LAC M176 C DAC M136 C DEFINE 375 95 %END C JMP* M175 D DEFINE 176 D LIT 0 D DEFINE 175 D LIT 0 D DAD M176 C ARG -315764 C ARG -361224 C ARG 64 C BLOCK END 175 96 97 %ROUTINE PRINT(%INTEGER K) C BLOCK BEGIN 0 98 INTEGER(CODEPOS+CHARS) = K C LAC M107 C TAD M137 C JMS M35 C LAC M177 C DAC* M3 99 CHARS = CHARS+1 C ISZ M137 C NOP 100 %END C JMP* M176 D DEFINE 177 D LIT 0 D DEFINE 176 D LIT 0 D DAD M177 C ARG -175764 C ARG -152622 C ARG 64 C BLOCK END 176 101 102 %ROUTINE PRINT WORD(%INTEGER V) C BLOCK BEGIN 0 103 %ROUTINE PRINT HIT(%INTEGER V) C BLOCK BEGIN 0 104 V = V&15+'0'; V = V+7 %IF V > '9' C AND #17 C TAD #60 C DAC M202 C SMA C TAD #-71 C SPA!SNA C JMP M375 C LAC #7 C TAD M202 C DAC M202 C DEFINE 375 105 PRINT(V) C LAC M202 C JMS M176 106 %END C JMP* M201 D DEFINE 202 D LIT 0 D DEFINE 201 D LIT 0 D DAD M202 C ARG -174764 C ARG -152622 C ARG -132727 C BLOCK END 201 107 %ROUTINE PRINT1(%INTEGER V) C BLOCK BEGIN 0 108 PRINT HIT(V>>4); PRINT HIT(V) C CLA!RAR C CLA!RAR C CLA!RAR C CLA!RAR C JMS M201 C LAC M203 C JMS M201 109 %END C JMP* M202 D DEFINE 203 D LIT 0 D DEFINE 202 D LIT 0 D DAD M203 C ARG -175764 C ARG -152622 C ARG 6421 C BLOCK END 202 110 PRINT1(V>>8); PRINT1(V) C LAC M200 C DAC M2 C LAC #-10 C JMS M12 C JMS M202 C LAC M200 C JMS M202 111 %END C JMP* M177 D DEFINE 200 D LIT 0 D DEFINE 177 D LIT 0 D DAD M200 C ARG -174764 C ARG -152622 C ARG -131021 C BLOCK END 177 112 113 %ROUTINE PRINT LOC C BLOCK BEGIN 0 114 PRINT WORD(LOC) C LAC M152 C JMS M177 115 %IF LOCTYPE&RELMASK # 0 %THEN PRINT('''') %ELSE PRINT(' ') C LAC M151 C AND M103 C SNA C JMP M375 C LAC #47 C JMS M176 C JMP M376 C DEFINE 375 C LAC #40 C JMS M176 C DEFINE 376 116 PRINT(' ') C LAC #40 C JMS M176 117 %END C JMP* M200 D DEFINE 200 D LIT 0 C ARG -174764 C ARG -152622 C ARG -132321 C BLOCK END 200 118 119 %ROUTINE DO NEWLINE C BLOCK BEGIN 0 120 NEWLINE; LINES = LINES+1 C JMS M47 C ISZ M140 C NOP 121 NEWLINES(2) %AND LINES = 0 %IF LINES = 61 C LAC M140 C SAD #75 C SKP C JMP M375 C LAC #2 C JMS M50 C DZM M140 C DEFINE 375 122 %END C JMP* M201 D DEFINE 201 D LIT 0 C ARG -334764 C ARG -202133 C ARG -102327 C BLOCK END 201 123 124 %ROUTINE PRINT LINE C BLOCK BEGIN 0 125 %ROUTINE PRINTIT(%INTEGER SUB) C BLOCK BEGIN 0 126 %OWNINTEGER MARKER=124; !VERTICAL BAR D DEFINE 205 D LIT 174 127 %INTEGER P,Q,K 128 %RETURN %IF CHARS = 0 %AND CHAR(PRINTPOS) = NL C LAC M137 C SZA C JMP M375 C LAC M114 C JMS M173 C SAD #12 C JMP* M203 C DEFINE 375 129 PRINT SYMBOL(FSYM); SPACE C LAC M136 C JMS M45 C JMS M51 130 P = CODEPOS; Q = P+CHARS C LAC M107 C DAC M206 C TAD M137 C DAC M207 131 PRINT SYMBOL(INTEGER(P)) %AND P=P+1 %WHILE P # Q C DEFINE 376 C LAC M206 C SAD M207 C JMP M375 C JMS M35 C LAC* M3 C JMS M45 C ISZ M206 C NOP C JMP M-376 C DEFINE 375 132 %RETURN %IF PRINTPOS = 0 C LAC M114 C SNA C JMP* M203 133 SPACES(17-CHARS) C LAC #21 C CMA C TAD M137 C CMA C JMS M52 134 P = PRINTPOS; Q = 0 C LAC M114 C DAC M206 C DZM M207 135 %CYCLE C DEFINE 376 136 PRINT SYMBOL(MARKER) %IF P = FAULTPOS C LAC M206 C SAD M115 C SKP C JMP M373 C LAC M205 C JMS M45 C DEFINE 373 137 K = CHAR(P); K = SUB %IF P = PSEUDOLIM C LAC M206 C JMS M173 C DAC M210 C LAC M206 C SAD M113 C SKP C JMP M373 C LAC M204 C DAC M210 C DEFINE 373 138 PRINT SYMBOL('''') %IF (K!!Q)&128 # 0 C LAC M210 C XOR M207 C AND #200 C SNA C JMP M373 C LAC #47 C JMS M45 C DEFINE 373 139 %RETURN %IF K = NL C LAC M210 C SAD #12 C JMP* M203 140 PRINT SYMBOL(K&127) C AND #177 C JMS M45 141 P = P+1; Q = K C ISZ M206 C NOP C LAC M210 C DAC M207 142 %REPEAT C JMP M-376 143 %END D DEFINE 210 D LIT 0 D DEFINE 207 D LIT 0 D DEFINE 206 D LIT 0 D DEFINE 204 D LIT 0 D DEFINE 203 D LIT 0 D DAD M204 C ARG -175764 C ARG -152622 C ARG -132614 C BLOCK END 203 144 %RETURN %IF PASS = 0 C LAC M141 C SNA C JMP* M202 145 %UNLESS LIST < 0 %OR (PRINTPOS=0 %AND FSYM=' ' %AND LIST&1=0) %START C LAC M142 C SPA C JMP M375 C LAC M114 C SZA C JMP M374 C LAC M136 C SAD #40 C SKP C JMP M374 C LAC M142 C AND #1 C SNA C JMP M375 C DEFINE 374 146 NEWLINES(3) %IF LINES = 0 C LAC M140 C SZA C JMP M373 C LAC #3 C JMS M50 C DEFINE 373 147 PRINTIT(' ') C LAC #40 C JMS M203 148 DO NEWLINE C JMS M201 149 %FINISH C DEFINE 375 150 %IF FSYM # ' ' %AND OUTDEV # 1 %START C LAC M136 C SAD #40 C JMP M375 C JMS M64 C SAD #1 C JMP M375 151 SELECT OUTPUT(0) C LAC #0 C JMS M37 152 PRINTPOS = STARTPOS %IF PRINTPOS = 0 C LAC M114 C SZA C JMP M373 C LAC M110 C DAC M114 C DEFINE 373 153 PRINT LOC %IF CHARS = 0 C LAC M137 C SNA C JMS M200 154 PRINTIT(NL) C LAC #12 C JMS M203 155 NEWLINE C JMS M47 156 SELECT OUTPUT(LIS) C LAC M74 C JMS M37 157 %FINISH C DEFINE 375 158 FSYM = ' '; PRINTPOS = 0; CHARS = 0 C LAC #40 C DAC M136 C DZM M114 C DZM M137 159 %END C JMP* M202 D DEFINE 202 D LIT 0 C ARG -174764 C ARG -152622 C ARG -132327 C BLOCK END 202 160 161 %ROUTINE PUT WORD(%INTEGER V) C BLOCK BEGIN 0 162 CHECK = CHECK!!V C LAC M150 C XOR M204 C DAC M150 163 SELECT OUTPUT(BIN) C LAC M73 C JMS M37 164 PRINT CH(V>>12&15+CONTROL) C LAC M204 C DAC M2 C LAC #-14 C JMS M12 C AND #17 C TAD M147 C JMS M41 165 PRINT CH(V>>8&15+16_40) C LAC M204 C DAC M2 C LAC #-10 C JMS M12 C AND #17 C TAD #100 C JMS M41 166 PRINT CH(V>>4&15+16_40) C LAC M204 C CLA!RAR C CLA!RAR C CLA!RAR C CLA!RAR C AND #17 C TAD #100 C JMS M41 167 PRINT CH(V&15+16_40) C LAC M204 C AND #17 C TAD #100 C JMS M41 168 CONTROL = 16_50 C LAC #120 C DAC M147 169 SELECT OUTPUT(LIS) C LAC M74 C JMS M37 170 %END C JMP* M203 D DEFINE 204 D LIT 0 D DEFINE 203 D LIT 0 D DAD M204 C ARG -175764 C ARG -121311 C ARG -201534 C BLOCK END 203 171 172 %ROUTINE PLANT VAL C BLOCK BEGIN 0 173 %IF PASS > 0 %START C LAC M141 C SPA!SNA C JMP M375 174 %IF CHARS = 0 %START C LAC M137 C SZA C JMP M373 175 %IF PRINTPOS#0 %THEN PRINT LOC %ELSE %START C LAC M114 C SNA C JMP M371 C JMS M200 C JMP M372 C DEFINE 371 176 PRINT(' '); PRINT(' '); PRINT(' ') C LAC #40 C JMS M176 C LAC #40 C JMS M176 C LAC #40 C JMS M176 177 PRINT(' '); PRINT(' '); PRINT(' ') C LAC #40 C JMS M176 C LAC #40 C JMS M176 C LAC #40 C JMS M176 178 %FINISH C DEFINE 372 179 %FINISH C DEFINE 373 180 PRINT(' ') %IF CHARS = 10 C LAC M137 C SAD #12 C SKP C JMP M373 C LAC #40 C JMS M176 C DEFINE 373 181 PRINT WORD(VAL); PUT WORD(VAL) C LAC M163 C JMS M177 C LAC M163 C JMS M203 182 PRINT('''') %IF TYPE&RELMASK # 0 C LAC M162 C AND M103 C SNA C JMP M373 C LAC #47 C JMS M176 C DEFINE 373 183 PRINT LINE %IF CHARS >= 15 C LAC M137 C SMA C TAD #-17 C SMA C JMS M202 184 %FINISH C DEFINE 375 185 LOC = LOC+1 C ISZ M152 C NOP 186 %END C JMP* M204 D DEFINE 204 D LIT 0 C ARG -174764 C ARG -233622 C ARG -131137 C BLOCK END 204 187 188 %ROUTINE PLANT(%INTEGER V) C BLOCK BEGIN 0 189 %INTEGER THOLD,VHOLD 190 THOLD = TYPE; VHOLD = VAL C LAC M162 C DAC M207 C LAC M163 C DAC M210 191 TYPE = 0; VAL = V C DZM M162 C LAC M206 C DAC M163 192 PLANT VAL C JMS M204 193 TYPE = THOLD; VAL = THOLD C LAC M207 C DAC M162 C LAC M207 C DAC M163 194 %END C JMP* M205 D DEFINE 210 D LIT 0 D DEFINE 207 D LIT 0 D DEFINE 206 D LIT 0 D DEFINE 205 D LIT 0 D DAD M206 C ARG -175764 C ARG -233622 C ARG 64 C BLOCK END 205 195 196 %ROUTINE NEST(%INTEGER K) C BLOCK BEGIN 0 197 NP = NP-1; %MONITOR 23 %IF NP = BP C LAC #-1 C TAD M132 C DAC M132 C SAD M131 C SKP C JMP M375 C JMS* M4 C LIT 427 C DEFINE 375 198 INTEGER(NP) = K C LAC M207 C DAC* M132 199 %END C JMP* M206 D DEFINE 207 D LIT 0 D DEFINE 206 D LIT 0 D DAD M207 C ARG -216764 C ARG -321414 C ARG 0 C BLOCK END 206 200 201 %ROUTINE SET LAB(%INTEGER DEST) C BLOCK BEGIN 0 202 %INTEGER P,Q 203 Q = 0 C DZM M212 204 %CYCLE C DEFINE 376 205 TYPE = INTEGER(NP); P = TYPE&16_3FF+DEFLIM; !DEST SLOT C LAC* M132 C DAC M162 C AND #1777 C TAD M125 C DAC M211 206 NP = NP+1 C ISZ M132 C NOP 207 VAL = INTEGER(NP); !LOC OF JUMP C LAC* M132 C DAC M163 208 NP = NP+1 C ISZ M132 C NOP 209 ATYPE = -1; CREG = -1 C LAC #-1 C DAC M154 C LAC #-1 C DAC M156 210 FLAG = 0; C DZM M170 211 %IF TYPE&16_800 = 0 %START C LAC M162 C AND #4000 C SZA C JMP M373 212 FLAG = 1 %IF DEST-VAL+PASS <= 128 C LAC M210 C CMA C TAD M163 C CMA C TAD M141 C SMA C TAD #-200 C SMA!SZA C JMP M371 C LAC #1 C DAC M170 C DEFINE 371 213 %ELSE %IF TYPE&16_400 # 0 %START C JMP M374 C DEFINE 373 C LAC M162 C AND #2000 C SNA C JMP M373 214 FLAG = 2 %IF DEST-VAL+PASS+PASS = 1 C LAC M210 C CMA C TAD M163 C CMA C TAD M141 C TAD M141 C SAD #1 C SKP C JMP M371 C LAC #2 C DAC M170 C DEFINE 371 215 %FINISH C DEFINE 373 C DEFINE 374 216 %IF PASS = 0 %START C LAC M141 C SZA C JMP M373 217 DEST = DEST-FLAG; INTEGER(P) = DEST C LAC M210 C CMA C TAD M170 C CMA C DAC M210 C LAC M211 C JMS M35 C LAC M210 C DAC* M3 218 %IF FLAG # 0 %START C LAC M170 C SNA C JMP M371 219 LOC = LOC-FLAG C LAC M152 C CMA C TAD M170 C CMA C DAC M152 220 %WHILE P # ALMAX %CYCLE C DEFINE 370 C LAC M211 C SAD M126 C JMP M367 221 P = P+1; INTEGER(P) = INTEGER(P)-FLAG C TAD #1 C DAC M211 C JMS M35 C LAC* M3 C CMA C TAD M170 C CMA C JMS M5 C LAC M211 C JMS M35 C LAC* M0 C DAC* M3 222 %REPEAT C JMP M-370 C DEFINE 367 223 %FINISH C DEFINE 371 224 %ELSE %START C JMP M374 C DEFINE 373 225 FAULT('P') %IF INTEGER(P) # DEST C LAC M211 C JMS M35 C LAC* M3 C SAD M210 C JMP M371 C LAC #120 C JMS M175 C DEFINE 371 226 %FINISH C DEFINE 374 227 %RETURN %IF INTEGER(NP)&16_1000 = 0 C LAC* M132 C AND #10000 C SNA C JMP* M207 228 %IF INTEGER(NP)&16_2000 # 0 %AND Q = 0 %START; !OR C LAC* M132 C AND #20000 C SNA C JMP M373 C LAC M212 C SZA C JMP M373 229 DEST = VAL+1 C LAC #1 C TAD M163 C DAC M210 230 DEST = VAL+2-FLAG %UNLESS TYPE&16_C00 = 16_C00 C LAC M162 C AND #6000 C SAD #6000 C JMP M371 C LAC #2 C TAD M163 C CMA C TAD M170 C CMA C DAC M210 C DEFINE 371 231 Q = 1 C LAC #1 C DAC M212 232 %FINISH C DEFINE 373 233 %REPEAT C JMP M-376 234 %END D DEFINE 212 D LIT 0 D DEFINE 211 D LIT 0 D DEFINE 210 D LIT 0 D DEFINE 207 D LIT 0 D DAD M210 C ARG -145764 C ARG -321324 C ARG 4142 C BLOCK END 207 235 236 %ROUTINE ASSEMBLE C BLOCK BEGIN 0 237 ! 7502 OP-CODES 238 %OWNINTEGER ADD=16_F400, SUB=16_F500, AND=16_F100 D DEFINE 211 D LIT 172000 D DEFINE 212 D LIT 172400 D DEFINE 213 D LIT 170400 239 %OWNINTEGER OR=16_F000, XOR=16_F700, COMP=16_F200 D DEFINE 214 D LIT 170000 D DEFINE 215 D LIT 173400 D DEFINE 216 D LIT 171000 240 %OWNINTEGER COPY=16_F300 D DEFINE 217 D LIT 171400 241 %OWNINTEGER LOADI=16_6000, SKIDI=16_7000, ADDI=16_8000 D DEFINE 220 D LIT 60000 D DEFINE 221 D LIT 70000 D DEFINE 222 D LIT 100000 242 %OWNINTEGER ANDI=16_9000 D DEFINE 223 D LIT 110000 243 %OWNINTEGER BOC=16_5800, BOCR=16_5000, JUM=16_4000 D DEFINE 224 D LIT 54000 D DEFINE 225 D LIT 50000 D DEFINE 226 D LIT 40000 244 %OWNINTEGER SKIP=16_4002, LOADC=16_20F2, ROT=16_3000 D DEFINE 227 D LIT 40002 D DEFINE 230 D LIT 20362 D DEFINE 231 D LIT 30000 245 %OWNINTEGER LOAD=16_2000, STORE=16_2008 D DEFINE 232 D LIT 20000 D DEFINE 233 D LIT 20010 246 247 %INTEGER Q,NQ,OP,K,LITVAL,TYPE1,VAL1,FREE 248 %SWITCH ASS(-30:-1) 249 250 %ROUTINE COMBINE C BLOCK BEGIN 0 251 %INTEGER I,J,K 252 I = 11; K = 2048 C LAC #13 C DAC M246 C LAC #4000 C DAC M250 253 I=I-1 %AND K=K>>1 %WHILE K&TYPE1 = 0 %AND I # 0 C DEFINE 376 C LAC M250 C AND M241 C SZA C JMP M375 C LAC M246 C SNA C JMP M375 C TAD #-1 C DAC M246 C LAC M250 C CLA!RAR C DAC M250 C JMP M-376 C DEFINE 375 254 J = K C LAC M250 C DAC M247 255 I =I-1 %AND J=J>>1 %WHILE J&VAL1 = 0 %AND I # 0 C DEFINE 376 C LAC M247 C AND M242 C SZA C JMP M375 C LAC M246 C SNA C JMP M375 C TAD #-1 C DAC M246 C LAC M247 C CLA!RAR C DAC M247 C JMP M-376 C DEFINE 375 256 VAL = VAL< 127 C LAC M170 C SNA C JMP M373 C LAC M247 C SMA!CMA C SKP!CMA C TAD #1 C SMA C TAD #-177 C SPA!SNA C JMP M373 C LAC #112 C JMS M175 C DZM M247 C DEFINE 373 271 %IF !I! <= 127 %START C LAC M247 C SMA!CMA C SKP!CMA C TAD #1 C SMA C TAD #-177 C SMA!SZA C JMP M373 272 %IF TYPE&UMASK = 0 %OR FLAG # 0 %START C LAC M162 C AND M100 C SNA C JMP M370 C LAC M170 C SNA C JMP M371 C DEFINE 370 273 PLANT(BOC+(COND!!1)<<8+I&255) C LAC M224 C JMS M5 C LAC M157 C XOR #1 C DAC M2 C LAC #10 C JMS M12 C TAD* M0 C JMS M5 C LAC M247 C AND #377 C TAD* M0 C JMS M205 274 %RETURN C JMP* M246 275 %FINISH C DEFINE 371 276 FAULT('S') %IF LIST >= 0 %AND LIST&8 # 0 C LAC M142 C SPA C JMP M371 C AND #10 C SNA C JMP M371 C LAC #123 C JMS M175 C DEFINE 371 277 %FINISH C DEFINE 373 278 PLANT(BOC+COND<<8+2) C LAC M224 C JMS M5 C LAC M157 C DAC M2 C LAC #10 C JMS M12 C TAD* M0 C TAD #2 C JMS M205 279 %FINISH C DEFINE 376 280 PLANT(JUM+(VAL-LOC)&4095) C LAC M226 C JMS M5 C LAC M163 C CMA C TAD M152 C CMA C AND #7777 C TAD* M0 C JMS M205 281 %END C JMP* M246 D DEFINE 250 D LIT 0 D DEFINE 247 D LIT 0 D DEFINE 246 D LIT 0 C ARG -174764 C ARG -233622 C ARG -132513 C BLOCK END 246 282 283 %ROUTINE SET JUMP(%INTEGER CASE) C BLOCK BEGIN 0 284 %INTEGER THOLD,VHOLD,FHOLD 285 CASE = CASE+16_0800 %IF COND&6 = 0 C LAC M157 C AND #6 C SZA C JMP M375 C LAC #4000 C TAD M250 C DAC M250 C DEFINE 375 286 CASE = CASE+16_0400 %IF COND&1 # 0 C LAC M157 C AND #1 C SNA C JMP M375 C LAC #2000 C TAD M250 C DAC M250 C DEFINE 375 287 ALMAX = ALMAX+1; %MONITOR 22 %IF ALMAX = LABMIN C ISZ M126 C NOP C LAC M126 C SAD M127 C SKP C JMP M375 C JMS* M4 C LIT 426 C DEFINE 375 288 NEST(LOC); NEST(ALMAX-DEFLIM+CASE) C LAC M152 C JMS M206 C LAC M126 C CMA C TAD M125 C CMA C TAD M250 C JMS M206 289 THOLD = TYPE; VHOLD = VAL; FHOLD = FLAG C LAC M162 C DAC M251 C LAC M163 C DAC M252 C LAC M170 C DAC M253 290 TYPE = LOCTYPE; VAL = INTEGER(ALMAX); FLAG = 0 C LAC M151 C DAC M162 C LAC* M126 C DAC M163 C DZM M170 291 TYPE = TYPE+UMASK %IF PASS = 0 C LAC M141 C SZA C JMP M375 C LAC M162 C TAD M100 C DAC M162 C DEFINE 375 292 COND = COND!!1 C LAC M157 C XOR #1 C DAC M157 293 PLANT JUMP; COND = 0 C JMS M246 C DZM M157 294 TYPE = THOLD; VAL = VHOLD; FLAG = FHOLD C LAC M251 C DAC M162 C LAC M252 C DAC M163 C LAC M253 C DAC M170 295 %END C JMP* M247 D DEFINE 253 D LIT 0 D DEFINE 252 D LIT 0 D DEFINE 251 D LIT 0 D DEFINE 250 D LIT 0 D DEFINE 247 D LIT 0 D DAD M250 C ARG -145764 C ARG -321326 C ARG -122220 C BLOCK END 247 296 297 %ROUTINE PLANT INST(%INTEGER CODE) C BLOCK BEGIN 0 298 SET JUMP(16_1000) %IF COND # 0 C LAC M157 C SNA C JMP M375 C LAC #10000 C JMS M247 C DEFINE 375 299 PLANT(CODE) C LAC M251 C JMS M205 300 %END C JMP* M250 D DEFINE 251 D LIT 0 D DEFINE 250 D LIT 0 D DAD M251 C ARG -174764 C ARG -233622 C ARG -132622 C BLOCK END 250 301 302 %ROUTINE RELEASE C BLOCK BEGIN 0 303 %INTEGER I 304 %RETURN %IF TYPE®XMASK = 0 C LAC M162 C AND M105 C SNA C JMP* M251 305 I = TYPE&15; I = VAL %IF TYPE = REG C LAC M162 C AND #17 C DAC M252 C LAC M162 C SAD M101 C SKP C JMP M375 C LAC M163 C DAC M252 C DEFINE 375 306 %IF I = DREG %START C LAC M252 C SAD M160 C SKP C JMP M375 307 DUSE = DUSE-1 C LAC #-1 C TAD M161 C DAC M161 308 %ELSE %START C JMP M376 C DEFINE 375 309 I = 1<= 0 %AND DUSE = 0 %START C LAC M160 C SPA C JMP M375 C LAC M161 C SZA C JMP M375 317 DUSE = 1 C LAC #1 C DAC M161 318 %RESULT = DREG C LAC M160 C JMP* M252 319 %FINISH C DEFINE 375 320 J = 1 C LAC #1 C DAC M254 321 %CYCLE I = 0,1,15 C LAC #-1 C DAC M253 C DEFINE 376 C LAC M253 C SAD #17 C JMP M375 C TAD #1 C DAC M253 322 ->OK %IF FREE&J # 0 %AND I # DREG C LAC M243 C AND M254 C SNA C JMP M373 C LAC M253 C SAD M160 C SKP C JMP M255 C DEFINE 373 323 J = J<<1 C LAC M254 C CLA!RAL C DAC M254 324 %REPEAT C JMP M-376 C DEFINE 375 325 FAULT('R') C LAC #122 C JMS M175 326 OK: FREE = FREE-J C DEFINE 255 C LAC M243 C CMA C TAD M254 C CMA C DAC M243 327 %RESULT = I C LAC M253 C JMP* M252 328 %END D DEFINE 254 D LIT 0 D DEFINE 253 D LIT 0 D DEFINE 252 D LIT 0 C ARG -136773 C ARG -153231 C ARG 0 C BLOCK END 252 329 330 %ROUTINE LOAD CONST(%INTEGER R) C BLOCK BEGIN 0 331 %INTEGER I,J 332 I = LOADI+R<<8 C LAC M220 C JMS M5 C LAC M254 C DAC M2 C LAC #10 C JMS M12 C TAD* M0 C DAC M255 333 %IF VAL&(\255) = 0 %AND TYPE&UMASK = 0 %START C LAC M163 C AND #-400 C SZA C JMP M375 C LAC M162 C AND M100 C SZA C JMP M375 334 PLANT INST(I+VAL) C LAC M255 C TAD M163 C JMS M250 335 %ELSE %IF \VAL&(\255) = 0 %AND TYPE&UMASK = 0 %START C JMP M376 C DEFINE 375 C LAC M163 C CMA C AND #-400 C SZA C JMP M375 C LAC M162 C AND M100 C SZA C JMP M375 336 PLANT INST(I+(\VAL)) C LAC M255 C JMS M5 C LAC M163 C CMA C TAD* M0 C JMS M250 337 PLANT INST(COMP+R<<4+R) C LAC M216 C JMS M5 C LAC M254 C CLA!RAL C CLA!RAL C CLA!RAL C CLA!RAL C TAD* M0 C TAD M254 C JMS M250 338 CREG = R C LAC M254 C DAC M156 339 %ELSE %START C JMP M376 C DEFINE 375 340 ! PLANT INST(LOADC+R<<8) 341 ! PLANT INST(SKIP) 342 ! PLANT VAL 343 J = VAL>>8&255 C LAC M163 C DAC M2 C LAC #-10 C JMS M12 C AND #377 C DAC M256 344 J = J+1 %IF VAL&128 # 0 C LAC M163 C AND #200 C SZA C ISZ M256 C NOP 345 PLANT INST(I+J) C LAC M255 C TAD M256 C JMS M250 346 PLANT INST(ROT+R<<8+7<<4+R) C LAC M231 C JMS M5 C LAC M254 C DAC M2 C LAC #10 C JMS M12 C TAD* M0 C JMS M5 C LAC #7 C CLA!RAL C CLA!RAL C CLA!RAL C CLA!RAL C TAD* M0 C TAD M254 C JMS M250 347 PLANT INST(ADDI+R<<8+VAL&255) %IF VAL&255 # 0 C LAC M163 C AND #377 C SNA C JMP M373 C LAC M222 C JMS M5 C LAC M254 C DAC M2 C LAC #10 C JMS M12 C TAD* M0 C JMS M5 C LAC M163 C AND #377 C TAD* M0 C JMS M250 C DEFINE 373 348 %FINISH C DEFINE 376 349 %END C JMP* M253 D DEFINE 256 D LIT 0 D DEFINE 255 D LIT 0 D DEFINE 254 D LIT 0 D DEFINE 253 D LIT 0 D DAD M254 C ARG -234764 C ARG -203634 C ARG -342022 C BLOCK END 253 350 351 %ROUTINE LOAD REG(%INTEGER R) C BLOCK BEGIN 0 352 %INTEGER OP 353 %IF ATYPE = TYPE %AND AVAL = VAL %START C LAC M154 C SAD M162 C SKP C JMP M375 C LAC M155 C SAD M163 C SKP C JMP M375 354 TYPE = REG; VAL = ACC C LAC M101 C DAC M162 C LAC M153 C DAC M163 355 %RETURN %IF R = ACC C LAC M255 C SAD M153 C JMP* M254 356 %FINISH C DEFINE 375 357 ATYPE = TYPE %AND AVAL = VAL %IF R = ACC C LAC M255 C SAD M153 C SKP C JMP M375 C LAC M162 C DAC M154 C LAC M163 C DAC M155 C DEFINE 375 358 ATYPE = -1 %IF (ATYPE=REG %AND AVAL=R) C LAC M154 C SAD M101 C SKP C JMP M375 C LAC M155 C SAD M255 C SKP C JMP M375 C LAC #-1 C DAC M154 C DEFINE 375 359 ATYPE = -1 %IF ATYPE&XMASK # 0 %AND ATYPE&15 = R C LAC M154 C AND M104 C SNA C JMP M375 C LAC M154 C AND #17 C SAD M255 C SKP C JMP M375 C LAC #-1 C DAC M154 C DEFINE 375 360 %IF TYPE = REG %START C LAC M162 C SAD M101 C SKP C JMP M375 361 PLANT INST(COPY+R<<4+VAL) C LAC M217 C JMS M5 C LAC M255 C CLA!RAL C CLA!RAL C CLA!RAL C CLA!RAL C TAD* M0 C TAD M163 C JMS M250 362 CREG = R C LAC M255 C DAC M156 363 %ELSE %IF TYPE&XMASK = 0 %START C JMP M376 C DEFINE 375 C LAC M162 C AND M104 C SZA C JMP M375 364 LOAD CONST(R) C LAC M255 C JMS M253 365 PLANT INST(LOAD+R<<8+R<<4) %IF TYPE&MEMMASK # 0 C LAC M162 C AND M102 C SNA C JMP M373 C LAC M232 C JMS M5 C LAC M255 C DAC M2 C LAC #10 C JMS M12 C TAD* M0 C JMS M5 C LAC M255 C CLA!RAL C CLA!RAL C CLA!RAL C CLA!RAL C TAD* M0 C JMS M250 C DEFINE 373 366 %ELSE %START C JMP M376 C DEFINE 375 367 %IF VAL&(\3) # 0 %OR TYPE&MEMMASK = 0 %START C LAC M163 C AND #-4 C SZA C JMP M372 C LAC M162 C AND M102 C SZA C JMP M373 C DEFINE 372 368 %IF TYPE&15 # R %START C LAC M162 C AND #17 C SAD M255 C JMP M371 369 %IF !VAL! <= 127 %START C LAC M163 C SMA!CMA C SKP!CMA C TAD #1 C SMA C TAD #-177 C SMA!SZA C JMP M367 370 PLANT INST(COPY+R<<4+TYPE&15) C LAC M217 C JMS M5 C LAC M255 C CLA!RAL C CLA!RAL C CLA!RAL C CLA!RAL C TAD* M0 C JMS M5 C LAC M162 C AND #17 C TAD* M0 C JMS M250 371 PLANT INST(ADDI+R<<8+VAL&255) %IF VAL # 0 C LAC M163 C SNA C JMP M365 C LAC M222 C JMS M5 C LAC M255 C DAC M2 C LAC #10 C JMS M12 C TAD* M0 C JMS M5 C LAC M163 C AND #377 C TAD* M0 C JMS M250 C DEFINE 365 372 %ELSE %START C JMP M370 C DEFINE 367 373 LOAD CONST(R) C LAC M255 C JMS M253 374 PLANT INST(ADD+R<<4+TYPE&15) C LAC M211 C JMS M5 C LAC M255 C CLA!RAL C CLA!RAL C CLA!RAL C CLA!RAL C TAD* M0 C JMS M5 C LAC M162 C AND #17 C TAD* M0 C JMS M250 375 %FINISH C DEFINE 370 376 CREG = R C LAC M255 C DAC M156 377 %ELSE %START C JMP M372 C DEFINE 371 378 %IF !VAL! <= 127 %START C LAC M163 C SMA!CMA C SKP!CMA C TAD #1 C SMA C TAD #-177 C SMA!SZA C JMP M367 379 %IF VAL # 0 %START C LAC M163 C SNA C JMP M365 380 PLANT INST(ADDI+R<<8+VAL&255) C LAC M222 C JMS M5 C LAC M255 C DAC M2 C LAC #10 C JMS M12 C TAD* M0 C JMS M5 C LAC M163 C AND #377 C TAD* M0 C JMS M250 381 CREG = R C LAC M255 C DAC M156 382 %FINISH C DEFINE 365 383 %ELSE %START C JMP M370 C DEFINE 367 384 OP = TREG C JMS M252 C DAC M256 385 LOAD CONST(OP) C JMS M253 386 TYPE = REG; VAL = OP C LAC M101 C DAC M162 C LAC M256 C DAC M163 387 RELEASE C JMS M251 388 PLANT INST(ADD+R<<4+OP) C LAC M211 C JMS M5 C LAC M255 C CLA!RAL C CLA!RAL C CLA!RAL C CLA!RAL C TAD* M0 C TAD M256 C JMS M250 389 CREG = R C LAC M255 C DAC M156 390 %FINISH C DEFINE 370 391 %FINISH C DEFINE 372 392 TYPE = TYPE&MEMMASK+XMASK+R; VAL = 0 C LAC M162 C AND M102 C TAD M104 C TAD M255 C DAC M162 C DZM M163 393 %FINISH C DEFINE 373 394 %IF TYPE&MEMMASK # 0 %START C LAC M162 C AND M102 C SNA C JMP M373 395 PLANT INST(LOAD+R<<8+(TYPE&15)<<4+VAL) C LAC M232 C JMS M5 C LAC M255 C DAC M2 C LAC #10 C JMS M12 C TAD* M0 C JMS M5 C LAC M162 C AND #17 C CLA!RAL C CLA!RAL C CLA!RAL C CLA!RAL C TAD* M0 C TAD M163 C JMS M250 396 CREG = -1 C LAC #-1 C DAC M156 397 ! %FINISH -- commenting out this line allows the program to compile 398 %ELSE %START C JMP M374 C DEFINE 373 399 LOAD CONST(R) C LAC M255 C JMS M253 400 PLANT INST(LOAD+R<<8+R<<4) C LAC M232 C JMS M5 C LAC M255 C DAC M2 C LAC #10 C JMS M12 C TAD* M0 C JMS M5 C LAC M255 C CLA!RAL C CLA!RAL C CLA!RAL C CLA!RAL C TAD* M0 C JMS M250 401 %FINISH C DEFINE 374 402 %FINISH C DEFINE 376 403 TYPE = REG; VAL = R C LAC M101 C DAC M162 C LAC M255 C DAC M163 404 %END C JMP* M254 D DEFINE 256 D LIT 0 D DEFINE 255 D LIT 0 D DEFINE 254 D LIT 0 D DAD M255 C ARG -235764 C ARG -203634 C ARG -153231 C BLOCK END 254 405 406 %ROUTINE LOAD TEMP C BLOCK BEGIN 0 407 RELEASE C JMS M251 408 LOAD REG(TREG) C JMS M252 C JMS M254 409 %END C JMP* M255 D DEFINE 255 D LIT 0 C ARG -234764 C ARG -203634 C ARG -133223 C BLOCK END 255 410 411 %ROUTINE SWOP C BLOCK BEGIN 0 412 %INTEGER K 413 K = TYPE1; TYPE1 = TYPE; TYPE = K C LAC M241 C DAC M257 C LAC M162 C DAC M241 C LAC M257 C DAC M162 414 K = VAL1; VAL1 = VAL; VAL = K C LAC M242 C DAC M257 C LAC M163 C DAC M242 C LAC M257 C DAC M163 415 %END C JMP* M256 D DEFINE 257 D LIT 0 D DEFINE 256 D LIT 0 C ARG -146764 C ARG -102020 C ARG 0 C BLOCK END 256 416 417 Q = QSTART C LAC M121 C DAC M234 418 NEW:NQ = QSTART; FREE = TEMPS C DEFINE 257 C LAC M121 C DAC M235 C LAC M146 C DAC M243 419 TYPE = INTEGER(Q); Q = Q+1 C LAC M234 C JMS M35 C LAC* M3 C DAC M162 C ISZ M234 C NOP 420 VAL = INTEGER(Q); Q = Q+1 C LAC M234 C JMS M35 C LAC* M3 C DAC M163 C ISZ M234 C NOP 421 422 GET:%CYCLE C DEFINE 260 C DEFINE 376 423 %RETURN %IF Q = QLIM C LAC M234 C SAD M122 C JMP* M210 424 K = INTEGER(Q); Q = Q+1 C JMS M35 C LAC* M3 C DAC M237 C ISZ M234 C NOP 425 ->ASS(K) %IF K < 0 C SMA C JMP M373 C JMS M10 C LAD M244 C XCT* M3 C JMS* M4 C LIT 607 C DEFINE 373 426 INTEGER(NQ) = TYPE1; INTEGER(NQ+1) = VAL1 C LAC M235 C JMS M35 C LAC M241 C DAC* M3 C LAC #1 C TAD M235 C JMS M35 C LAC M242 C DAC* M3 427 NQ = NQ+2 C LAC #2 C TAD M235 C DAC M235 428 TYPE1 = TYPE; VAL1 = VAL C LAC M162 C DAC M241 C LAC M163 C DAC M242 429 TYPE = K; VAL = INTEGER(Q); Q = Q+1 C LAC M237 C DAC M162 C LAC M234 C JMS M35 C LAC* M3 C DAC M163 C ISZ M234 C NOP 430 %REPEAT C JMP M-376 431 432 %PREDICATE TEMP C BLOCK BEGIN 0 433 %FALSE %IF TYPE1 # REG C LAC M241 C SAD M101 C JMP M375 C CLA C JMP* M261 C DEFINE 375 434 %IF VAL1 = DREG %START C LAC M242 C SAD M160 C SKP C JMP M375 435 %FALSE %IF DUSE # 1 C LAC M161 C SAD #1 C JMP M373 C CLA C JMP* M261 C DEFINE 373 436 %ELSE %START C JMP M376 C DEFINE 375 437 %FALSE %IF 1<GET C JMP M260 470 471 ASS(-2): C ARG 36 C DEFINE 244 472 OP = SUB C LAC M212 C DAC M236 473 ->NOP %IF MODE > 0 %AND TYPE # 0 C LAC M166 C SPA!SNA C JMP M375 C LAC M162 C SZA C JMP M262 C DEFINE 375 474 TYPE1 = 0 %AND TYPE = 0 %IF MODE <= 0 %AND TYPE1 = TYPE C LAC M166 C SMA!SZA C JMP M375 C LAC M241 C SAD M162 C SKP C JMP M375 C DZM M241 C DZM M162 C DEFINE 375 475 VAL = -VAL C LAC #-1 C TAD M163 C CMA C DAC M163 476 ASS(-1): C ARG 37 C DEFINE 244 477 OP = ADD; LITVAL = VAL1+VAL C LAC M211 C DAC M236 C LAC M242 C TAD M163 C DAC M240 478 ->BOP %UNLESS TYPE = 0 C LAC M162 C SZA C JMP M263 479 %IF TYPE1&MEMMASK # 0 %AND MODE > 0 %START C LAC M241 C AND M102 C SNA C JMP M375 C LAC M166 C SPA!SNA C JMP M375 480 SWOP; LOAD TEMP; SWOP C JMS M256 C JMS M255 C JMS M256 481 %FINISH C DEFINE 375 482 %IF TYPE1 = REG %AND %NOT TYPE=VAL=0 %START C LAC M241 C SAD M101 C SKP C JMP M375 C LAC M162 C SAD M163 C SKP C JMP M374 C SNA C JMP M375 C DEFINE 374 483 TYPE1 = XMASK+VAL1; LITVAL = VAL C LAC M104 C TAD M242 C DAC M241 C LAC M163 C DAC M240 484 %FINISH C DEFINE 375 485 TYPE = TYPE1; VAL = LITVAL C LAC M241 C DAC M162 C LAC M240 C DAC M163 486 ->POP C JMP M264 487 ASS(-6): C ARG 32 C DEFINE 244 488 LITVAL = VAL1<AS7 C JMP M265 491 ASS(-7): C ARG 31 C DEFINE 244 492 LITVAL = VAL1>>VAL; K = (16_FFFF)>>VAL C LAC M242 C JMS M5 C LAC #-1 C TAD M163 C CMA C DAC M1 C LAC* M0 C DAC M2 C LAC M1 C JMS M12 C DAC M240 C LAC #177777 C JMS M5 C LAC #-1 C TAD M163 C CMA C DAC M1 C LAC* M0 C DAC M2 C LAC M1 C JMS M12 C DAC M237 493 AS7:K=0 %AND ->BOP %IF MODE <= 0 C DEFINE 265 C LAC M166 C SMA!SZA C JMP M375 C DZM M237 C JMP M263 C DEFINE 375 494 FAULT('I') %IF TYPE # 0 %OR VAL&(\15) # 0 C LAC M162 C SZA C JMP M374 C LAC M163 C AND #-20 C SNA C JMP M375 C DEFINE 374 C LAC #111 C JMS M175 C DEFINE 375 495 %IF %NOT TEMP %START C JMS M261 C SZL C JMP M375 496 SWOP; LOAD TEMP; SWOP C JMS M256 C JMS M255 C JMS M256 497 %FINISH C DEFINE 375 498 OP = ROT+VAL1<<8+VAL1 C LAC M231 C JMS M5 C LAC M242 C DAC M2 C LAC #10 C JMS M12 C TAD* M0 C TAD M242 C DAC M236 499 PLANT INST(OP+16_0070) %IF VAL > 8 C LAC M163 C SMA C TAD #-10 C SPA!SNA C JMP M375 C LAC #160 C TAD M236 C JMS M250 C DEFINE 375 500 PLANT INST(OP+(VAL-1)<<4) %IF VAL # 0 C LAC M163 C SNA C JMP M375 C LAC M236 C JMS M5 C LAC #-1 C TAD M163 C CLA!RAL C CLA!RAL C CLA!RAL C CLA!RAL C TAD* M0 C JMS M250 C DEFINE 375 501 TYPE = 0; VAL = K; K = -3 C DZM M162 C LAC M237 C DAC M163 C LAC #-3 C DAC M237 502 ASS(-3): C ARG 35 C DEFINE 244 503 OP = AND; LITVAL = VAL1&VAL C LAC M213 C DAC M236 C LAC M242 C AND M163 C DAC M240 504 ->BOP C JMP M263 505 ASS(-4): C ARG 34 C DEFINE 244 506 OP = OR; LITVAL = VAL1!VAL C LAC M214 C DAC M236 C LAC M242 C DAC M2 C LAC M163 C JMS M13 C DAC M240 507 ->BOP C JMP M263 508 ASS(-5): C ARG 33 C DEFINE 244 509 OP = XOR; LITVAL = VAL1!!VAL C LAC M215 C DAC M236 C LAC M242 C XOR M163 C DAC M240 510 ->BOP C JMP M263 511 512 ASS(-8): !TYPE_VAL C ARG 30 C DEFINE 244 513 TYPE = VAL1 C LAC M242 C DAC M162 514 TYPE = 0 %IF TYPE&OPMASK = MACRO; !SAFETY C AND M75 C SAD M76 C DZM M162 515 TYPE = 0 %IF TYPE&(OPMASK+FMASK) = FMASK C LAC M162 C JMS M5 C LAC M75 C TAD M77 C AND* M0 C SAD M77 C DZM M162 516 ->POP C JMP M264 517 518 ASS(-11): !COMPARE C ARG 25 C DEFINE 244 519 K = INTEGER(Q); Q = Q+1 C LAC M234 C JMS M35 C LAC* M3 C DAC M237 C ISZ M234 C NOP 520 %IF MODE <= 0 %START C LAC M166 C SMA!SZA C JMP M375 521 LITVAL = 2_01011000 C LAC #130 C DAC M240 522 LITVAL = 2_01100100 %IF VAL < 0 C LAC M163 C SMA C JMP M373 C LAC #144 C DAC M240 C DEFINE 373 523 LITVAL = 2_10101000 %IF VAL1 > VAL C LAC M242 C DAC M2 C LAC M163 C JMS M6 C SZL C JMP M373 C LAC #250 C DAC M240 C DEFINE 373 524 K = LITVAL>>K&1; C LAC M240 C JMS M5 C LAC #-1 C TAD M237 C CMA C DAC M1 C LAC* M0 C DAC M2 C LAC M1 C JMS M12 C AND #1 C DAC M237 525 %ELSE %START C JMP M376 C DEFINE 375 526 %UNLESS K&6=4 %AND -256GET C JMP M260 537 538 ASS(-12): !TEST CC C ARG 24 C DEFINE 244 539 COND = VAL!!1 C LAC M163 C XOR #1 C DAC M157 540 ->GET C JMP M260 541 542 ASS(-13): !AND C ARG 23 C DEFINE 244 543 %IF MODE > 0 %START C LAC M166 C SPA!SNA C JMP M375 544 SET JUMP(16_1000) C LAC #10000 C JMS M247 545 %ELSE %START C JMP M376 C DEFINE 375 546 %RETURN %IF COND = 0 C LAC M157 C SNA C JMP* M210 547 %FINISH C DEFINE 376 548 %RETURN %IF Q = QLIM C LAC M234 C SAD M122 C JMP* M210 549 ->NEW C JMP M257 550 551 ASS(-14): !OR C ARG 22 C DEFINE 244 552 %IF MODE > 0 %START C LAC M166 C SPA!SNA C JMP M375 553 COND = COND!!1 C LAC M157 C XOR #1 C DAC M157 554 SET JUMP(16_3000) C LAC #30000 C JMS M247 555 %ELSE %START C JMP M376 C DEFINE 375 556 %RETURN %IF COND # 0 C LAC M157 C SZA C JMP* M210 557 %FINISH C DEFINE 376 558 ->NEW C JMP M257 559 560 ASS(-15): !IF C ARG 21 C DEFINE 244 561 SET JUMP(16_2000) C LAC #20000 C JMS M247 562 %RETURN C JMP* M210 563 564 ASS(-16): !ELSE C ARG 20 C DEFINE 244 565 COND = 1 C LAC #1 C DAC M157 566 SET JUMP(16_4000) C LAC #40000 C JMS M247 567 %RETURN C JMP* M210 568 569 ASS(-17): !IF AFTER ELSE C ARG 17 C DEFINE 244 570 SET JUMP(16_6000) C LAC #60000 C JMS M247 571 %RETURN C JMP* M210 572 573 ASS(-18): !MACCALL IF C ARG 16 C DEFINE 244 574 SET JUMP(16_8000) C LAC #100000 C JMS M247 575 %RETURN C JMP* M210 576 577 ASS(-20): !HASH C ARG 14 C DEFINE 244 578 TYPE = TYPE&(UMASK+63) C LAC M162 C JMS M5 C LAC #77 C TAD M100 C AND* M0 C DAC M162 579 ->GET C JMP M260 580 581 ASS(-21): !INDEX C ARG 13 C DEFINE 244 582 FAULT('I') %IF TYPE1®XMASK # 0 C LAC M241 C AND M105 C SNA C JMP M375 C LAC #111 C JMS M175 C DEFINE 375 583 %IF TYPE&MEMMASK # 0 %START C LAC M162 C AND M102 C SNA C JMP M375 584 %IF MODE > 0 %THEN LOAD TEMP %ELSE FAULT('A') C LAC M166 C SPA!SNA C JMP M373 C JMS M255 C JMP M374 C DEFINE 373 C LAC #101 C JMS M175 C DEFINE 374 585 %FINISH C DEFINE 375 586 %IF TYPE = REG %START C LAC M162 C SAD M101 C SKP C JMP M375 587 TYPE = XMASK+VAL; VAL = 0 C LAC M104 C TAD M163 C DAC M162 C DZM M163 588 %FINISH C DEFINE 375 589 FAULT('I') %IF TYPE1&TYPE&RELMASK # 0 C LAC M241 C AND M162 C AND M103 C SNA C JMP M375 C LAC #111 C JMS M175 C DEFINE 375 590 TYPE = TYPE1!TYPE!MEMMASK; VAL = VAL1+VAL C LAC M241 C DAC M2 C LAC M162 C JMS M13 C DAC M2 C LAC M102 C JMS M13 C DAC M162 C LAC M242 C TAD M163 C DAC M163 591 ->POP C JMP M264 592 593 ASS(-22): !MINST SEPARATOR C ARG 12 C DEFINE 244 594 COMBINE C JMS M245 595 ->POP C JMP M264 596 597 ASS(-23): !PLANT INST C ARG 11 C DEFINE 244 598 MODE = 1 C LAC #1 C DAC M166 599 PLANT INST(VAL) C LAC M163 C JMS M250 600 CREG = -1; ATYPE = -1 C LAC #-1 C DAC M156 C LAC #-1 C DAC M154 601 %RETURN C JMP* M210 602 603 ASS(-24): !LOAD C ARG 10 C DEFINE 244 604 LOAD TEMP %IF TYPE # REG C LAC M162 C SAD M101 C SKP C JMS M255 605 Q = QBASE C LAC M120 C DAC M234 606 ->GET C JMP M260 607 608 ASS(-25): !STORE (TYPE1,VAL1 -> TYPE,VAL) C ARG 7 C DEFINE 244 609 %IF TYPE = REG %START C LAC M162 C SAD M101 C SKP C JMP M375 610 SWOP %AND LOAD REG(VAL1) %IF VAL1 # VAL C LAC M242 C SAD M163 C JMP M373 C JMS M256 C LAC M242 C JMS M254 C DEFINE 373 611 %ELSE %START C JMP M376 C DEFINE 375 612 ATYPE = -1 %IF ATYPE&MEMMASK # 0 C LAC M154 C AND M102 C SNA C JMP M373 C LAC #-1 C DAC M154 C DEFINE 373 613 %IF VAL1 = ACC %AND ATYPE < 0 %START C LAC M242 C SAD M153 C SKP C JMP M373 C LAC M154 C SMA C JMP M373 614 K = TYPE&15 C LAC M162 C AND #17 C DAC M237 615 ATYPE = TYPE %AND AVAL = VAL %IF TYPE&XMASK = 0 %OR 1<= 0 %START C SPA C JMP M375 670 TERM = -1 %AND %RETURN %IF K < 10 C SMA C TAD #-12 C SMA C JMP M373 C LAC #-1 C DAC M135 C JMP* M217 C DEFINE 373 671 K = SYM-'A' C LAC #-101 C TAD M134 C DAC M216 672 %RETURN %IF K >= 0 %AND K < 26 %AND TERM = 0 C SPA C JMP M373 C SMA C TAD #-32 C SMA C JMP M373 C LAC M135 C SNA C JMP* M217 C DEFINE 373 673 %FINISH C DEFINE 375 674 TERM = SYM C LAC M134 C DAC M135 675 %END C JMP* M217 D DEFINE 217 D LIT 0 C ARG -345764 C ARG -203333 C ARG -140623 C BLOCK END 217 676 %ROUTINE PACK TRIPLE C BLOCK BEGIN 0 677 ->T1 %IF TERM < 0 C LAC M135 C SPA C JMP M221 678 J = ((K<<5+K)<<1+K)<<4+K+1111; !K*1073+1111 C LAC M216 C CLA!RAL C CLA!RAL C CLA!RAL C CLA!RAL C CLA!RAL C TAD M216 C CLA!RAL C TAD M216 C CLA!RAL C CLA!RAL C CLA!RAL C CLA!RAL C TAD M216 C TAD #2127 C DAC M215 679 CODE SYM C JMS M217 680 ->T2 %IF TERM # 0 C LAC M135 C SZA C JMP M222 681 J = (K<<3+K)<<2+K+111+J; !J+K*37+111 C LAC M216 C CLA!RAL C CLA!RAL C CLA!RAL C TAD M216 C CLA!RAL C CLA!RAL C TAD M216 C TAD #157 C TAD M215 C DAC M215 682 CODE SYM C JMS M217 683 ->T3 %IF TERM # 0 C LAC M135 C SZA C JMP M223 684 J = J+K+11 C LAC M215 C TAD M216 C TAD #13 C DAC M215 685 CODE SYM C JMS M217 686 %RETURN C JMP* M220 687 T1: J = ((K<<1+K)<<1+K)<<4-K+1; !K*111+1 C DEFINE 221 C LAC M216 C CLA!RAL C TAD M216 C CLA!RAL C TAD M216 C CLA!RAL C CLA!RAL C CLA!RAL C CLA!RAL C CMA C TAD M216 C CMA C TAD #1 C DAC M215 688 CODE SYM C JMS M217 689 T2: %RETURN %IF TERM > 0 C DEFINE 222 C LAC M135 C SMA!SZA C JMP* M220 690 J = (K<<2+K)<<1+K+1+J; !J+K*11+1 C LAC M216 C CLA!RAL C CLA!RAL C TAD M216 C CLA!RAL C TAD M216 C TAD #1 C TAD M215 C DAC M215 691 CODE SYM C JMS M217 692 T3: %RETURN %IF TERM > 0 C DEFINE 223 C LAC M135 C SMA!SZA C JMP* M220 693 J = J+K+1 C LAC M215 C TAD M216 C TAD #1 C DAC M215 694 CODE SYM C JMS M217 695 %END C JMP* M220 D DEFINE 220 D LIT 0 C ARG -174764 C ARG -363425 C ARG -131527 C BLOCK END 220 696 K = SYM-'A' C LAC #-101 C TAD M134 C DAC M216 697 %FALSE %UNLESS K >= 0 %AND K < 26 C SPA C JMP M374 C SMA C TAD #-32 C SPA C JMP M375 C DEFINE 374 C CLA C JMP* M214 C DEFINE 375 698 %FALSE %IF SYM = 'X' %AND CHAR(GETPOS)&128 # 0 C LAC M134 C SAD #130 C SKP C JMP M375 C LAC M111 C JMS M173 C AND #200 C SNA C JMP M375 C CLA C JMP* M214 C DEFINE 375 699 TERM = 0 C DZM M135 700 PACK TRIPLE C JMS M220 701 TAG1 = J; J = 0 C LAC M215 C DAC M164 C DZM M215 702 PACK TRIPLE %IF TERM <= 0 C LAC M135 C SPA!SNA C JMS M220 703 TAG2 = J C LAC M215 C DAC M165 704 CODE SYM %WHILE TERM <= 0 C DEFINE 376 C LAC M135 C SMA!SZA C JMP M375 C JMS M217 C JMP M-376 C DEFINE 375 705 GET SYM %IF TERM = ' ' C LAC M135 C SAD #40 C JMS M211 706 %TRUE C CLA!CML C JMP* M214 707 %END D DEFINE 216 D LIT 0 D DEFINE 215 D LIT 0 D DEFINE 214 D LIT 0 C ARG -136774 C ARG 4147 C ARG 0 C BLOCK END 214 708 709 %PREDICATE TAGIF C BLOCK BEGIN 0 710 %FALSE %UNLESS SYM='I' %AND CHAR(GETPOS)='F' %AND CHAR(GETPOS+1)=' ' C LAC M134 C SAD #111 C SKP C JMP M374 C LAC M111 C JMS M173 C SAD #106 C SKP C JMP M374 C LAC #1 C TAD M111 C JMS M173 C SAD #40 C JMP M375 C DEFINE 374 C CLA C JMP* M215 C DEFINE 375 711 GETPOS = GETPOS+2 C LAC #2 C TAD M111 C DAC M111 712 GET SYM C JMS M211 713 %TRUE C CLA!CML C JMP* M215 714 %END D DEFINE 215 D LIT 0 C ARG -135774 C ARG -363027 C ARG 46 C BLOCK END 215 715 716 %ROUTINE LOOKUP(%INTEGER CONTROL) C BLOCK BEGIN 0 717 !ALL DICT OPERATIONS LOCALISED HERE 718 !CONTROL = 0 (LOOKUP ONLY), 1 (FORWARD OK), 719 ! 2 (REDEF), 3 (DEF), 720 ! 4 (MACPARM), 7 (LABEL) 721 %INTEGER DP 722 DP = DEFMIN; DP = MP+5 %IF CONTROL = 4 C LAC M124 C DAC M220 C LAC M217 C SAD #4 C SKP C JMP M375 C LAC #5 C TAD M117 C DAC M220 C DEFINE 375 723 ! %WHILE INTEGER(DP) # 0 %CYCLE 724 ! ->YES %IF INTEGER(DP) = TAG1 %AND INTEGER(DP+1) = TAG2 725 ! DP = DP+4 726 ! %REPEAT 727 %OWNINTEGER P D DEFINE 221 D LIT 0 728 DP = DP-4 C LAC #-4 C TAD M220 C DAC M220 729 REP:DP = DP+4 C DEFINE 222 C LAC #4 C TAD M220 C DAC M220 730 %LAC* DP; %OPR 640;!SNA; %JMP NO C LAC* M220 C SNA C JMP M223 731 %SAD TAG1; %OPR 512; %JMP REP C SAD M164 C SKP C JMP M222 732 %LAC DP; %TAD #1; %DAC P C LAC M220 C TAD #1 C DAC M221 733 %LAC* P; %SAD TAG2; %JMP YES C LAC* M221 C SAD M165 C JMP M224 734 ->REP C JMP M222 735 NO: C DEFINE 223 736 %RETURN %IF CONTROL&1 = 0; !NO CREATION C LAC M217 C AND #1 C SNA C JMP* M216 737 NEW:DEFMIN = DEFMIN-4; DP = DEFMIN C DEFINE 225 C LAC #-4 C TAD M124 C DAC M124 C DAC M220 738 %MONITOR 21 %IF DP-QLIM <= 0 C CMA C TAD M122 C CMA C SMA!SZA C JMP M375 C JMS* M4 C LIT 425 C DEFINE 375 739 INTEGER(DP) = TAG1; INTEGER(DP+1) = TAG2 C LAC M220 C JMS M35 C LAC M164 C DAC* M3 C LAC #1 C TAD M220 C JMS M35 C LAC M165 C DAC* M3 740 SET:INTEGER(DP+2) = TYPE; INTEGER(DP+3) = VAL C DEFINE 226 C LAC #2 C TAD M220 C JMS M35 C LAC M162 C DAC* M3 C LAC #3 C TAD M220 C JMS M35 C LAC M163 C DAC* M3 741 %RETURN C JMP* M216 742 YES:->NEW %IF CONTROL = 3 %AND DP-INTEGER(BP) >= 0 C DEFINE 224 C LAC M217 C SAD #3 C SKP C JMP M375 C LAC M220 C JMS M5 C LAC* M131 C TAD #-1 C CMA C TAD* M0 C SMA C JMP M225 C DEFINE 375 743 %IF CONTROL&2 = 0 %START; !NOT DEF CLASS C LAC M217 C AND #2 C SZA C JMP M375 744 TYPE = INTEGER(DP+2); VAL = INTEGER(DP+3) C LAC #2 C TAD M220 C JMS M35 C LAC* M3 C DAC M162 C LAC #3 C TAD M220 C JMS M35 C LAC* M3 C DAC M163 745 %RETURN %UNLESS TYPE&OPMASK = MACRO %AND CONTROL = 0 C LAC M162 C AND M75 C SAD M76 C SKP C JMP M372 C LAC M217 C SZA C DEFINE 372 C JMP* M216 746 %IF TYPE&31#25 %THEN INTEGER(DP+2)=TYPE+1 %C C LAC M162 C AND #37 C SAD #31 C JMP M373 C LAC #2 C TAD M220 C JMS M35 C LAC #1 C TAD M162 C DAC* M3 C JMP M374 C DEFINE 373 C LAC #2 C TAD M220 C JMS M35 C LAC #7 C TAD M162 C DAC* M3 C DEFINE 374 747 %ELSE INTEGER(DP+2) = TYPE+7 748 %RETURN C JMP* M216 749 %FINISH C DEFINE 375 750 FAULT('D') %IF CONTROL = 3 C LAC M217 C SAD #3 C SKP C JMP M375 C LAC #104 C JMS M175 C DEFINE 375 751 ->SET %IF CONTROL # 7 C LAC M217 C SAD #7 C SKP C JMP M226 752 %IF INTEGER(DP+2)&(OPMASK+FMASK) = FMASK %START C LAC #2 C TAD M220 C JMS M35 C LAC* M3 C JMS M5 C LAC M75 C TAD M77 C AND* M0 C SAD M77 C SKP C JMP M375 753 VAL = INTEGER(DP+3) C LAC #3 C TAD M220 C JMS M35 C LAC* M3 C DAC M163 754 %IF PASS = 0 %START C LAC M141 C SZA C JMP M373 755 INTEGER(VAL) = LOC C LAC M163 C JMS M35 C LAC M152 C DAC* M3 756 %ELSE %START C JMP M374 C DEFINE 373 757 FAULT('P') %AND LOC=INTEGER(VAL) %IF INTEGER(VAL) # LOC C LAC M163 C JMS M35 C LAC* M3 C SAD M152 C JMP M371 C LAC #120 C JMS M175 C LAC M163 C JMS M35 C LAC* M3 C DAC M152 C DEFINE 371 758 %FINISH C DEFINE 374 759 VAL = LOC C LAC M152 C DAC M163 760 %ELSE %START C JMP M376 C DEFINE 375 761 ->NEW %IF DP-INTEGER(BP) >= 0 C LAC M220 C JMS M5 C LAC* M131 C TAD #-1 C CMA C TAD* M0 C SMA C JMP M225 762 FAULT('D') C LAC #104 C JMS M175 763 %FINISH C DEFINE 376 764 ->SET C JMP M226 765 %END D DEFINE 220 D LIT 0 D DEFINE 217 D LIT 0 D DEFINE 216 D LIT 0 D DAD M217 C ARG -235764 C ARG -202025 C ARG 6560 C BLOCK END 216 766 767 %ROUTINE QUEUE(%INTEGER K) C BLOCK BEGIN 0 768 INTEGER(QLIM) = K C LAC M220 C DAC* M122 769 QLIM = QLIM+1; %MONITOR 21 %IF QLIM = DEFMIN C ISZ M122 C NOP C LAC M122 C SAD M124 C SKP C JMP M375 C JMS* M4 C LIT 425 C DEFINE 375 770 %END C JMP* M217 D DEFINE 220 D LIT 0 D DEFINE 217 D LIT 0 D DAD M220 C ARG -165764 C ARG -123213 C ARG 45 C BLOCK END 217 771 772 %ROUTINE GET EXP C BLOCK BEGIN 0 773 %OWNINTEGER W=24717 D DEFINE 221 D LIT 60215 774 %INTEGER I,NBASE 775 776 NBASE = NP C LAC M132 C DAC M223 777 ->E3 %IF PEND # 0 C LAC M167 C SZA C JMP M224 778 E1: NEST(0) %WHILE S('(') C DEFINE 225 C DEFINE 376 C LAC #50 C JMS M212 C SNL C JMP M375 C LAC #0 C JMS M206 C JMP M-376 C DEFINE 375 779 NEST(-20) %IF S('#') C LAC #43 C JMS M212 C SNL C JMP M375 C LAC #-24 C JMS M206 C DEFINE 375 780 %IF TAG %START C JMS M214 C SNL C JMP M375 781 E3: %IF TAG1 = W %START; !W C DEFINE 224 C LAC M164 C SAD M221 C SKP C JMP M373 782 TYPE = 0; VAL = 0 C DZM M162 C DZM M163 783 %ELSE %START C JMP M374 C DEFINE 373 784 %IF PEND >= 0 %START C LAC M167 C SPA C JMP M371 785 TYPE = LOCTYPE+FMASK+UMASK; VAL = LABMIN-1 C LAC M151 C TAD M77 C TAD M100 C DAC M162 C LAC #-1 C TAD M127 C DAC M163 786 LOOKUP(1) C LAC #1 C JMS M216 787 %IF TYPE&(OPMASK+FMASK) = FMASK %START C LAC M162 C JMS M5 C LAC M75 C TAD M77 C AND* M0 C SAD M77 C SKP C JMP M367 788 %IF VAL = LABMIN-1 %START C LAC M163 C JMS M5 C LAC #-1 C TAD M127 C SAD* M0 C SKP C JMP M365 789 LABMIN = VAL; %MONITOR 22 %IF LABMIN = ALMAX C LAC M163 C DAC M127 C SAD M126 C SKP C JMP M363 C JMS* M4 C LIT 426 C DEFINE 363 790 %FINISH C DEFINE 365 791 VAL = INTEGER(VAL) C LAC M163 C JMS M35 C LAC* M3 C DAC M163 792 FAULT('U') %IF VAL = 0 C SZA C JMP M365 C LAC #125 C JMS M175 C DEFINE 365 793 TYPE = TYPE-FMASK C LAC M162 C CMA C TAD M77 C CMA C DAC M162 794 %FINISH C DEFINE 367 795 %FINISH C DEFINE 371 796 %FINISH C DEFINE 374 797 PEND = 0 C DZM M167 798 %IF TYPE = REG %AND TERM = '(' %START C LAC M162 C SAD M101 C SKP C JMP M373 C LAC M135 C SAD #50 C SKP C JMP M373 799 TYPE = 0 %IF SAVE&1 = 0; VAL = VAL+SAVE; !? C LAC M145 C AND #1 C SNA C DZM M162 C LAC M163 C TAD M145 C DAC M163 800 %FINISH C DEFINE 373 801 %IF MODE # 0 %START C LAC M166 C SNA C JMP M373 802 FAULT('I') %AND TYPE=0 %IF TYPE&OPMASK # 0 C LAC M162 C AND M75 C SNA C JMP M371 C LAC #111 C JMS M175 C DZM M162 C DEFINE 371 803 %IF TYPE®XMASK # 0 %START C LAC M162 C AND M105 C SNA C JMP M371 804 I = TYPE&15; I = VAL %IF I = 0 C LAC M162 C AND #17 C DAC M222 C SZA C JMP M367 C LAC M163 C DAC M222 C DEFINE 367 805 DUSE = DUSE+1 %IF I = DREG C LAC M222 C SAD M160 C ISZ M161 C NOP 806 %FINISH C DEFINE 371 807 %FINISH C DEFINE 373 808 %IF TERM = '(' %START C LAC M135 C SAD #50 C SKP C JMP M373 809 GET SYM C JMS M211 810 I = TYPE&31 C LAC M162 C AND #37 C DAC M222 811 QUEUE(TYPE-I); QUEUE(VAL) C LAC M162 C CMA C TAD M222 C CMA C JMS M217 C LAC M163 C JMS M217 812 NEST(-21); NEST(0) C LAC #-25 C JMS M206 C LAC #0 C JMS M206 813 %IF I # 0 %START C LAC M222 C SNA C JMP M371 814 QUEUE(REG); QUEUE(I&15) C LAC M101 C JMS M217 C LAC M222 C AND #17 C JMS M217 815 NEST(-1) C LAC #-1 C JMS M206 816 %FINISH C DEFINE 371 817 ->E1 C JMP M225 818 %FINISH C DEFINE 373 819 %ELSE %IF '0' <= SYM <= '9' %START C JMP M376 C DEFINE 375 C LAC #60 C DAC M2 C LAC M134 C JMS M6 C SNL C JMP M375 C SMA C TAD #-71 C SMA!SZA C JMP M375 820 TYPE = 0; VAL = SYM-'0' C DZM M162 C LAC #-60 C TAD M134 C DAC M163 821 %CYCLE C DEFINE 374 822 SYM = CHAR(GETPOS)-'0' C LAC M111 C JMS M173 C TAD #-60 C DAC M134 823 %EXIT %UNLESS 0 <= SYM <= 9 C LAC #0 C DAC M2 C LAC M134 C JMS M6 C SNL C JMP M370 C SMA C TAD #-11 C SMA!SZA C DEFINE 370 C JMP M373 824 VAL = (VAL<<2+VAL)<<1+SYM C LAC M163 C CLA!RAL C CLA!RAL C TAD M163 C CLA!RAL C TAD M134 C DAC M163 825 GETPOS = GETPOS+1 C ISZ M111 C NOP 826 %REPEAT C JMP M-374 C DEFINE 373 827 GET SYM C JMS M211 828 %ELSE %IF SYM = 'X' %START C JMP M376 C DEFINE 375 C LAC M134 C SAD #130 C SKP C JMP M375 829 TYPE = 0; VAL = 0 C DZM M162 C DZM M163 830 %CYCLE C DEFINE 374 831 SYM = CHAR(GETPOS)-128 C LAC M111 C JMS M173 C TAD #-200 C DAC M134 832 %EXIT %IF SYM < 0 C SPA C JMP M373 833 SYM = SYM-32 %IF SYM >= 96; !ENSURE UPPER-CASE C SMA C TAD #-140 C SPA C JMP M371 C LAC #-40 C TAD M134 C DAC M134 C DEFINE 371 834 %IF '0' <= SYM <= '9' %OR 'A' <= SYM <= 'F' %START C LAC #60 C DAC M2 C LAC M134 C JMS M6 C SNL C JMP M367 C SMA C TAD #-71 C SPA!SNA C JMP M370 C DEFINE 367 C LAC #101 C DAC M2 C LAC M134 C JMS M6 C SNL C JMP M371 C SMA C TAD #-106 C SMA!SZA C JMP M371 C DEFINE 370 835 VAL = VAL<<4+SYM-'0' C LAC M163 C CLA!RAL C CLA!RAL C CLA!RAL C CLA!RAL C TAD M134 C TAD #-60 C DAC M163 836 VAL = VAL-7 %IF SYM >= 'A' C LAC M134 C SMA C TAD #-101 C SPA C JMP M367 C LAC #-7 C TAD M163 C DAC M163 C DEFINE 367 837 %ELSE FAULT('H') C JMP M372 C DEFINE 371 C LAC #110 C JMS M175 C DEFINE 372 838 GETPOS = GETPOS+1 C ISZ M111 C NOP 839 %REPEAT C JMP M-374 C DEFINE 373 840 GET SYM C JMS M211 841 %ELSE %IF SYM&128 # 0 %START C JMP M376 C DEFINE 375 C LAC M134 C AND #200 C SNA C JMP M375 842 TYPE = 0; VAL = SYM-128 C DZM M162 C LAC #-200 C TAD M134 C DAC M163 843 GET SYM C JMS M211 844 %IF MODE >= 0 %AND SYM&128 # 0 %START C LAC M166 C SPA C JMP M373 C LAC M134 C AND #200 C SNA C JMP M373 845 VAL = VAL<<8+SYM-128; GET SYM C LAC M163 C DAC M2 C LAC #10 C JMS M12 C TAD M134 C TAD #-200 C DAC M163 C JMS M211 846 %FINISH C DEFINE 373 847 %ELSE %IF S('.') %START C JMP M376 C DEFINE 375 C LAC #56 C JMS M212 C SNL C JMP M375 848 ->ERR %IF %NOT TAG C JMS M214 C SNL C JMP M226 849 TYPE = 0; VAL = TAG1 C DZM M162 C LAC M164 C DAC M163 850 %ELSE %IF S('*') %START C JMP M376 C DEFINE 375 C LAC #52 C JMS M212 C SNL C JMP M375 851 TYPE = LOCTYPE&63; VAL = LOC C LAC M151 C AND #77 C DAC M162 C LAC M152 C DAC M163 852 %IF SYM = 'L' %START; !FOR NOW C LAC M134 C SAD #114 C SKP C JMP M373 853 TYPE = 0; VAL = LIST %IF TAG C DZM M162 C JMS M214 C SNL C JMP M371 C LAC M142 C DAC M163 C DEFINE 371 854 %FINISH C DEFINE 373 855 %ELSE %IF SYM = '-' %START C JMP M376 C DEFINE 375 C LAC M134 C SAD #55 C SKP C JMP M375 856 TYPE = 0; VAL = 0 C DZM M162 C DZM M163 857 %ELSE %IF SYM = '\' %START C JMP M376 C DEFINE 375 C LAC M134 C SAD #134 C SKP C JMP M375 858 TYPE = 0; VAL = \0 C DZM M162 C LAC #-1 C DAC M163 859 %ELSE ->ERR C JMP M376 C DEFINE 375 C JMP M226 C DEFINE 376 860 QUEUE(TYPE); QUEUE(VAL) C LAC M162 C JMS M217 C LAC M163 C JMS M217 861 862 %WHILE NP # NBASE %CYCLE C DEFINE 376 C LAC M132 C SAD M223 C JMP M375 863 %IF INTEGER(NP) < 0 %START C LAC* M132 C SMA C JMP M373 864 QUEUE(INTEGER(NP)) C LAC* M132 C JMS M217 865 %ELSE %START C JMP M374 C DEFINE 373 866 %EXIT %IF %NOT S(')') C LAC #51 C JMS M212 C SNL C JMP M375 867 %FINISH C DEFINE 374 868 NP = NP+1 C ISZ M132 C NOP 869 %REPEAT C JMP M-376 C DEFINE 375 870 871 NEST(-1) %AND ->E1 %IF S('+') C LAC #53 C JMS M212 C SNL C JMP M375 C LAC #-1 C JMS M206 C JMP M225 C DEFINE 375 872 NEST(-2) %AND ->E1 %IF S('-') C LAC #55 C JMS M212 C SNL C JMP M375 C LAC #-2 C JMS M206 C JMP M225 C DEFINE 375 873 NEST(-3) %AND ->E1 %IF S('&') C LAC #46 C JMS M212 C SNL C JMP M375 C LAC #-3 C JMS M206 C JMP M225 C DEFINE 375 874 NEST(-4) %AND ->E1 %IF S('!') C LAC #41 C JMS M212 C SNL C JMP M375 C LAC #-4 C JMS M206 C JMP M225 C DEFINE 375 875 NEST(-5) %AND ->E1 %IF S('\') C LAC #134 C JMS M212 C SNL C JMP M375 C LAC #-5 C JMS M206 C JMP M225 C DEFINE 375 876 NEST(-6) %AND ->E1 %IF SS('<') C LAC #74 C JMS M213 C SNL C JMP M375 C LAC #-6 C JMS M206 C JMP M225 C DEFINE 375 877 NEST(-7) %AND ->E1 %IF SS('>') C LAC #76 C JMS M213 C SNL C JMP M375 C LAC #-7 C JMS M206 C JMP M225 C DEFINE 375 878 NEST(-8) %AND ->E1 %IF S('_') C LAC #137 C JMS M212 C SNL C JMP M375 C LAC #-10 C JMS M206 C JMP M225 C DEFINE 375 879 %RETURN %IF NP = NBASE C LAC M132 C SAD M223 C JMP* M220 880 ERR:NP = NBASE C DEFINE 226 C LAC M223 C DAC M132 881 %MONITOR 19 C JMS* M4 C LIT 423 882 %END D DEFINE 223 D LIT 0 D DEFINE 222 D LIT 0 D DEFINE 220 D LIT 0 C ARG -305764 C ARG -321333 C ARG 7060 C BLOCK END 220 883 884 %ROUTINE GET COND C BLOCK BEGIN 0 885 %OWNINTEGER AND=1717, OR=16873 D DEFINE 222 D LIT 3265 D DEFINE 223 D LIT 40751 886 %INTEGER J,K 887 TRANSF = QSTART; QSTART = QLIM C LAC M121 C DAC M123 C LAC M122 C DAC M121 888 J = 0 C DZM M224 889 %CYCLE C DEFINE 376 890 GET EXP C JMS M220 891 %IF S('=') %START C LAC #75 C JMS M212 C SNL C JMP M373 892 K = 5 C LAC #5 C DAC M225 893 %ELSE %IF S('#') %START C JMP M374 C DEFINE 373 C LAC #43 C JMS M212 C SNL C JMP M373 894 K = 4 C LAC #4 C DAC M225 895 %ELSE %IF S('<') %START C JMP M374 C DEFINE 373 C LAC #74 C JMS M212 C SNL C JMP M373 896 K = 3; K = 7 %IF S('=') C LAC #3 C DAC M225 C LAC #75 C JMS M212 C SNL C JMP M371 C LAC #7 C DAC M225 C DEFINE 371 897 %ELSE %IF S('>') %START C JMP M374 C DEFINE 373 C LAC #76 C JMS M212 C SNL C JMP M373 898 K = 6; K = 2 %IF S('=') C LAC #6 C DAC M225 C LAC #75 C JMS M212 C SNL C JMP M371 C LAC #2 C DAC M225 C DEFINE 371 899 %ELSE %START C JMP M374 C DEFINE 373 900 QUEUE(-12) C LAC #-14 C JMS M217 901 %RETURN C JMP* M221 902 %FINISH C DEFINE 374 903 GET EXP C JMS M220 904 QUEUE(-2); !SUBTRACT C LAC #-2 C JMS M217 905 QUEUE(-11); QUEUE(K) C LAC #-13 C JMS M217 C LAC M225 C JMS M217 906 %RETURN %IF %NOT TAG C JMS M214 C SNL C JMP* M221 907 %IF TAG1 = AND %AND TAG2 = 0 %START C LAC M164 C SAD M222 C SKP C JMP M373 C LAC M165 C SZA C JMP M373 908 %MONITOR 19 %IF J < 0 C LAC M224 C SMA C JMP M371 C JMS* M4 C LIT 423 C DEFINE 371 909 J = 1; QUEUE(-13) C LAC #1 C DAC M224 C LAC #-15 C JMS M217 910 %ELSE %START C JMP M374 C DEFINE 373 911 %MONITOR 19 %IF TAG1 # OR %OR J > 0 C LAC M164 C SAD M223 C SKP C JMP M370 C LAC M224 C SPA!SNA C JMP M371 C DEFINE 370 C JMS* M4 C LIT 423 C DEFINE 371 912 J = -1; QUEUE(-14) C LAC #-1 C DAC M224 C LAC #-16 C JMS M217 913 %FINISH C DEFINE 374 914 %REPEAT C JMP M-376 915 %END D DEFINE 225 D LIT 0 D DEFINE 224 D LIT 0 D DEFINE 221 D LIT 0 C ARG -305764 C ARG -321335 C ARG -202134 C BLOCK END 221 916 917 %ROUTINE GET INST C BLOCK BEGIN 0 918 %INTEGER I 919 QUEUE(TYPE); QUEUE(VAL) C LAC M162 C JMS M217 C LAC M163 C JMS M217 920 %RETURN %IF TERM # ' '; !NO OPERAND FOLLOWING => C LAC M135 C SAD #40 C SKP C JMP* M222 921 %CYCLE C DEFINE 376 922 GET EXP C JMS M220 923 QUEUE(-22) C LAC #-26 C JMS M217 924 %RETURN %IF %NOT S(',') C LAC #54 C JMS M212 C SNL C JMP* M222 925 %REPEAT C JMP M-376 926 %END D DEFINE 223 D LIT 0 D DEFINE 222 D LIT 0 C ARG -305764 C ARG -321327 C ARG -211414 C BLOCK END 222 927 928 %ROUTINE READ LINE C BLOCK BEGIN 0 929 %INTEGER Q 930 PUTPOS = STARTPOS C LAC M110 C DAC M112 931 %IF MP = 0 %START C LAC M117 C SZA C JMP M375 932 Q = 0; PSEUDOLIM = 0 C DZM M224 C DZM M113 933 %CYCLE C DEFINE 374 934 READ SYMBOL(SYM) C LAD M134 C JMS M43 935 READ SYMBOL(SYM) %AND Q=Q!!128 %IF SYM = '''' C LAC M134 C SAD #47 C SKP C JMP M371 C LAD M134 C JMS M43 C LAC M224 C XOR #200 C DAC M224 C DEFINE 371 936 %EXIT %IF SYM = NL C LAC M134 C SAD #12 C JMP M373 937 SYM = SYM-32 %IF SYM-Q >= 96; !LOWER-CASE -> UPPER-CASE C CMA C TAD M224 C CMA C SMA C TAD #-140 C SPA C JMP M371 C LAC #-40 C TAD M134 C DAC M134 C DEFINE 371 938 SYM = SYM+Q C LAC M134 C TAD M224 C DAC M134 939 %EXIT %IF SYM = '/' %AND PSEUDOLIM # 0 C SAD #57 C SKP C JMP M371 C LAC M113 C SZA C JMP M373 C DEFINE 371 940 %IF SYM = ' ' %START C LAC M134 C SAD #40 C SKP C JMP M371 941 PSEUDOLIM = PUTPOS %IF PSEUDOLIM = 0 C LAC M113 C SZA C JMP M367 C LAC M112 C DAC M113 C DEFINE 367 942 %ELSE PSEUDOLIM = 0 C JMP M372 C DEFINE 371 C DZM M113 C DEFINE 372 943 PUT CHAR(SYM) C LAC M134 C JMS M174 944 %REPEAT C JMP M-374 C DEFINE 373 945 %IF PSEUDOLIM # 0 %START C LAC M113 C SNA C JMP M373 946 Q = PUTPOS; PUTPOS = PSEUDOLIM C LAC M112 C DAC M224 C LAC M113 C DAC M112 947 PUT CHAR(NL) C LAC #12 C JMS M174 948 PUTPOS = Q C LAC M224 C DAC M112 949 %FINISH C DEFINE 373 950 %CYCLE C DEFINE 374 951 PUT CHAR(SYM) C LAC M134 C JMS M174 952 %EXIT %IF SYM = NL C LAC M134 C SAD #12 C JMP M373 953 READ SYMBOL(SYM) C LAD M134 C JMS M43 954 %REPEAT C JMP M-374 C DEFINE 373 955 PRINTPOS = STARTPOS C LAC M110 C DAC M114 956 %ELSE %START C JMP M376 C DEFINE 375 957 GETPOS = INTEGER(MP) C LAC* M117 C DAC M111 958 %IF CHAR(GETPOS) = 0 %START C JMS M173 C SZA C JMP M373 959 QBASE = MP C LAC M117 C DAC M120 960 %IF INTEGER(MP+1)&16_8000 # 0 %START C LAC #1 C TAD M117 C JMS M35 C LAC* M3 C AND #100000 C SNA C JMP M371 961 %WHILE INTEGER(NP)&16_8000 = 0 %CYCLE C DEFINE 370 C LAC* M132 C AND #100000 C SZA C JMP M367 962 FAULT('C'); NP = NP+2 C LAC #103 C JMS M175 C LAC #2 C TAD M132 C DAC M132 963 %REPEAT C JMP M-370 C DEFINE 367 964 SET LAB(LOC) C LAC M152 C JMS M207 965 %FINISH C DEFINE 371 966 GETPOS = INTEGER(MP+2) C LAC #2 C TAD M117 C JMS M35 C LAC* M3 C DAC M111 967 STARTPOS = INTEGER(MP+3) C LAC #3 C TAD M117 C JMS M35 C LAC* M3 C DAC M110 968 MP = INTEGER(MP+4) C LAC #4 C TAD M117 C JMS M35 C LAC* M3 C DAC M117 969 PRINTPOS = 0 %IF LIST&2 # 0 C LAC M142 C AND #2 C SZA C DZM M114 970 GET SYM; !TERMINATOR C JMS M211 971 GET SYM %IF SYM = ';' C LAC M134 C SAD #73 C JMS M211 972 %RETURN C JMP* M223 973 %FINISH C DEFINE 373 974 PRINTPOS = STARTPOS %IF LIST&2 # 0 C LAC M142 C AND #2 C SNA C JMP M373 C LAC M110 C DAC M114 C DEFINE 373 975 %CYCLE C DEFINE 374 976 SYM = CHAR(GETPOS); GETPOS = GETPOS+1 C LAC M111 C JMS M173 C DAC M134 C ISZ M111 C NOP 977 %IF TAG %START C JMS M214 C SNL C JMP M371 978 SYM=TERM %AND GETPOS=GETPOS-1 %IF TERM = ' ' C LAC M135 C SAD #40 C SKP C JMP M367 C DAC M134 C LAC #-1 C TAD M111 C DAC M111 C DEFINE 367 979 TYPE = INTEGER(MP); VAL = GETPOS-1 C LAC* M117 C DAC M162 C LAC #-1 C TAD M111 C DAC M163 980 LOOKUP(4) C LAC #4 C JMS M216 981 %WHILE TYPE # VAL %CYCLE C DEFINE 370 C LAC M162 C SAD M163 C JMP M367 982 PUT CHAR(CHAR(TYPE)) C JMS M173 C JMS M174 983 TYPE = TYPE+1 C ISZ M162 C NOP 984 %REPEAT C JMP M-370 C DEFINE 367 985 %FINISH C DEFINE 371 986 %IF SYM = '?' %START C LAC M134 C SAD #77 C SKP C JMP M371 987 PUT CHAR(INTEGER(MP+1)>>5&31+'A') C LAC #1 C TAD M117 C JMS M35 C LAC* M3 C CLA!RAR C CLA!RAR C CLA!RAR C CLA!RAR C CLA!RAR C AND #37 C TAD #101 C JMS M174 988 SYM = INTEGER(MP+1)&31+'A' C LAC #1 C TAD M117 C JMS M35 C LAC* M3 C AND #37 C TAD #101 C DAC M134 989 %FINISH C DEFINE 371 990 PUT CHAR(SYM) C LAC M134 C JMS M174 991 INTEGER(MP) = GETPOS C LAC M111 C DAC* M117 992 %EXIT %IF SYM = NL C LAC M134 C SAD #12 C JMP M373 993 %REPEAT C JMP M-374 C DEFINE 373 994 %FINISH C DEFINE 376 995 QBASE = (PUTPOS+1)>>1 C LAC #1 C TAD M112 C CLA!RAR C DAC M120 996 GETPOS = STARTPOS; GET SYM C LAC M110 C DAC M111 C JMS M211 997 %END C JMP* M223 D DEFINE 224 D LIT 0 D DEFINE 223 D LIT 0 C ARG -154764 C ARG -323634 C ARG -232622 C BLOCK END 223 998 999 %ROUTINE SCAN ARG C BLOCK BEGIN 0 1000 ! SET TYPE,VAL TO START,LIM OF ARG IF NOT NULL 1001 %INTEGER I,J 1002 %RETURN %IF SYM='I' %AND CHAR(GETPOS)='F' %AND CHAR(GETPOS+1)=' ' C LAC M134 C SAD #111 C SKP C JMP M375 C LAC M111 C JMS M173 C SAD #106 C SKP C JMP M375 C LAC #1 C TAD M111 C JMS M173 C SAD #40 C JMP* M224 C DEFINE 375 1003 I = GETPOS-1; I = GETPOS %IF SYM = '[' C LAC #-1 C TAD M111 C DAC M225 C LAC M134 C SAD #133 C SKP C JMP M375 C LAC M111 C DAC M225 C DEFINE 375 1004 J = 0 C DZM M226 1005 %CYCLE C DEFINE 376 1006 %EXIT %IF SYM = NL C LAC M134 C SAD #12 C JMP M375 1007 %EXIT %IF (SYM=' ' %OR SYM=',' %OR SYM=';') %AND J<=0 C SAD #40 C JMP M372 C SAD #54 C JMP M372 C SAD #73 C SKP C JMP M373 C DEFINE 372 C LAC M226 C SPA!SNA C JMP M375 C DEFINE 373 1008 J = J+1 %IF SYM = '[' C LAC M134 C SAD #133 C ISZ M226 C NOP 1009 %IF SYM = ']' %START C SAD #135 C SKP C JMP M373 1010 J = J-1; %EXIT %IF J = 0 C LAC #-1 C TAD M226 C DAC M226 C SNA C JMP M375 1011 %FINISH C DEFINE 373 1012 SYM = CHAR(GETPOS); GETPOS = GETPOS+1 C LAC M111 C JMS M173 C DAC M134 C ISZ M111 C NOP 1013 %REPEAT C JMP M-376 C DEFINE 375 1014 %IF GETPOS-1 # I %START C LAC #-1 C TAD M111 C SAD M225 C JMP M375 1015 TYPE = I; VAL = GETPOS-1 C LAC M225 C DAC M162 C LAC #-1 C TAD M111 C DAC M163 1016 %FINISH C DEFINE 375 1017 GET SYM %IF SYM = ']' C LAC M134 C SAD #135 C JMS M211 1018 %END C JMP* M224 D DEFINE 226 D LIT 0 D DEFINE 225 D LIT 0 D DEFINE 224 D LIT 0 C ARG -145764 C ARG -343622 C ARG -361531 C BLOCK END 224 1019 1020 %ROUTINE SET ACC C BLOCK BEGIN 0 1021 %INTEGER I 1022 ACC = -1; ATYPE = -1; CREG = -1 C LAC #-1 C DAC M153 C LAC #-1 C DAC M154 C LAC #-1 C DAC M156 1023 I = TEMPS C LAC M146 C DAC M226 1024 %RETURN %IF I = 0 C SNA C JMP* M225 1025 %CYCLE C DEFINE 376 1026 ACC = ACC+1 C ISZ M153 C NOP 1027 %RETURN %IF I&1 # 0 C LAC M226 C AND #1 C SZA C JMP* M225 1028 I = I>>1 C LAC M226 C CLA!RAR C DAC M226 1029 %REPEAT C JMP M-376 1030 %END D DEFINE 226 D LIT 0 D DEFINE 225 D LIT 0 C ARG -145764 C ARG -321337 C ARG 4343 C BLOCK END 225 1031 1032 !MAIN PROGRAM 1033 1034 !RADIX 36 CONSTANTS 1035 %OWNINTEGER B=2184, IF=9991, ELS=5950, E=5403, FIN=6907, ISH=10490 D DEFINE 226 D LIT 4210 D DEFINE 227 D LIT 23407 D DEFINE 230 D LIT 13476 D DEFINE 231 D LIT 12433 D DEFINE 232 D LIT 15373 D DEFINE 233 D LIT 24372 1036 %OWNINTEGER JUM=11642, P=17206, PS=17983, DEF=4605, END=6009 D DEFINE 234 D LIT 26572 D DEFINE 235 D LIT 41466 D DEFINE 236 D LIT 43077 D DEFINE 237 D LIT 10775 D DEFINE 240 D LIT 13571 1037 1038 %INTEGER I,J,K 1039 %FAULT 19 ->ERR; !RECOGNITION ERROR C LAC #23 C JMS M21 C LIT 1 C JMP M244 1040 %FAULT 9 ->BEND; !INPUT ENDED C LAC #11 C JMS M21 C LIT 1 C JMP M245 1041 1042 %CYCLE I = 1,1,SBOUND C LAC M171 C DAC M246 C DZM M241 C DEFINE 376 C LAC M241 C SAD M246 C JMP M375 C TAD #1 C DAC M241 1043 STORE(I) = 0 C JMS M10 C LAD M172 C LAC #0 C DAC* M3 1044 %REPEAT C JMP M-376 C DEFINE 375 1045 CODEPOS = ADDR(STORE(1)) C LAC #1 C JMS M10 C LAD M172 C DAC M107 1046 MACLIM = (CODEPOS+20)<<1 C TAD #24 C CLA!RAL C DAC M116 1047 STORELIM = ADDR(STORE(SBOUND)) C LAC M171 C JMS M10 C LAD M172 C DAC M133 1048 NP = STORELIM C DAC M132 1049 LABLIM = NP-60 C TAD #-74 C DAC M130 1050 BP = LABLIM C DAC M131 1051 DEFLIM = STORELIM-(SBOUND>>2) C LAC M133 C JMS M5 C LAC M171 C CLA!RAR C CLA!RAR C TAD #-1 C CMA C TAD* M0 C DAC M125 1052 DEFMIN = DEFLIM C DAC M124 1053 INTEGER(BP) = DEFLIM C LAC M125 C DAC* M131 1054 SELECT INPUT(PRE) C LAC M72 C JMS M36 1055 DO PASS: C DEFINE 247 1056 PUT WORD(0) %AND CONTROL=16_20 %IF PASS > 0 C LAC M141 C SPA!SNA C JMP M375 C LAC #0 C JMS M203 C LAC #40 C DAC M147 C DEFINE 375 1057 STARTPOS = MACLIM C LAC M116 C DAC M110 1058 MP = 0 C DZM M117 1059 ALMAX = DEFLIM C LAC M125 C DAC M126 1060 LABMIN = LABLIM C LAC M130 C DAC M127 1061 ASSCOND = 1; SKIP = 0 C LAC #1 C DAC M143 C DZM M144 1062 LOCTYPE = MEMMASK+RELMASK; LOC = 0 C LAC M102 C TAD M103 C DAC M151 C DZM M152 1063 SET ACC C JMS M225 1064 READ: FSYM = ' '; FAULTPOS = 0 C DEFINE 250 C LAC #40 C DAC M136 C DZM M115 1065 READ LINE C JMS M223 1066 NEXT: C DEFINE 251 1067 DREG = -1 C LAC #-1 C DAC M160 1068 MODE = 0 C DZM M166 1069 PEND = 0; COND = 0 C DZM M167 C DZM M157 1070 QSTART = QBASE; QLIM = QSTART C LAC M120 C DAC M121 C DAC M122 1071 FLAG = 0 C DZM M170 1072 %IF S('$') %START C LAC #44 C JMS M212 C SNL C JMP M375 1073 ->NEWPAGE %IF SYM = '/' C LAC M134 C SAD #57 C JMP M252 1074 ->ERR %IF %NOT TAG C JMS M214 C SNL C JMP M244 1075 ->ASSIF %IF TAG1 = IF C LAC M164 C SAD M227 C JMP M253 1076 ->ASSELSE %IF TAG1 = ELS C SAD M230 C JMP M254 1077 ->ASSFIN %IF TAG1 = FIN C SAD M232 C JMP M255 1078 ->LEND %IF SKIP # 0 C LAC M144 C SZA C JMP M256 1079 ->DEFINE %IF TAG1 = DEF C LAC M164 C SAD M237 C JMP M257 1080 ->DEFINE %IF TAG1 = 19625; !RED C SAD #46251 C JMP M257 1081 ->LISTC %IF TAG1 = 13350; !LIS C SAD #32046 C JMP M260 1082 ->TEMP %IF TAG1 = 21780; !TEM C SAD #52424 C JMP M261 1083 ->LOCC %IF TAG1 = 13556; !LOC C SAD #32364 C JMP M262 1084 ->LOCC %IF TAG1 = 1917; !ASS C SAD #3575 C JMP M262 1085 ->SAVC %IF TAG1 = 20568; !SAV C SAD #50130 C JMP M263 1086 ->MACDEF %IF TAG1 = 14111; !MAC C SAD #33437 C JMP M264 1087 ->BEGIN %IF TAG1 = 2460; !BEG C SAD #4634 C JMP M265 1088 ->BEND %IF TAG1 = END C SAD M240 C JMP M245 1089 FAULT('U') C LAC #125 C JMS M175 1090 ->LEND C JMP M256 1091 %FINISH C DEFINE 375 1092 ->LEND %IF SKIP # 0 %OR SYM = '/' C LAC M144 C SZA C JMP M374 C LAC M134 C SAD #57 C DEFINE 374 C JMP M256 1093 %IF SYM = NL %START C LAC M134 C SAD #12 C SKP C JMP M375 1094 ->LEND %IF LINES < 54 C LAC M140 C SMA C TAD #-66 C SPA C JMP M256 1095 DO NEWLINE %WHILE LINES # 0 C DEFINE 374 C LAC M140 C SNA C JMP M373 C JMS M201 C JMP M-374 C DEFINE 373 1096 ->READ C JMP M250 1097 %FINISH C DEFINE 375 1098 %IF TAG %START C JMS M214 C SNL C JMP M375 1099 ->LABDEF %IF TERM = ':' C LAC M135 C SAD #72 C JMP M266 1100 MODE = 1 C LAC #1 C DAC M166 1101 ->ASSIGN %IF TERM = '(' %OR SYM = '=' C LAC M135 C SAD #50 C JMP M372 C LAC M134 C SAD #75 C DEFINE 372 C JMP M267 1102 ->JUMP %IF TAG1 = JUM %AND (TAG2=P %OR TAG2=PS) C LAC M164 C SAD M234 C SKP C JMP M373 C LAC M165 C SAD M235 C JMP M372 C SAD M236 C DEFINE 372 C JMP M270 C DEFINE 373 1103 ->IFC %IF TAG1 = IF C LAC M164 C SAD M227 C JMP M271 1104 ->ELSE %IF TAG1 = ELS %AND TAG2 = E C SAD M230 C SKP C JMP M373 C LAC M165 C SAD M231 C JMP M272 C DEFINE 373 1105 ->FINISH %IF TAG1 = FIN %AND TAG2 = ISH C LAC M164 C SAD M232 C SKP C JMP M373 C LAC M165 C SAD M233 C JMP M273 C DEFINE 373 1106 ->WHILE %IF TAG1 = 25106 %AND TAG2 = 13173 C LAC M164 C SAD #61022 C SKP C JMP M373 C LAC M165 C SAD #31565 C JMP M274 C DEFINE 373 1107 ->CYCLE %IF TAG1 = 4269 %AND TAG2 = 13173 C LAC M164 C SAD #10255 C SKP C JMP M373 C LAC M165 C SAD #31565 C JMP M275 C DEFINE 373 1108 ->REPEAT %IF TAG1 = 19637 %AND TAG2 = 5544 C LAC M164 C SAD #46265 C SKP C JMP M373 C LAC M165 C SAD #12650 C JMP M276 C DEFINE 373 1109 MODE=-2 %AND ->DATA %IF TAG1 = B C LAC M164 C SAD M226 C SKP C JMP M373 C LAC #-2 C DAC M166 C JMP M277 C DEFINE 373 1110 TYPE = UMASK; LOOKUP(0) C LAC M100 C DAC M162 C LAC #0 C JMS M216 1111 ->MACCALL %IF TYPE&OPMASK = MACRO C LAC M162 C AND M75 C SAD M76 C JMP M300 1112 ->MINST %IF TYPE&OPMASK # 0 C LAC M162 C AND M75 C SZA C JMP M301 1113 FAULT('U') %AND ->LEND %IF TYPE&UMASK # 0 C LAC M162 C AND M100 C SNA C JMP M373 C LAC #125 C JMS M175 C JMP M256 C DEFINE 373 1114 PEND = -1 C LAC #-1 C DAC M167 1115 %FINISH C DEFINE 375 1116 MODE = -1 C LAC #-1 C DAC M166 1117 DATA: C DEFINE 277 1118 %CYCLE C DEFINE 376 1119 GET EXP; ASSEMBLE C JMS M220 C JMS M210 1120 FAULT('I') %IF TYPE®XMASK # 0 C LAC M162 C AND M105 C SNA C JMP M373 C LAC #111 C JMS M175 C DEFINE 373 1121 I = 1 C LAC #1 C DAC M241 1122 %IF S('$') %START C LAC #44 C JMS M212 C SNL C JMP M373 1123 I = VAL %IF VAL < 1000 C LAC M163 C SMA C TAD #-1750 C SMA C JMP M371 C LAC M163 C DAC M241 C DEFINE 371 1124 QLIM = QSTART C LAC M121 C DAC M122 1125 GET EXP; ASSEMBLE C JMS M220 C JMS M210 1126 %FINISH C DEFINE 373 1127 %WHILE I > 0 %CYCLE C DEFINE 374 C LAC M241 C SPA!SNA C JMP M373 1128 %IF MODE # -1 %START C LAC M166 C SAD #-1 C JMP M371 1129 FAULT('T') %IF VAL&16_FF00 # 0 C LAC M163 C AND #177400 C SNA C JMP M367 C LAC #124 C JMS M175 C DEFINE 367 1130 %IF MODE = -2 %START C LAC M166 C SAD #-2 C SKP C JMP M367 1131 J = VAL<<8; MODE = -3 C LAC M163 C DAC M2 C LAC #10 C JMS M12 C DAC M242 C LAC #-3 C DAC M166 1132 %ELSE %START C JMP M370 C DEFINE 367 1133 VAL = VAL+J; MODE = -2 C LAC M163 C TAD M242 C DAC M163 C LAC #-2 C DAC M166 1134 PLANT VAL C JMS M204 1135 %FINISH C DEFINE 370 1136 %ELSE %START C JMP M372 C DEFINE 371 1137 PLANT VAL; VAL = VAL&255 C JMS M204 C LAC M163 C AND #377 C DAC M163 1138 %FINISH C DEFINE 372 1139 I = I-1 C LAC #-1 C TAD M241 C DAC M241 1140 %REPEAT C JMP M-374 C DEFINE 373 1141 %EXIT %UNLESS S(',') %OR SYM&128 # 0 C LAC #54 C JMS M212 C SZL C JMP M373 C LAC M134 C AND #200 C SNA C JMP M375 C DEFINE 373 1142 %IF SYM = NL %START C LAC M134 C SAD #12 C SKP C JMP M373 1143 PRINT LINE %IF PRINTPOS # 0; READ LINE C LAC M114 C SZA C JMS M202 C JMS M223 1144 QSTART = QBASE C LAC M120 C DAC M121 1145 %FINISH C DEFINE 373 1146 QLIM = QSTART C LAC M121 C DAC M122 1147 %REPEAT C JMP M-376 C DEFINE 375 1148 VAL=J %AND PLANT VAL %IF MODE = -3 C LAC M166 C SAD #-3 C SKP C JMP M375 C LAC M242 C DAC M163 C JMS M204 C DEFINE 375 1149 ->SEND C JMP M302 1150 1151 LABDEF: C DEFINE 266 1152 CREG = -1; ATYPE = -1 C LAC #-1 C DAC M156 C LAC #-1 C DAC M154 1153 GET SYM C JMS M211 1154 FAULT('C') %AND NP=STORELIM %IF NP # STORELIM C LAC M132 C SAD M133 C JMP M375 C LAC #103 C JMS M175 C LAC M133 C DAC M132 C DEFINE 375 1155 TYPE = LOCTYPE; VAL = LOC C LAC M151 C DAC M162 C LAC M152 C DAC M163 1156 LOOKUP(7) C LAC #7 C JMS M216 1157 ->NEXT C JMP M251 1158 1159 ASSIGN: C DEFINE 267 1160 PEND = 1 C LAC #1 C DAC M167 1161 GET EXP C JMS M220 1162 ->ERR %IF %NOT S('=') C LAC #75 C JMS M212 C SNL C JMP M244 1163 QUEUE(-25); !'STORE' C LAC #-31 C JMS M217 1164 %IF INTEGER(QBASE) = REG %START C LAC* M120 C SAD M101 C SKP C JMP M375 1165 DREG = INTEGER(QBASE+1) C LAC #1 C TAD M120 C JMS M35 C LAC* M3 C DAC M160 1166 DUSE = 0 C DZM M161 1167 %FINISH C DEFINE 375 1168 QSTART = QLIM; MODE = 2 C LAC M122 C DAC M121 C LAC #2 C DAC M166 1169 GET EXP C JMS M220 1170 QUEUE(-24); !'LOAD' C LAC #-30 C JMS M217 1171 1172 CONDQ: C DEFINE 303 1173 %IF TAGIF %START C JMS M215 C SNL C JMP M375 1174 MODE = MODE+4; DREG = DREG-16; !SCARIFY C LAC #4 C TAD M166 C DAC M166 C LAC #-20 C TAD M160 C DAC M160 1175 GET COND; ASSEMBLE C JMS M221 C JMS M210 1176 MODE = MODE-4; DREG = DREG+16; !RESTORE C LAC #-4 C TAD M166 C DAC M166 C LAC #20 C TAD M160 C DAC M160 1177 QLIM = QSTART; QSTART = TRANSF C LAC M121 C DAC M122 C LAC M123 C DAC M121 1178 %FINISH C DEFINE 375 1179 ASSEMBLE C JMS M210 1180 ->SEND C JMP M302 1181 1182 JUMP: C DEFINE 270 1183 FLAG = TAG2-P; !POSITIVE IF SHORT C LAC M165 C CMA C TAD M235 C CMA C DAC M170 1184 GET EXP C JMS M220 1185 QUEUE(-26); !'JUMP' C LAC #-32 C JMS M217 1186 ->CONDQ C JMP M303 1187 1188 MINST: C DEFINE 301 1189 MODE = -1 C LAC #-1 C DAC M166 1190 GET INST C JMS M222 1191 QUEUE(-23); !'PLANT' C LAC #-27 C JMS M217 1192 ->CONDQ C JMP M303 1193 1194 MACCALL: C DEFINE 300 1195 QUEUE(VAL); !DEFPOS C LAC M163 C JMS M217 1196 QUEUE(TYPE&1023); !JOKER C LAC M162 C AND #1777 C JMS M217 1197 QUEUE(0); !(CALLPOS) C LAC #0 C JMS M217 1198 QUEUE(STARTPOS) C LAC M110 C JMS M217 1199 QUEUE(MP) C LAC M117 C JMS M217 1200 %CYCLE C DEFINE 376 1201 %EXIT %IF CHAR(INTEGER(QBASE)) = NL; !END OF MAC DEF C LAC* M120 C JMS M173 C SAD #12 C JMP M375 1202 I = GETPOS-1; !SAVE CALLPOS C LAC #-1 C TAD M111 C DAC M241 1203 GETPOS = INTEGER(QBASE); GET SYM C LAC* M120 C DAC M111 C JMS M211 1204 %MONITOR 24 %IF %NOT TAG C JMS M214 C SZL C JMP M373 C JMS* M4 C LIT 430 C DEFINE 373 1205 TYPE = 0; VAL = 0 C DZM M162 C DZM M163 1206 SCAN ARG C JMS M224 1207 GET SYM %IF SYM = ',' C LAC M134 C SAD #54 C JMS M211 1208 INTEGER(QBASE) = GETPOS-1; !UPDATE DEFPOS C LAC #-1 C TAD M111 C DAC* M120 1209 GETPOS = I; GET SYM; !RESTORE CALLPOS C LAC M241 C DAC M111 C JMS M211 1210 SCAN ARG C JMS M224 1211 GET SYM %IF SYM = ',' C LAC M134 C SAD #54 C JMS M211 1212 QUEUE(TAG1); QUEUE(TAG2) C LAC M164 C JMS M217 C LAC M165 C JMS M217 1213 QUEUE(TYPE); QUEUE(VAL) C LAC M162 C JMS M217 C LAC M163 C JMS M217 1214 %REPEAT C JMP M-376 C DEFINE 375 1215 GET SYM %IF SYM = ' ' C LAC M134 C SAD #40 C JMS M211 1216 %IF TAGIF %START C JMS M215 C SNL C JMP M375 1217 GET COND; QUEUE(-18); ASSEMBLE C JMS M221 C LAC #-22 C JMS M217 C JMS M210 1218 QLIM = QSTART C LAC M121 C DAC M122 1219 INTEGER(QBASE+1) = INTEGER(QBASE+1)+16_8000 C LAC #1 C TAD M120 C JMS M35 C LAC* M3 C TAD #100000 C JMS M5 C LAC #1 C TAD M120 C JMS M35 C LAC* M0 C DAC* M3 1220 %FINISH C DEFINE 375 1221 QUEUE(0) C LAC #0 C JMS M217 1222 MP = QBASE; STARTPOS = QLIM<<1 C LAC M120 C DAC M117 C LAC M122 C CLA!RAL C DAC M110 1223 INTEGER(MP) = INTEGER(MP)+1 C LAC* M117 C TAD #1 C DAC* M117 1224 INTEGER(MP+2) = GETPOS-1 C LAC #2 C TAD M117 C JMS M35 C LAC #-1 C TAD M111 C DAC* M3 1225 PRINT LINE %IF PRINTPOS # 0 %AND LIST&2 # 0 C LAC M114 C SNA C JMP M375 C LAC M142 C AND #2 C SZA C JMS M202 C DEFINE 375 1226 ->READ C JMP M250 1227 1228 !CODING OF JUMPS: 1000 (SINGLE INST), 2000 (MAIN IF) 1229 ! 4000 (ELSE), 6000 (IF AFTER ELSE) 1230 1231 IFC: C DEFINE 271 1232 GET COND; QUEUE(-15); ASSEMBLE C JMS M221 C LAC #-17 C JMS M217 C JMS M210 1233 ->SEND C JMP M302 1234 1235 ELSE: C DEFINE 272 1236 ->CERR %IF INTEGER(NP)&16_2000 = 0 C LAC* M132 C AND #20000 C SNA C JMP M304 1237 QUEUE(0); QUEUE(0) C LAC #0 C JMS M217 C LAC #0 C JMS M217 1238 QUEUE(-16); ASSEMBLE C LAC #-20 C JMS M217 C JMS M210 1239 ATYPE = -1; CREG = -1 C LAC #-1 C DAC M154 C LAC #-1 C DAC M156 1240 %IF TAGIF %START C JMS M215 C SNL C JMP M375 1241 GET COND; QUEUE(-17); ASSEMBLE C JMS M221 C LAC #-21 C JMS M217 C JMS M210 1242 %FINISH C DEFINE 375 1243 ->SEND C JMP M302 1244 1245 FINISH: C DEFINE 273 1246 ->CERR %IF INTEGER(NP)&16_6000 = 0 C LAC* M132 C AND #60000 C SNA C JMP M304 1247 I = LOC C LAC M152 C DAC M241 1248 %WHILE INTEGER(NP)&16_4000 # 0 %CYCLE C DEFINE 376 C LAC* M132 C AND #40000 C SNA C JMP M375 1249 %IF INTEGER(NP)&16_2000 # 0 %START; !IF AFTER ELSE C LAC* M132 C AND #20000 C SNA C JMP M373 1250 SET LAB(I) C LAC M241 C JMS M207 1251 %ELSE %START C JMP M374 C DEFINE 373 1252 SET LAB(LOC) C LAC M152 C JMS M207 1253 I = VAL+1 C LAC #1 C TAD M163 C DAC M241 1254 %FINISH C DEFINE 374 1255 %REPEAT C JMP M-376 C DEFINE 375 1256 SET LAB(I) C LAC M241 C JMS M207 1257 ->SEND C JMP M302 1258 1259 WHILE: C DEFINE 274 1260 I = LOC; ATYPE = -1; CREG = -1 C LAC M152 C DAC M241 C LAC #-1 C DAC M154 C LAC #-1 C DAC M156 1261 GET COND; QUEUE(-13); ASSEMBLE C JMS M221 C LAC #-15 C JMS M217 C JMS M210 1262 NEST(I); NEST(1) C LAC M241 C JMS M206 C LAC #1 C JMS M206 1263 ->SEND C JMP M302 1264 1265 CYCLE: C DEFINE 275 1266 NEST(LOC); NEST(1) C LAC M152 C JMS M206 C LAC #1 C JMS M206 1267 ->SEND C JMP M302 1268 1269 REPEAT: C DEFINE 276 1270 ->CERR %IF INTEGER(NP) # 1 C LAC* M132 C SAD #1 C SKP C JMP M304 1271 QUEUE(LOCTYPE); QUEUE(INTEGER(NP+1)) C LAC M151 C JMS M217 C LAC #1 C TAD M132 C JMS M35 C LAC* M3 C JMS M217 1272 NP = NP+2 C LAC #2 C TAD M132 C DAC M132 1273 QUEUE(-26); !'JUMP' C LAC #-32 C JMS M217 1274 FLAG = -1 C LAC #-1 C DAC M170 1275 ->CONDQ C JMP M303 1276 1277 CERR: C DEFINE 304 1278 FAULT('C') C LAC #103 C JMS M175 1279 ->LEND C JMP M256 1280 1281 SEND: C DEFINE 302 1282 SET LAB(LOC) %IF INTEGER(NP)&16_1000 # 0 C LAC* M132 C AND #10000 C SNA C JMP M375 C LAC M152 C JMS M207 C DEFINE 375 1283 ->LEND %IF SYM = NL C LAC M134 C SAD #12 C JMP M256 1284 ->NEXT %IF S(';') C LAC #73 C JMS M212 C SZL C JMP M251 1285 1286 ERR:FSYM = 'F'; FAULTPOS = GETPOS-1 C DEFINE 244 C LAC #106 C DAC M136 C LAC #-1 C TAD M111 C DAC M115 1287 PRINTPOS = STARTPOS C LAC M110 C DAC M114 1288 1289 LEND: C DEFINE 256 1290 ->READ %IF SKIP # 0 %AND LIST&4 = 0 C LAC M144 C SNA C JMP M375 C LAC M142 C AND #4 C SNA C JMP M250 C DEFINE 375 1291 ->READ %IF FSYM = ' ' %AND CHARS = 0 %AND %C C LAC M136 C SAD #40 C SKP C JMP M375 C LAC M137 C SZA C JMP M375 C LAC M114 C SNA C JMP M374 C LAC M117 C SNA C JMP M375 C LAC M142 C AND #2 C SNA C DEFINE 374 C JMP M250 C DEFINE 375 1292 (PRINTPOS = 0 %OR (MP#0 %AND LIST&2=0)) 1293 PRINT LINE C JMS M202 1294 ->READ C JMP M250 1295 1296 ASSIF: C DEFINE 253 1297 ASSCOND = ASSCOND<<1 C LAC M143 C CLA!RAL C DAC M143 1298 ->LEND %IF SKIP # 0 C LAC M144 C SZA C JMP M256 1299 A1: GET COND; ASSEMBLE C DEFINE 305 C JMS M221 C JMS M210 1300 SKIP = ASSCOND %IF COND # 0 C LAC M157 C SNA C JMP M375 C LAC M143 C DAC M144 C DEFINE 375 1301 PRINT LINE %IF PRINTPOS # 0 C LAC M114 C SZA C JMS M202 1302 ->LEND C JMP M256 1303 1304 ASSELSE: C DEFINE 254 1305 %IF SKIP = 0 %START C LAC M144 C SZA C JMP M375 1306 ->CERR %IF ASSCOND&1 # 0 C LAC M143 C AND #1 C SZA C JMP M304 1307 SKIP = ASSCOND C LAC M143 C DAC M144 1308 %ELSE %START C JMP M376 C DEFINE 375 1309 ->LEND %IF SKIP # ASSCOND C LAC M144 C SAD M143 C SKP C JMP M256 1310 SKIP = 0 C DZM M144 1311 ->A1 %IF TAGIF C JMS M215 C SZL C JMP M305 1312 %FINISH C DEFINE 376 1313 ASSCOND = ASSCOND+1 C ISZ M143 C NOP 1314 ->LEND C JMP M256 1315 1316 ASSFIN: C DEFINE 255 1317 ->CERR %IF ASSCOND = 1 C LAC M143 C SAD #1 C JMP M304 1318 ASSCOND = ASSCOND>>1 C CLA!RAR C DAC M143 1319 SKIP = 0 %IF SKIP>>1 = ASSCOND C LAC M144 C CLA!RAR C SAD M143 C DZM M144 1320 ->LEND C JMP M256 1321 1322 DEFINE: C DEFINE 257 1323 FAULT('C') %IF NP # STORELIM C LAC M132 C SAD M133 C JMP M375 C LAC #103 C JMS M175 C DEFINE 375 1324 I = TAG1 C LAC M164 C DAC M241 1325 %CYCLE C DEFINE 376 1326 ->ERR %IF %NOT (TAG %AND S('=')) C JMS M214 C SNL C JMP M372 C LAC #75 C JMS M212 C SNL C DEFINE 372 C JMP M244 1327 J = TAG1; K = TAG2 C LAC M164 C DAC M242 C LAC M165 C DAC M243 1328 %IF TAG %START C JMS M214 C SNL C JMP M373 1329 TYPE = UMASK; LOOKUP(0) C LAC M100 C DAC M162 C LAC #0 C JMS M216 1330 %IF TYPE&OPMASK # 0 %START C LAC M162 C AND M75 C SNA C JMP M371 1331 GET INST C JMS M222 1332 %ELSE %START C JMP M372 C DEFINE 371 1333 PEND = -1; GET EXP C LAC #-1 C DAC M167 C JMS M220 1334 %FINISH C DEFINE 372 1335 %ELSE GET EXP C JMP M374 C DEFINE 373 C JMS M220 C DEFINE 374 1336 ASSEMBLE C JMS M210 1337 TAG1 = J; TAG2 = K C LAC M242 C DAC M164 C LAC M243 C DAC M165 1338 %IF I=DEF %THEN LOOKUP(3) %ELSE LOOKUP(2) C LAC M241 C SAD M237 C SKP C JMP M373 C LAC #3 C JMS M216 C JMP M374 C DEFINE 373 C LAC #2 C JMS M216 C DEFINE 374 1339 %EXIT %UNLESS S(',') C LAC #54 C JMS M212 C SNL C JMP M375 1340 QLIM = QSTART C LAC M121 C DAC M122 1341 %REPEAT C JMP M-376 C DEFINE 375 1342 ->SEND C JMP M302 1343 1344 NEWPAGE: C DEFINE 252 1345 DO NEWLINE %WHILE LINES # 0 C DEFINE 376 C LAC M140 C SNA C JMP M375 C JMS M201 C JMP M-376 C DEFINE 375 1346 ->LEND C JMP M256 1347 1348 LISTC: C DEFINE 260 1349 GET EXP; ASSEMBLE C JMS M220 C JMS M210 1350 LIST = VAL C LAC M163 C DAC M142 1351 ->SEND C JMP M302 1352 1353 TEMP: C DEFINE 261 1354 I = 0 C DZM M241 1355 %IF SYM # NL %START C LAC M134 C SAD #12 C JMP M375 1356 %CYCLE C DEFINE 374 1357 GET EXP C JMS M220 1358 FAULT('I') %IF TYPE # REG C LAC M162 C SAD M101 C JMP M371 C LAC #111 C JMS M175 C DEFINE 371 1359 I = I!1<SEND C JMP M302 1366 1367 LOCC: C DEFINE 262 1368 I = TAG1 C LAC M164 C DAC M241 1369 GET EXP; ASSEMBLE C JMS M220 C JMS M210 1370 %IF TYPE&16_FF9F = 0 %START C LAC M162 C AND #177637 C SZA C JMP M375 1371 LOCTYPE = TYPE&RELMASK+MEMMASK; LOC = VAL C LAC M162 C AND M103 C TAD M102 C DAC M151 C LAC M163 C DAC M152 1372 PUT WORD(VAL-1) %AND CONTROL=16_30 %IF PASS > 0 C LAC M141 C SPA!SNA C JMP M373 C LAC #-1 C TAD M163 C JMS M203 C LAC #60 C DAC M147 C DEFINE 373 1373 %ELSE FAULT('I') C JMP M376 C DEFINE 375 C LAC #111 C JMS M175 C DEFINE 376 1374 ->SEND C JMP M302 1375 1376 SAVC: C DEFINE 263 1377 GET EXP; ASSEMBLE C JMS M220 C JMS M210 1378 SAVE = VAL C LAC M163 C DAC M145 1379 ->SEND C JMP M302 1380 1381 MACDEF: C DEFINE 264 1382 ->CERR %IF MP # 0 C LAC M117 C SZA C JMP M304 1383 ->ERR %IF %NOT TAG C JMS M214 C SNL C JMP M244 1384 J = TAG1; K = TAG2 C LAC M164 C DAC M242 C LAC M165 C DAC M243 1385 I = GETPOS-1 C LAC #-1 C TAD M111 C DAC M241 1386 %IF SYM # NL %START C LAC M134 C SAD #12 C JMP M375 1387 %CYCLE C DEFINE 374 1388 ->ERR %IF %NOT TAG C JMS M214 C SNL C JMP M244 1389 SCAN ARG C JMS M224 1390 %EXIT %IF %NOT S(',') C LAC #54 C JMS M212 C SNL C JMP M373 1391 %REPEAT C JMP M-374 C DEFINE 373 1392 %FINISH C DEFINE 375 1393 ->ERR %IF SYM # NL C LAC M134 C SAD #12 C SKP C JMP M244 1394 TAG1 = J; TAG2 = K C LAC M242 C DAC M164 C LAC M243 C DAC M165 1395 TYPE = MACRO; VAL = I C LAC M76 C DAC M162 C LAC M241 C DAC M163 1396 LOOKUP(3) C LAC #3 C JMS M216 1397 %CYCLE C DEFINE 376 1398 PRINT LINE C JMS M202 1399 %EXIT %IF S('$') %AND TAG %AND TAG1 = END C LAC #44 C JMS M212 C SNL C JMP M373 C JMS M214 C SNL C JMP M373 C LAC M164 C SAD M240 C JMP M375 C DEFINE 373 1400 STARTPOS = PUTPOS C LAC M112 C DAC M110 1401 STARTPOS = PSEUDOLIM+1 %IF PSEUDOLIM # 0 C LAC M113 C SNA C JMP M373 C TAD #1 C DAC M110 C DEFINE 373 1402 READ LINE C JMS M223 1403 %REPEAT C JMP M-376 C DEFINE 375 1404 PUTPOS = STARTPOS; PUT CHAR(0) C LAC M110 C DAC M112 C LAC #0 C JMS M174 1405 STARTPOS = PUTPOS C LAC M112 C DAC M110 1406 MACLIM = STARTPOS C DAC M116 1407 ->LEND C JMP M256 1408 1409 %ROUTINE BNEST C BLOCK BEGIN 0 1410 BP = BP+4; %MONITOR 23 %IF BP-NP >= 0 C LAC #4 C TAD M131 C DAC M131 C CMA C TAD M132 C CMA C SPA C JMP M375 C JMS* M4 C LIT 427 C DEFINE 375 1411 INTEGER(BP-3) = SAVE; INTEGER(BP-2) = TEMPS C LAC #-3 C TAD M131 C JMS M35 C LAC M145 C DAC* M3 C LAC #-2 C TAD M131 C JMS M35 C LAC M146 C DAC* M3 1412 INTEGER(BP-1) = MACLIM; INTEGER(BP) = DEFMIN C LAC #-1 C TAD M131 C JMS M35 C LAC M116 C DAC* M3 C LAC M124 C DAC* M131 1413 %END C JMP* M306 D DEFINE 306 D LIT 0 C ARG -355764 C ARG -213215 C ARG 64 C BLOCK END 306 1414 1415 BEGIN: C DEFINE 265 1416 BNEST C JMS M306 1417 ->NEWPAGE %IF SYM # NL C LAC M134 C SAD #12 C SKP C JMP M252 1418 ->LEND C JMP M256 1419 1420 BEND: C DEFINE 245 1421 FAULT('C') %IF NP # STORELIM %OR MP # 0 C LAC M132 C SAD M133 C SKP C JMP M374 C LAC M117 C SNA C JMP M375 C DEFINE 374 C LAC #103 C JMS M175 C DEFINE 375 1422 MP = 0; NP = STORELIM C DZM M117 C LAC M133 C DAC M132 1423 %IF BP # LABLIM %START C LAC M131 C SAD M130 C JMP M375 1424 SAVE = INTEGER(BP-3); TEMPS = INTEGER(BP-2) C TAD #-3 C JMS M35 C LAC* M3 C DAC M145 C LAC #-2 C TAD M131 C JMS M35 C LAC* M3 C DAC M146 1425 MACLIM = INTEGER(BP-1); STARTPOS = MACLIM C LAC #-1 C TAD M131 C JMS M35 C LAC* M3 C DAC M116 C DAC M110 1426 DEFMIN = INTEGER(BP) C LAC* M131 C DAC M124 1427 SET ACC C JMS M225 1428 BP = BP-4 C LAC #-4 C TAD M131 C DAC M131 1429 ->LEND %IF BP # LABLIM C SAD M130 C SKP C JMP M256 1430 %FINISH C DEFINE 375 1431 CLOSE INPUT; SELECT INPUT(MAIN) C JMS M55 C LAC M71 C JMS M36 1432 BNEST C JMS M306 1433 LIST = 5 C LAC #5 C DAC M142 1434 PASS = PASS+1 C ISZ M141 C NOP 1435 ->DO PASS %IF PASS # 2 C LAC M141 C SAD #2 C SKP C JMP M247 1436 1437 PUT WORD(CHECK!!16_0100); CONTROL = 16_30 C LAC M150 C XOR #400 C JMS M203 C LAC #60 C DAC M147 1438 PUT WORD(16_0100) C LAC #400 C JMS M203 1439 SELECT OUTPUT(BIN); PRINT CH(16_60); SELECT OUTPUT(LIS) C LAC M73 C JMS M37 C LAC #140 C JMS M41 C LAC M74 C JMS M37 1440 FAULT('$') C LAC #44 C JMS M175 1441 PRINT LOC; PRINT LINE C JMS M200 C JMS M202 1442 LINES = 60 %IF OUTDEV = 1 C JMS M64 C SAD #1 C SKP C JMP M375 C LAC #74 C DAC M140 C DEFINE 375 1443 DO NEWLINE %WHILE LINES # 0 C DEFINE 376 C LAC M140 C SNA C JMP M375 C JMS M201 C JMP M-376 C DEFINE 375 1444 1445 %ENDOFPROGRAM C JMS* M4 C LIT 400 D DEFINE 246 D LIT 0 D DEFINE 243 D LIT 0 D DEFINE 242 D LIT 0 D DEFINE 241 D LIT 0 D DEFINE -172 D LIT 0 D DEFINE 171 D LIT 0 D DEFINE 170 D LIT 0 D DEFINE 167 D LIT 0 D DEFINE 166 D LIT 0 D DEFINE 165 D LIT 0 D DEFINE 164 D LIT 0 D DEFINE 163 D LIT 0 D DEFINE 162 D LIT 0 D DEFINE 161 D LIT 0 D DEFINE 160 D LIT 0 D DEFINE 157 D LIT 0 D DEFINE 156 D LIT 0 D DEFINE 155 D LIT 0 D DEFINE 154 D LIT 0 D DEFINE 153 D LIT 0 D DEFINE 152 D LIT 0 D DEFINE 151 D LIT 0 D DEFINE 144 D LIT 0 D DEFINE 143 D LIT 0 D DEFINE 136 D LIT 0 D DEFINE 135 D LIT 0 D DEFINE 134 D LIT 0 C BLOCK END 0 1446