File: declare.t2

For general comments see here
LineAddressObject Code LabelF1N1BF2N2CommentsCheck
1 0  ; tape1.d/declare.t2
2 0  ;-------------------
3 0  ;
4 0  =1196 
5 1196  declaration::; 
6 1196  .loop:; 
7 1196  ;.1196:
8 1196   call     ; @1196
8+11196 7322411004503 lnk advance.lnk:jmp advance.ent 
9 1197  declns.ent:; 
10 1197 0602175 lod bit39   ;mark as local to current block
11 1197+0402162 sto typeinfo   ;declaration type
12 1198 0600600 lod token   ;token @1198
13 1198+1022261 jn .err2   ;constant
14 1199 0122176 sub K9a   ;=9
15 1199+1022334 jn .stat   ;statement starter
16 1200 0122200 sub K8a   ;=8 @1200
17 1200+1022263 jn .decl   ;declarer
18 1201 0000000.err2:o00 0   ; @1201
19 1201+1661044_err02:lnk errlnk   ;error 2: bad start or end to statement, or
20 1202   ;symbol following own not real,int,bool,array, 
21 1202   ;or proc decl not followed by ;, or 
22 1202   ;name in decl not folowed by , or ;, or 
23 1202   ;decl following proc decl not proc decl. 
24 1202  Error2:; 
25 1202 0602205 lod K2a   ;=2
26 1202+1001070 jmp Error   ;
27 1203  ;
28 1203  ;token is valid start for declaration
29 1203  ;
30 1203  .decl:; 
31 1203 0003003002330 o00 token/jmp declsw-10;switch on declarer
32 1204  ;
33 1204  ; own declaration
34 1204  ;
35 1204  .own:; 
36 1204   call     ;get next token @1204
36+11204 7305105001222 lnk gettoken.lnk:jmp gettoken.ent 
37 1205 0600600 lod token   ;token
38 1205+0122231 sub K11   ;should be int,real,boolean,array
39 1206 1022261 jn .err2   ;error if less
40 1206+0122211 sub K4   ;
41 1207 0003003022330 o00 token/jn declsw-10;
42 1208 1002261 jmp .err2   ;not valid with own @1208
43 1208+ ;
44 1208+ ; boolean, integer or real keyword
45 1208+ ; ACC contains mode bits
46 1208+ ;
47 1208+0402163.svar:sto W1139   ;save type @1208+
48 1209   call     ;get next token
48+11209 7305105001222 lnk gettoken.lnk:jmp gettoken.ent 
49 1210 0600600 lod token   ;load token @1210
50 1210+1042321 jz .ident   ;zero->identifier list
51 1211 0122230 sub K14   ;=14, [ARRAY]
52 1211+1043062 jz L1586   ;yes, do array declaration
53 1212 0122205 sub K2a   ;=2, [PROCEDURE] @1212
54 1212+1142275 jz .tproc   ;yes, do procedure declaration
55 1213 1002261 jmp .err2   ;otherwise error
56 1213+ ;
57 1213+ ; type procedure declaration
58 1213+ ;
59 1213+ .tproc:; 
60 1213+0602162 lod typeinfo   ;
61 1214 1042261 jz .err2   ;zero, error (own int proc) @1214
62 1214+0602163 lod W1139   ;get type
63 1215 0102232.proc:add procbit   ;=02000000000000 add proc bit @1215
64 1215+0402163 sto W1139   ;store updated type
65 1216 1110637 jmp .skip1   ;-->> @1216
66 1216+ =4511+ 
67 4511+ .skip1:; 
68 4511+0040000 o02 0   ;=1
69 4512 0410621 sto W4497   ;set recovery flag=+1 @4512
70 4512+0602160 lod dicpt   ;
71 4513 0410625 sto W4501   ;
72 4513+1010626 jmp statement.4502   ;
73 4514  ;
74 4514  =1216+ 
75 1216+ .resumeproc:; 
76 1216+0040000 o02 0   ;=1 @1216+
77 1217   call     ;generate code?
77+11217 7307175001640 lnk GenInst.lnk:jmp GenInst.ent 
78 1218 1002470 jmp .procparam   ; @1218
79 1218+ ;
80 1218+  pad     ;
80+11218+0000000 00 0    
81 1219  ;--------------------------------------------------------------------
82 1219  ;
83 1219  .recover:; 
84 1219 0600600 lod token   ; @1219
85 1219+0122200 sub K8a   ;=8 [']
86 1220 1042306 jz .semicolon   ;
87 1220+1002261 jmp .err2   ;
88 1221  ;
89 1221  .comment:; 
90 1221   call     ;skip over comment
90+11221 7312031002420 lnk skipcomment.lnk:jmp skipcomment.ent 
91 1222  .semicolon:; 
92 1222   call     ;discard semicolon, get next
92+11222 7322411004503 lnk advance.lnk:jmp advance.ent 
93 1223 0600600 lod token   ;
94 1223+1022261 jn .err2   ;constant not a good starter
95 1224 0122176 sub K9a   ;=9 @1224
96 1224+1022333 jn .stat2   ;statement starter
97 1225 0122200 sub K8a   ;=8
98 1225+1022313 jn .decl2   ;declaration starter
99 1226 1002261 jmp .err2   ;others
100 1226+ ;
101 1226+0000000 o00 0   ;
102 1227  ;
103 1227  ; keyword for declaration, switch to appropriate point
104 1227  .decl2:; 
105 1227 0003003002340 o00 token/jmp decl2sw-9;switch on token @1227
106 1228  ;--------------------------------------------------------------------
107 1228  ; param type: int, bool, real
108 1228  ;
109 1228  .pvar:; 
110 1228 0102232 add procbit   ; @1228
111 1228+0402163 sto W1139   ;
112 1229   call     ;
112+11229 7305105001222 lnk gettoken.lnk:jmp gettoken.ent 
113 1230 0600600 lod token   ; @1230
114 1230+0122245 sub K16   ;=16 [PROCEDURE]
115 1231 1042470 jz .procparam   ;
116 1231+1002261 jmp .err2   ;
117 1232  ;
118 1232  ; param type: procedure
119 1232  ;
120 1232 0402163.prp:sto W1139   ; @1232
121 1232+1002470 jmp .procparam   ;
122 1233  ;
123 1233  .ident:; 
124 1233   call     ;compile id list? @1233
124+11233 7310725110636 lnk L4510.lnk:jmp L4510.ent 
125 1234  .idlst:; recovery point from errors 
126 1234 0602162 lod typeinfo   ;
127 1234+1142325 jz .own2   ;own variables? ->
128 1235 0602164 lod idcount   ;number of ids
129 1235+0502161 ads wsptr   ;add to workspace pointer
130 1236 0602161 lod wsptr   ;pass current workspace pointer
131 1236+1002327 jmp .define   ;->to add it to dic info
132 1237  ;
133 1237 0000000 o00 0    
134 1237+ ;
135 1237+0602164.own2:lod idcount   ;number of ids in list @1237+
136 1238 0502143 ads W1123   ;add to global wksp size
137 1238+0602143 lod W1123   ;pass current global pointer
138 1239  ;
139 1239  .define:; 
140 1239 0102177 add MaxInt   ;=03777777777777 @1239
141 1239+0102163 add W1139   ;idtype
142 1240   call     ;add to dictionary @1240
142+11240 7312031002407 lnk addtodic.lnk:jmp addtodic.ent 
143 1241 0600600.done:lod token   ;token
144 1241+0122200 sub K8a   ;=8 [']
145 1242 1042254 jz .loop   ; apostrophe (semicolon) -> @1242
146 1242+1002261 jmp .err2   ;error?
147 1243  ;--------------------------------------------------------------------
148 1243  ; next token is statement - end of declarations
149 1243  ;
150 1243  .stat2:; 
151 1243   call     ;
151+11243 7306371101531 lnk putcode6.lnk:jmp putcode6.ent 
152 1244  .stat:; 
153 1244 0602161 lod wsptr   ; @1244
154 1244+0122147 sub W1127   ;wsplim
155 1245 1022336 jn .under   ;
156 1245+0502147 ads W1127   ;
157 1246  .under:; 
158 1246   ret     ; @1246
158+11246 0010643000001 o00 declaration.lnk/jmp 1 
159 1247  ; o00 Link15a /jmp 1 ;return
160 1247  ;--------------------------------------------------------------------
161 1247  .comm2:call     ;no longer referenced
161+11247 7312031002420 lnk skipcomment.lnk:jmp skipcomment.ent 
162 1248 1002254 jmp .loop   ; @1248
163 1248+ ;
164 1248+0000000 o00 0   ;
165 1249  ;
166 1249  ;.1249: ;no longer referenced
167 1249 1002337 jmp .comm2   ; @1249
168 1249+ ;
169 1249+0000000 o00 0   ;
170 1250  ;--------------------------------------------------------------------
171 1250  ; switch list referenced at 1203 above, based on declarer
172 1250  ;
173 1250  declsw:; 
174 1250 2610711002264 cls typeinfo:jmp .own; +10 own @1250
175 1251 3011055102270 lod boolbit:jmp .svar; +11 boolean 0100000000000
176 1252 3011061102270 lod intbit:jmp .svar; +12 integer 0200000000000 @1252
177 1253 3011065102270 lod realbit:jmp .svar; +13 real 0300000000000
178 1254 3011015003061 lod rarrbit:jmp L1585; +14 array @1254
179 1255 4012200000000 jmp .switch:o00 0; +15 switch
180 1256 0600001002277 cla 0:jmp .proc; +16 procedure @1256
181 1257  ;
182 1257  decl2sw:; 
183 1257 4011424000000 jmp .comment:o00 0; +09 comment
184 1258 4011304000000 jmp .err2:o00 0; +10 own @1258
185 1259 3011055002314 lod boolbit:jmp .pvar; +11 boolean
186 1260 3011061002314 lod intbit:jmp .pvar; +12 integer @1260
187 1261 3011065002314 lod realbit:jmp .pvar; +13 real
188 1262 4011304000000 jmp .err2:o00 0; +14 array @1262
189 1263 4011304000000 jmp .err2:o00 0; +15 switch
190 1264 3011151002320 lod procbit:jmp .prp; +16 procedure @1264
191 1265  ;--------------------------------------------------------------------
192 1265  ; switch declaration
193 1265  ;
194 1265  =1312 
195 1312  .switch:; 
196 1312   call     ;save stkp, then call gettoken @1312
196+11312 7305105010635 lnk L4509.lnk:jmp L4509.ent 
197 1313   call     ;read ids
197+11313 7310725002361 lnk declid.lnk:jmp declid.ent 
198 1314 0602164 lod idcount   ;number of ids in list @1314
199 1314+0122207 sub K1c   ;=1
200 1315 1142444 jz .idok   ;
201 1315+1661044_err05:lnk errlnk   ;error 5: missing := in switch
202 1316 1002262 jmp Error2   ; @1316
203 1316+ ;
204 1316+0042201.idok:o02 K42   ;=42+1=>43 [:=]
205 1317 0120600 sub token   ;
206 1317+1042447 jz .swok   ;OK, skip
207 1318 1661044_err06:lnk errlnk   ;error 6: missing := in switch @1318
208 1318+1002262 jmp Error2   ;call error rtne
209 1319  ;
210 1319 0602144.swok:lod W1124   ;
211 1319+1320027 sll 23   ;
212 1320 0102216 add swchbit   ;=04400000000000 @1320
213 1320+0102143 add W1123   ;
214 1321   call     ;add type info to dic
214+11321 7312031002407 lnk addtodic.lnk:jmp addtodic.ent 
215 1322 0602160 lod dicpt   ; @1322
216 1322+0342171 stc W1145   ;
217 1323   call     ;add to dic
217+11323 7312031002407 lnk addtodic.lnk:jmp addtodic.ent 
218 1324   call     ;discard :=, get 1st id @1324
218+11324 7305105001222 lnk gettoken.lnk:jmp gettoken.ent 
219 1325   call     ;read list of ids
219+11325 7310725002361 lnk declid.lnk:jmp declid.ent 
220 1326 0602164 lod idcount   ;number of ids in list @1326
221 1326+0502143 ads W1123   ;
222 1327 0602144 lod W1124   ;
223 1327+1320027 sll 23   ;
224 1328 0102217 add swlabit   ;=04477777777777 @1328
225 1328+0102143 add W1123   ;
226 1329   call     ;
226+11329 7312031002407 lnk addtodic.lnk:jmp addtodic.ent 
227 1330 0602164 lod idcount   ;number of ids in list @1330
228 1330+0102177 add MaxInt   ;
229 1331 0010746400000 o00 W1145/sto 0;
230 1332 1002331 jmp declaration.done   ;finished, check for semicolon @1332
231 1332+ ;
232 1332+0000000 o00 0   ;
233 1333  ;--------------------------------------------------------------------
234 1333  =1336 
235 1336  ;
236 1336  .procparam:; 
237 1336   call     ;stack something, then gettoken @1336
237+11336 7305105003014 lnk L1548.lnk:jmp L1548.ent 
238 1337   call     ;
238+11337 7310725002361 lnk declid.lnk:jmp declid.ent 
239 1338 0602160 lod dicpt   ; @1338
240 1338+0402171 sto W1145   ;
241 1339 0602163 lod W1139   ;
242 1339+0102161 add wsptr   ;
243 1340 0102175 add bit39   ; @1340
244 1340+0102234 add Bit32   ;=00020000000000
245 1341   call     ;
245+11341 7312031002407 lnk addtodic.lnk:jmp addtodic.ent 
246 1342   call     ;call 940 @1342
246+11342 7307255001654 lnk putNop.lnk:jmp putNop.ent 
247 1343 0602175 lod bit39   ;
248 1343+0102145 add ObjPC   ;
249 1344   call     ; @1344
249+11344 7312031002407 lnk addtodic.lnk:jmp addtodic.ent 
250 1345 0602175 lod bit39   ;
251 1345+0402172 sto Link15c   ;
252 1346 0402173 sto W1147   ; @1346
253 1346+0442161 inc wsptr   ;
254 1347 0602160 lod dicpt   ;
255 1347+0402174 sto W1148   ;
256 1348 0600600 lod token   ; @1348
257 1348+0122200 sub K8a   ;=8, [']
258 1349 1042655 jz .lp3k   ;yes, no formal parameters
259 1349+0122235 sub K39b   ;=39, =>[(]
260 1350 1042507 jz .params   ;yes, get parameter list @1350
261 1350+1002541 jmp _err07   ;
262 1351  ;
263 1351  ; process parameter list
264 1351  ;
265 1351  .params:; 
266 1351   call     ;discard [(] @1351
266+11351 7305105001222 lnk gettoken.lnk:jmp gettoken.ent 
267 1352   call     ;get id list (formal params)
267+11352 7310725003000 lnk declid1.lnk:jmp declid1.ent 
268 1353  .1353:; 
269 1353 0042204 o02 K47a   ;=47+1=>48, [)]
270 1353+0120600 sub token   ;check closing delimiter
271 1354 1042513 jz .closeOK   ;OK, skip @1354
272 1354+1002541 jmp _err07   ;missing ) in param list
273 1355  ;
274 1355  .closeOK:; 
275 1355   call     ;discard ), get next token @1355
275+11355 7305105001222 lnk gettoken.lnk:jmp gettoken.ent 
276 1356 0600600 lod token   ;check for semicolon
277 1356+0122200 sub K8a   ;=8, [']
278 1357 1042516 jz .semiOK   ;OK, skip @1357
279 1357+1003010 jmp .1544   ;missing semicolon?
280 1358  ;
281 1358  .semiOK:; 
282 1358 0602164 lod idcount   ;number of params in list @1358
283 1358+0125036 sub W2590   ;
284 1359 1022520 jn .idsOK   ;
285 1359+1102751 jmp _err08a   ;
286 1360  ;
287 1360  .idsOK:; 
288 1360 0602164 lod idcount   ;number of params @1360
289 1360+1320034 sll 28   ;
290 1361 0010762500001 o00 W1148/ads 1;
291 1362 0602174 lod W1148   ; @1362
292 1362+0402166 sto W1142   ;
293 1363 0042160 o02 dicpt   ;
294 1363+0402167 sto W1143   ;
295 1364  .ploop:; 
296 1364 0010732600000 o00 W1142/lod 0; @1364
297 1365   call     ;
297+11365 7312031002407 lnk addtodic.lnk:jmp addtodic.ent 
298 1366 0642161 lis wsptr   ; @1366
299 1366+0102236 add Bit33   ;
300 1367   call     ;
300+11367 7312031102613 lnk L1419P.lnk:jmp L1419P.ent 
301 1368 0040000 o02 0   ; @1368
302 1368+0762166 o37 W1142   ;
303 1369 0162167 bus W1143   ;
304 1369+1022524 jn .ploop   ;
305 1370 0040000 o02 0   ;=1 @1370
306 1370+0000000 o00 0   ;
307 1371 0010736420000 o00 W1143/stn 0;
308 1372  .specs:; 
309 1372   call     ;get token following ' @1372
309+11372 7305105001222 lnk gettoken.lnk:jmp gettoken.ent 
310 1373 0600600 lod token   ;
311 1373+0122237 sub K19b   ;=19 [VALUE]
312 1374 1042537 jz .value   ;yes, process value list @1374
313 1374+1102760 jmp .1520P   ;check for type specs
314 1375  ;
315 1375  .value:; 
316 1375   call     ;discard VALUE/comma, get next token @1375
316+11375 7305105001222 lnk gettoken.lnk:jmp gettoken.ent 
317 1376 0600600 lod token   ; @1376
318 1376+1042543 jz .valid   ;identifier, ->OK
319 1377 1661044_err07:lnk errlnk   ;error 7: in a procedure declaration:
320 1377+  ;a) item after proc name not ( or ; 
321 1377+  ;b) not ; or ) after formal params 
322 1377+  ;c) list in value of spec has bad form 
323 1377+  ;d) spec before value part 
324 1377+1002262 jmp Error2   ;call error rtne
325 1378 1002542.halt:jmp .halt   ;dynamic halt @1378
326 1378+ ;
327 1378+  pad     ;
327+11378+0000000 00 0    
328 1379  ;
329 1379  ; identifier in VALUE list
330 1379  ;
331 1379  .valid:; 
332 1379   call     ; lookup identifier @1379
332+11379 7316111003423 lnk lookupid.lnk:jmp lookupid.ent 
333 1380 1142754 jz _err10a   ;identifier not found
334 1380+0042236 o02 Bit33   ;
335 1381 0116142457777 neg W1816/ans -1;
336 1382  .errrec:; 
337 1382   call     ;get next token @1382
337+11382 7305105001222 lnk gettoken.lnk:jmp gettoken.ent 
338 1383 0040600 o02 token   ;token+1
339 1383+0122201 sub K42   ;=42, [,]+1
340 1384 1042537 jz .value   ;comma, back for more @1384
341 1384+0102241 add K33   ;=33, [']+1
342 1385 1042552 jz .valsemi   ;semicolon, check for other specs
343 1385+1002541 jmp _err07   ;otherwise, error
344 1386  ;
345 1386  ; end of specification list, see if more specs follow
346 1386  ;
347 1386  .valsemi:; 
348 1386  ;.1386:
349 1386   call     ;discard ', get next token @1386
349+11386 7305105001222 lnk gettoken.lnk:jmp gettoken.ent 
350 1387  .1387:; 
351 1387 0600600 lod token   ;
352 1387+1022541 jn _err07   ;constant
353 1388 0122237 sub K19b   ;=19 @1388
354 1388+1122555 jn .valok   ;declaration or statement
355 1389 1002541 jmp _err07   ;error
356 1389+ ;
357 1389+ .valok:; 
358 1389+0102240 add K10b   ;=10
359 1390 1022606 jn .stat3   ;statement @1390
360 1390+  pad     ;
360+11390+0000000 00 0    
361 1391 0003003002755 o00 token/jmp specsw-9;switch on declarer
362 1392  ;
363 1392   pad      
363+11392 0000000 00 0    
364 1392+ ;
365 1392+ ; boolean, integer, real (simple) specification
366 1392+ ;
367 1392+ .ssp:; 
368 1392+0402162 sto typeinfo   ;store type @1392+
369 1393   call     ;get next token
369+11393 7305105001222 lnk gettoken.lnk:jmp gettoken.ent 
370 1394 0600600 lod token   ; @1394
371 1394+0122230 sub K14   ;=14, [ARRAY]?
372 1395 1042564 jz .aspec   ;yes, ->typed array spec.
373 1395+1002567 jmp .sspec   ;scalar type spec
374 1396  ;
375 1396  ; handle array declaration
376 1396  ;
377 1396 0602202.aspec:lod arrbit   ;add array bit @1396
378 1396+0502162 ads typeinfo   ;into type
379 1397 1002566 jmp .cspec   ;join common section
380 1397+ ;
381 1397+ ; array or string
382 1397+ .asp:; 
383 1397+0402162 sto typeinfo   ;store type bits
384 1398  .cspec:; 
385 1398   call     ;discard type keyword @1398
385+11398 7305105001222 lnk gettoken.lnk:jmp gettoken.ent 
386 1399  .sspec:; 
387 1399 0600600 lod token   ;get next token
388 1399+1042571 jz .idspec   ;identifier
389 1400 1002541 jmp _err07   ;error @1400
390 1400+ ;
391 1400+0000000 o00 0    
392 1401  ;
393 1401  .idspec:; 
394 1401   call     ;lookup identifier @1401
394+11401 7316111003423 lnk lookupid.lnk:jmp lookupid.ent 
395 1402 1142756 jz _err11a   ;
396 1402+0602221 lod typbits   ;=03700000000000
397 1403 0016142057777 o00 W1816/and -1; @1403
398 1404 1142575 jz .idspok   ;
399 1404+0040000 o02 0   ;=1
400 1405 1002757 jmp _err11   ;name not a param @1405
401 1405+ ;
402 1405+ .idspok:; 
403 1405+0602162 lod typeinfo   ;
404 1406 0016142677777 o00 W1816/las -1; @1406
405 1407 0102162 add typeinfo   ;
406 1407+0403427 sto idptr   ;
407 1408 0063023 and W1555   ;=03777740000000 @1408
408 1408+0122252 sub strbit   ;string bits
409 1409 1103016 jmp .skip2   ;
410 1409+ =1550+ 
411 1550+ .skip2:; 
412 1550+1142751 jz _err08a   ;type not allowed as param
413 1551 0102236 add Bit33   ;=00040000000000 @1551
414 1551+0062243 and MskArgTp   ;=03740000000000
415 1552 1142751 jz _err08a   ;more than 64 params
416 1552+0603427 lod idptr   ;
417 1553 0062242 and W1186   ;=03440000000000
418 1553+0122236 sub Bit33   ;=00040000000000
419 1554 1142601 jz .sp1   ; @1554
420 1554+1002602 jmp .sp2   ;
421 1555  ;
422 1555  =1409+ 
423 1409+ ;
424 1409+ .sp1:; 
425 1409+0542172 cls Link15c   ;
426 1410  .sp2:; 
427 1410   call     ;get next token @1410
427+11410 7305105001222 lnk gettoken.lnk:jmp gettoken.ent 
428 1411 0040600 o02 token   ;token+1
429 1411+0122201 sub K42   ;=42, [,]+1
430 1412 1042566 jz .cspec   ;comma, get another ident @1412
431 1412+0102241 add K33   ;=33, =>[']+1
432 1413 1042552 jz .valsemi   ;semicolon, end of specification
433 1413+1002541 jmp _err07   ;otherwise error
434 1414  ;--------------------------------------------------------------------
435 1414  ; statement starter after specifications
436 1414  ; first check all parameters are specified
437 1414  ;
438 1414  .stat3:; 
439 1414 0010736540000 o00 W1143/cls 0;add stopper to list @1414
440 1415 0602160 lod dicpt   ;
441 1415+0402167 sto W1143   ;
442 1416  .sploop:; 
443 1416 2210736600000 inc W1143/lod 0;get param info @1416
444 1417 1043005 jz .spdone   ;end of list, all params OK
445 1417+0062221 and typbits   ;=03700000000000
446 1418 1142753 jz _err08b   ;no type specified @1418
447 1418+0442167 inc W1143   ;skip name entry
448 1419 1002610 jmp .sploop   ;and try next one
449 1419+ ;--------------------------------------------------------------------
450 1419+ L1419P.ent:; 
451 1419+0102175 add bit39   ;
452 1420 1002407 jmp addtodic.ent   ; @1420
453 1420+ ;--------------------------------------------------------------------
454 1420+ ;
455 1420+ =1541 
456 1541  ; finished procedure heading, looking for statement/block
457 1541  ;
458 1541  .spdone:; 
459 1541   call     ;
459+11541 7322411004504 lnk advance2.lnk:jmp advance2.ent 
460 1542 1102614 jmp .skip3   ; @1542
461 1542+ =1420+ 
462 1420+ .skip3:; 
463 1420+0602172 lod Link15c   ;
464 1421 1022617 jn .lp3a   ;skip over next bit
465 1421+1102730 jmp .skip4   ;-->>
466 1422  =1496+ 
467 1496+ .skip4:; 
468 1496+0042233 o02 Bit21   ;=00000004000000 @1496+
469 1497 0702152 las W1130   ;
470 1497+0062212 and B19.28   ;=00001777000000
471 1498 0401422 sto GenAdr   ; @1498
472 1498+0602226 lod K6   ;=6
473 1499   call     ;
473+11499 7307175001640 lnk GenInst.lnk:jmp GenInst.ent 
474 1500 0010746600000 o00 W1145/lod 0; @1500
475 1501 0062244 and M1188   ;
476 1501+0401422 sto GenAdr   ;
477 1502 0602226 lod K6   ;=6 @1502
478 1502+1002711 jmp .skip5   ;-->>
479 1503  =1481 
480 1481  .skip5:; 
481 1481   call     ; @1481
481+11481 7307175001640 lnk GenInst.lnk:jmp GenInst.ent 
482 1482 0602236 lod Bit33   ;
483 1482+1002616 jmp .skip6   ;-->>
484 1483  =1422 
485 1422  .skip6:; 
486 1422 0010762500002 o00 W1148/ads 2; @1422
487 1423  .lp3a:; 
488 1423 0602164 lod idcount   ;number of ids in list
489 1423+0162174 bus W1148   ;
490 1424 0402166 sto W1142   ; @1424
491 1424+ .lp3b:; 
492 1424+0602164 lod idcount   ;number of ids in list
493 1425 0122226 sub K6   ;=6
494 1425+1122623 jn .lp3c   ;
495 1426 0042176 o02 K9a   ;=9+1=>10 @1426
496 1426+1002625 jmp .lp3d   ;
497 1427  ;
498 1427   pad     ;
498+11427 0000000 00 0    
499 1427+ ;
500 1427+ .lp3c:; 
501 1427+0040000 o02 0   ;
502 1428 0162164 bus idcount   ;number of ids in list @1428
503 1428+1320001 sll 1   ;double number
504 1429  .lp3d:; 
505 1429 0422167 stn W1143   ;store (negated)
506 1429+0542170 cls idpt1   ;clear pointer
507 1430  .lp3e:; 
508 1430 0602167 lod W1143   ; @1430
509 1430+0102166 add W1142   ;
510 1431 2010726577777 sto Link15b/lod -1;
511 1432 0062243 and MskArgTp   ; @1432
512 1432+0202170 exa idpt1   ;
513 1433 1220006 srl 6   ;
514 1433+0702170 las idpt1   ;
515 1434 0062242 and W1186   ; @1434
516 1434+0122202 sub arrbit   ;
517 1435 1042634 jz .lp3f   ;
518 1435+1102643 jmp .lp3h   ;
519 1436  ;
520 1436  .lp3f:; 
521 1436 0602173 lod W1147   ; @1436
522 1436+1042637 jz .lp3g   ;
523 1437 0542173 cls W1147   ;
524 1437+  nop     ;
524+11437+1002636 jmp .1    
524+21438  .1:; 
525 1438   call     ;generate Enter Block call @1438
525+11438 7320121003403 lnk GenEB.lnk:jmp GenEB.ent 
526 1439  .lp3g:; 
527 1439 0010726577777 o00 Link15b/lod -1;
528 1440 0062244 and M1188   ; @1440
529 1440+0404031 sto IdInfo   ;
530 1441 0603517 lod GPs+42   ;
531 1441+0000000 o00 0   ;
532 1442   call     ; @1442
532+11442 7320121004033 lnk gencode.lnk:jmp gencode.ent 
533 1443 1002645 jmp .lp3i   ;
534 1443+ ;
535 1443+ .lp3h:; 
536 1443+1022645 jn .lp3i   ;
537 1444 0010726557777 o00 Link15b/o27 -1; @1444
538 1445  .lp3i:; 
539 1445 0602205 lod K2a   ;
540 1445+0702167 las W1143   ;
541 1446 1022626 jn .lp3e   ; @1446
542 1446+ ; end of loop
543 1446+0602170 lod idpt1   ;
544 1447 0000000 o00 0   ;
545 1447+0102175 add bit39   ;
546 1448 0010762400000 o00 W1148/sto 0; @1448
547 1449 0040000 o02 0   ;=1
548 1449+0562174 o27 W1148   ;
549 1450 0602226 lod K6   ;=6 @1450
550 1450+0122164 sub idcount   ;number of ids in list
551 1451 1022654 jn .lp3j   ;
552 1451+1102660 jmp .1456P   ;
553 1452  ;
554 1452 0422164.lp3j:stn idcount   ;number of ids in list @1452
555 1452+1103003 jmp .1539P   ;
556 1453  ;
557 1453  .lp3k:; 
558 1453   call     ;
558+11453 7322411004503 lnk advance.lnk:jmp advance.ent 
559 1454 0600600 lod token   ; @1454
560 1454+1022541 jn _err07   ;constant, error
561 1455 0162176 bus K9a   ;=9
562 1455+1022541 jn _err07   ;not statement starter, error
563 1456 1043024 jz .1556   ;dummy statement @1456
564 1456+ .1456P:; 
565 1456+0602163 lod W1139   ;
566 1457 0062215 and realbit   ;
567 1457+1142662 jz .1458P   ;
568 1458 0442161 inc wsptr   ; @1458
569 1458+ .1458P:; 
570 1458+0742147 lzs W1127   ;
571 1459   call     ;
571+11459 7312031002415 lnk stack.lnk:jmp stack.ent 
572 1460 0602172 lod Link15c   ; @1460
573 1460+1220001 srl 1   ;
574 1461 0402167 sto W1143   ;
575 1461+0602163 lod W1139   ;
576 1462 1003001 jmp .1537   ; @1462
577 1462+ ;
578 1462+ .1462P:; 
579 1462+0602175 lod bit39   ;
580 1463  .1463:; 
581 1463 0102167 add W1143   ;
582 1463+1220001 srl 1   ;
583 1464 0102173 add W1147   ; @1464
584 1464+0402167 sto W1143   ;
585 1465 0602174 lod W1148   ;
586 1465+1320024 sll 20   ;
587 1466 0102171 add W1145   ; @1466
588 1466+0102167 add W1143   ;
589 1467   call     ;
589+11467 7312031002415 lnk stack.lnk:jmp stack.ent 
590 1468   call     ;compile procedure body @1468
590+11468 7310611003254 lnk statement.lnk:jmp statement.ent 
591 1469 0602161 lod wsptr   ;
592 1469+0162147 bus W1127   ;
593 1470 1022677 jn .1471   ; @1470
594 1470+0502161 ads wsptr   ;
595 1471  .1471:; 
596 1471 0010646577777 o00 stkp/lod -1;
597 1472 0402167 sto W1143   ; @1472
598 1472+1220024 srl 20   ;
599 1473 0062222 and K8191   ;=8191
600 1473+0402160 sto dicpt   ;
601 1474 0000000 o00 0   ; @1474
602 1474+0602205 lod K2a   ;
603 1475 2710646600000 o27 stkp/lod 0;
604 1476 0402147 sto W1127   ; @1476
605 1476+0042234 o02 Bit32   ;=00020000000000
606 1477 0110736660000 neg W1143/lns 0;
607 1478 0062244 and M1188   ; @1478
608 1478+0162161 bus wsptr   ;
609 1479 0402166 sto W1142   ;
610 1479+0602167 lod W1143   ;
611 1480 1022714 jn .1484   ; @1480
612 1480+1002713 jmp .1483   ;-->>
613 1481  =1483 
614 1483  .1483:; 
615 1483   call     ;generate Exit Block call @1483
615+11483 7320121003401 lnk GenXB.lnk:jmp GenXB.ent 
616 1484  .1484:; 
617 1484 0602167 lod W1143   ;
618 1484+1320001 sll 1   ;
619 1485 1022716 jn .1486   ;
620 1485+1002722 jmp .1490   ;
621 1486  ;
622 1486  .1486:; 
623 1486 0010736040000 o00 W1143/o02 0; @1486
624 1487 0401422 sto GenAdr   ;
625 1487+1002466 jmp .1334   ;-->>
626 1488  =1334 
627 1334 0010736577777.1334:o00 W1143/lod -1; @1334
628 1335 1220034 srl 28   ;
629 1335+1002720 jmp .1488   ;-->>
630 1336  =1488 
631 1488 0062223.1488:and K31b   ;=31 @1488
632 1488+0501422 ads GenAdr   ;
633 1489   call     ;
633+11489 7307175103002 lnk L1538P.lnk:jmp L1538P.ent 
634 1490 0602167.1490:lod W1143   ; @1490
635 1490+1320002 sll 2   ;
636 1491 1022743 jn .1507   ;
637 1491+0603542 lod GPs+61   ;=04000031000002
638 1492   call     ; @1492
638+11492 7320121004033 lnk gencode.lnk:jmp gencode.ent 
639 1493 0042233 o02 Bit21   ;=00000004000000
640 1493+0562152 o27 W1130   ;
641 1494 0602152 lod W1130   ; @1494
642 1494+0062222 and K8191   ;=8191
643 1495 0401430 sto W792   ;
644 1495+0602166 lod W1142   ;
645 1496 1002465 jmp .1333   ;-->> @1496
646 1496+ =1333 
647 1333 0102225.1333:add Bbit   ;=<00 0 / 00 0>
648 1333+1002737 jmp .1503   ;
649 1334  ;
650 1334  =1503 
651 1503  .1503:; 
652 1503   call     ; @1503
652+11503 7307175001630 lnk GenSetBase.lnk:jmp GenSetBase.ent 
653 1504  .1504:; 
654 1504 0040000 o02 0   ;=1
655 1504+0000000 o00 0   ;
656 1505 2710646600000 o27 stkp/lod 0;
657 1506 0402153 sto W1131   ; @1506
658 1506+1002303 jmp .recover   ;
659 1507  ;
660 1507  .1507:; 
661 1507 0010736600000 o00 W1143/lod 0; @1507
662 1508 0062244 and M1188   ;
663 1508+0401422 sto GenAdr   ;
664 1509 0602226 lod K6   ;=6
665 1509+0102225 add Bbit   ;=<000/000>
666 1510   call     ; @1510
666+11510 7307175001665 lnk GenSkpInst.lnk:jmp GenSkpInst.ent 
667 1511 0042224 o02 Bit19   ;=00000001000000
668 1511+0000000 o00 0   ;
669 1512   call     ; @1512
669+11512 7307175001705 lnk L965.lnk:jmp L965.ent 
670 1513 1002740 jmp .1504   ;
671 1513+ ;
672 1513+ _err08a:; 
673 1513+0602210 lod K7a   ;=7
674 1514  _err08:; 
675 1514 1661044 lnk errlnk   ;error 8: param of non-allowable type @1514
676 1514+  ;or, too many parameters 
677 1514+  ;parameter not specified 
678 1514+1001051 jmp Error1   ;call error routine
679 1515 1002753.hlt15:jmp .hlt15   ;dynamic stop
680 1515+ ;
681 1515+ _err08b:; 
682 1515+0602200 lod K8a   ;=8, obsolete @1515+
683 1516 1002752 jmp _err08   ;
684 1516+ ;
685 1516+ _err10a:; 
686 1516+0602176 lod K9a   ;=9, obsolete
687 1517  _err10:; 
688 1517 1661044 lnk errlnk   ;error 10: name in value not param @1517
689 1517+1001051 jmp Error1   ;goto error rtne
690 1518 1002546 jmp .errrec   ;if error returns continue
691 1518+ ;
692 1518+ _err11a:; 
693 1518+0602176 lod K9a   ;=9, obsolete
694 1519  _err11:; 
695 1519 1661044 lnk errlnk   ;error 11: name in spec not param, or
696 1519+  ;param spec twice 
697 1519+1001051 jmp Error1   ;goto error rtne
698 1520 1002602 jmp .sp2   ; @1520
699 1520+ ;--------------------------------------------------------------------
700 1520+ .1520P:; 
701 1520+0102240 add K10b   ;
702 1521 1042762 jz .cmnt   ;
703 1521+1002553 jmp .1387   ;
704 1522  ;
705 1522  .cmnt:; 
706 1522   call     ; @1522
706+11522 7312031002420 lnk skipcomment.lnk:jmp skipcomment.ent 
707 1523 1002534 jmp .specs   ;
708 1523+  pad     ;
708+11523+0000000 00 0    
709 1524  ;
710 1524  .comt:; 
711 1524   call     ; @1524
711+11524 7312031002420 lnk skipcomment.lnk:jmp skipcomment.ent 
712 1525 1002552 jmp .valsemi   ;
713 1525+  pad      
713+11525+0000000 00 0    
714 1526  ;
715 1526  specsw:; 
716 1526 4013720000000 jmp .comt:00 0; +9 comment @1526
717 1527 4012604000000 jmp _err07:00 0; +10 own invalid as spec
718 1528 3011055102560 lod boolbit:jmp .ssp; +11 boolean @1528
719 1529 3011061102560 lod intbit:jmp .ssp; +12 integer
720 1530 3011065102560 lod realbit:jmp .ssp; +13 real @1530
721 1531 3011015102565 lod rarrbit:jmp .asp; +14 array
722 1532 4413644000000 jmp _err08a:00 0; +15 switch @1532
723 1533 4413644000000 jmp _err08a:00 0; +16 procedure
724 1534 3011251102565 lod strbit:jmp .asp; +17 string @1534
725 1535 3010621103012 lod W1124:jmp .lbl; +18 label
726 1536  ;--------------------------------------------------------------------
727 1536  ;
728 1536  =1537 
729 1537 0062215.1537:and realbit   ; @1537
730 1537+1042667 jz .1463   ;
731 1538 1102666 jmp .1462P   ;
732 1538+ ;--------------------------------------------------------------------
733 1538+ ;
734 1538+ L1538P.ent:; 
735 1538+0602220 lod W1168   ; @1538+
736 1539 1001640 jmp GenInst.ent   ;
737 1539+ ;--------------------------------------------------------------------
738 1539+ ;
739 1539+ ;L1539P:
740 1539+0042231.1539P:o02 K11   ; @1539+
741 1540 0562166 o27 W1142   ; @1540
742 1540+1102620 jmp .lp3b   ;
743 1541  ;
744 1541  =1542+ 
745 1542+ ;
746 1542+ ; no reference to here??
747 1542+ ;
748 1542+0600600 lod token   ;
749 1543 1043010 jz .1544   ;
750 1543+1002541 jmp _err07   ;
751 1544  =1544 
752 1544  ; and hence to here
753 1544  .1544:; 
754 1544   call     ; @1544
754+11544 7306371006514 lnk SkipPLC.lnk:jmp SkipPLC.ent 
755 1545   call     ;
755+11545 7310725002400 lnk declid2.lnk:jmp declid2.ent 
756 1546 1002511 jmp .1353   ; @1546
757 1546+ ;
758 1546+ .lbl:; 
759 1546+1320027 sll 23   ;
760 1547 0102250 add W1192   ; @1547
761 1547+1102565 jmp .asp   ;
762 1548  ;
763 1548  L1548.ent:; 
764 1548 0602144 lod W1124   ; @1548
765 1548+0202153 exa W1131   ;
766 1549   call     ;
766+11549 7312031002415 lnk stack.lnk:jmp stack.ent 
767 1550 1001222 jmp gettoken.ent   ; @1550
768 1550+ ;
769 1550+ =1555 
770 1555  ;
771 1555 3777740000000W1555:+03777740000000;
772 1556  ;
773 1556  .1556:; 
774 1556   call     ;
774+11556 7312031002420 lnk skipcomment.lnk:jmp skipcomment.ent 
775 1557 1002655 jmp .lp3k   ;
776 1557+ ;
777 1557+  pad      
777+11557+0000000 00 0    
778 1558  ;--------------------------------------------------------------------
779 1558  ; getboundexp, get expression suitable for array bound
780 1558  ;
781 1558  getboundexp::; 
782 1558  ;
783 1558  .ent:; 
784 1558   pad     ; @1558
784+11558 0000000 00 0    
785 1558+0542171 cls W1145   ;
786 1559   call     ;get next token
786+11559 7305105001222 lnk gettoken.lnk:jmp gettoken.ent 
787 1560 0040600 o02 token   ;token+1 @1560
788 1560+1023225 jn L1685   ;-> if -2
789 1561 0124346 sub W2278   ;=23 ->[+]+1
790 1561+1043047 jz GetIntExp   ;handle plus sign
791 1562 0122207 sub K1c   ;=1 ->[-]+1 @1562
792 1562+1143046 jz GetIntExp1   ;->handle neg sign
793 1563   pad     ;
793+11563 0000000 00 0    
794 1563+0542172 cls Link15c   ;
795 1564  L1564.ent:; 
796 1564 0602156.1564:lod frameptr   ; @1564
797 1564+0202160 exa dicpt   ;
798 1565 0402173 sto W1147   ;
799 1565+ L1565P:; 
800 1565+ .1565P:; 
801 1565+0404304 sto constptr   ; @1565+
802 1566   call     ;process identifier?
802+11566 7322411004504 lnk advance2.lnk:jmp advance2.ent 
803 1567   call     ;
803+11567 7326171003053 lnk GetIntExp2.lnk:jmp GetIntExp2.ent 
804 1568 0602173 lod W1147   ; @1568
805 1568+0402160 sto dicpt   ;
806 1569 0542166 cls W1142   ;
807 1569+0040000 o02 0   ;=1
808 1570 2710646600000 o27 stkp/lod 0; @1570
809 1571 0062177 and MaxInt   ;
810 1571+ L1571P:; 
811 1571+0102175.1571P:add bit39   ;
812 1572   call     ; @1572
812+11572 7312031002407 lnk addtodic.lnk:jmp addtodic.ent 
813 1573 0010727000001 o00 Link15b/jmp 1;return
814 1574  ;
815 1574   pad     ; @1574
815+11574 0000000 00 0    
816 1574+ ;--------------------------------------------------------------------
817 1574+ ;
818 1574+ ; declid process an identifier, checking for duplicate
819 1574+ ; declarations. If OK, add to dictionary
820 1574+ ;
821 1574+ declid::; 
822 1574+ =1536 
823 1536  ; entry moved into module
824 1536  ; add ident to dictionary, regardless of duplicates
825 1536  ;
826 1536  declid1.ent:; 
827 1536 0602160 lod dicpt   ; bypass duplicate search @1536
828 1536+1102361 jmp .1   ; enter main body
829 1537  ;
830 1537  ; main entry, include duplicate scan
831 1537  ;
832 1537  =1265 
833 1265  .ent:; 
834 1265 0602156 lod frameptr   ; @1265
835 1265+0402167.1:sto W1143   ;limit for scans
836 1266 0602160 lod dicpt   ;
837 1266+0402170 sto idpt1   ;
838 1267 0542164 cls idcount   ;number of ids in list @1267
839 1267+1102367 jmp .3   ;
840 1268  ;
841 1268 0000000000000 +0;no reference! @1268
842 1269  ;
843 1269  .2:; 
844 1269 2210742600000 inc idpt1/lod 0; @1269
845 1270 0120576 sub ident   ;ident
846 1270+1142402 jz .7   ;match->duplicate id
847 1271 0602170 lod idpt1   ;
848 1271+ .3:; 
849 1271+0122167 sub W1143   ; @1271+
850 1272 1022365 jn .2   ;back to check next one
851 1272+0600600 lod token   ;token
852 1273 1142372 jz .4   ;ident->
853 1273+1661044_err04:lnk errlnk   ;error 4: item after comma in decl not name
854 1274 1002262 jmp Error2   ;loop back to test for name @1274
855 1274+ ;
856 1274+ .4:; 
857 1274+0600576 lod ident   ;identifier value
858 1275   call     ; add id to list
858+11275 7312031002407 lnk addtodic.lnk:jmp addtodic.ent 
859 1276 0442164 inc idcount   ;idcount @1276
860 1276+  pad     ;no-op
860+11276+0000000 00 0    
861 1277  .5:; 
862 1277   call     ; @1277
862+11277 7305105001222 lnk gettoken.lnk:jmp gettoken.ent 
863 1278 0040600 o02 token   ;token+1 @1278
864 1278+0122201 sub K42   ;=42
865 1279 1042400 jz .6   ; comma->
866 1279+1002405 jmp .ret   ;anything else->
867 1280  ;
868 1280  ; alternate entry point
869 1280  ;
870 1280  declid2.ent:; 
871 1280  .6:; 
872 1280   call     ; @1280
872+11280 7305105001222 lnk gettoken.lnk:jmp gettoken.ent 
873 1281 0602160 lod dicpt   ;
874 1281+0402170 sto idpt1   ;
875 1282 1002365 jmp .2   ; loop back for next identifier @1282
876 1282+ ;
877 1282+ .7:; 
878 1282+0040000 o02 0    
879 1283 1661044_err03:lnk errlnk   ;error 3: name declared twice
880 1283+1001051 jmp Error1   ;call error handler
881 1284 1002375 jmp .5   ; @1284
882 1284+ ;
883 1284+  pad      
883+11284+0000000 00 0    
884 1285  .ret:; 
885 1285   ret      
885+11285 0010727000001 o00 declid.lnk/jmp 1 
886 1286  ;--------------------------------------------------------------------