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