Commit | Line | Data |
---|---|---|
81e70d48 PH |
1 | /OS8 BASIC LOADER, V5 |
2 | / | |
3 | / | |
4 | / | |
5 | / | |
6 | / | |
7 | / | |
8 | // | |
9 | / | |
10 | / | |
11 | / | |
12 | / | |
13 | /COPYRIGHT (C) 1972, 1973, 1974, 1975 | |
14 | /DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. | |
15 | / | |
16 | / | |
17 | / | |
18 | /THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY ON A | |
19 | /SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH THE INCLU- | |
20 | /SION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE, OR ANT OTHER | |
21 | /COPIES THEREOF, MAY NOT BR PROVIDED OR OTHERWISE MADE AVAILABLE | |
22 | /TO ANY OTHER PERSON EXCEPT FOR USE ON SUCH SYSTEM AND TO ONE WHO | |
23 | /AGREES TO THESE LICENSE TERMS. TITLE TO AND OWNERSHIP OF THE | |
24 | /SOFTWARE SHALL AT ALL TIMES REMAIN IN DEC. | |
25 | / | |
26 | / | |
27 | /THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT | |
28 | /NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL | |
29 | /EQUIPMRNT COROPATION. | |
30 | / | |
31 | /DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS | |
32 | /SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC. | |
33 | / | |
34 | / | |
35 | / | |
36 | / | |
37 | / | |
38 | / | |
39 | \f/DEC-S8-LBASA-B-LA | |
40 | / | |
41 | /COPYRIGHT C 1972, 1973, 1974 | |
42 | / | |
43 | /DIGITAL EQUIPMENT CORPORATION | |
44 | /MAYNARD,MASSACHUSETTS 01754 | |
45 | / | |
46 | /AUGUST 19, 1972 | |
47 | / | |
48 | /HANK MAURER, 1972 | |
49 | /SHAWN SPILMAN, 1973 | |
50 | / | |
51 | / | |
52 | / | |
53 | / | |
54 | /ASSEMBLE AND LOAD AS FOLLOWS: | |
55 | / | |
56 | / .R PAL8 | |
57 | / *BLOAD,BLOAD<BLOAD.03 | |
58 | / .R ABSLDR | |
59 | / *BLOAD$ | |
60 | / .SA SYS BLOAD;7605 | |
61 | / | |
62 | /NOTE DIFFERENCES FROM VERSION 1 BY TRUNCATING | |
63 | /THE SOURCE AFTER TAG "IMAGE" AND THEN: | |
64 | / | |
65 | / .R SRCCOM | |
66 | / *LPT:<BLOAD.01,BLOAD.03 | |
67 | / * | |
68 | / | |
69 | /ALL CODE FOLLOWING TAG "IMAGE" IS NEW FOR VERSION 3 | |
70 | / | |
71 | VERSON= 5 /VERSION WORD LOCATED AT TAG "VERLOC" | |
72 | /LEFT HALF CONTAINS 60+VERSON | |
73 | /RIGHT HALF CONTAINS PATCH LEVEL (A=01) | |
74 | ||
75 | / | |
76 | /CORRECTIONS MADE FOR V4 J.K 1975 | |
77 | / .MADE SWAP ROUTINE A REAL SWAP | |
78 | / ./V FOR VERSION NUMBER | |
79 | / ./C SO NON-BASIC SAVE FILES CAN CHAIN TO BASIC SAVE FILES | |
80 | / .ADJUST JSW FOR /K | |
81 | / .CORRECTED CCB FOR /K | |
82 | / .CALCULATION OF DEFAULT CORE SIZE FOR PDP-8 | |
83 | / .TEST FOR BATCH RUNNIG | |
84 | / .CHANGE ORDER OF CISTRT SO A CHAIN CAN BE | |
85 | / CAN BE DONE FROM A .SV FILE WITH A | |
86 | / FILE STATEMENT | |
87 | / | |
88 | ||
89 | /JR 30-APR-77 UPDATE VERSION AND FIX ERROR IN MAKECI WHEN BATCH NOT | |
90 | / RUNNING | |
91 | \f /OS8 BASIC COMPILER POST PROCESSOR | |
92 | ||
93 | /AUTO INDEX REGISTERS | |
94 | ||
95 | X10=10 | |
96 | X11=11 | |
97 | X13=13 | |
98 | STACK=15 | |
99 | ||
100 | /DUMMY SECTIONS FOR COMPILER/RUNTIME COMMUNICATIONS | |
101 | ||
102 | NOPUNCH | |
103 | ||
104 | /BRTS COMMUNICATIONS REGION | |
105 | ||
106 | *20 | |
107 | STCDF, 0 | |
108 | NSTADR, 0 | |
109 | NASTAD, 0 | |
110 | SSTADR, 0 | |
111 | SASTAD, 0 | |
112 | CODCDF, 0 | |
113 | CODBGN, 0 | |
114 | DATTOP, 0 | |
115 | DATPTR, 0 | |
116 | SWPINF, 0 | |
117 | ||
118 | /BCOMP COMMON REGION | |
119 | ||
120 | *40 | |
121 | VARCNT, 0 | |
122 | SVCNT, 0 | |
123 | ACNT, 0 | |
124 | SACNT, 0 | |
125 | LOCTRH, 0 | |
126 | LOCTRL, 0 | |
127 | BLOCK, 0 | |
128 | HIFLD, 0 | |
129 | BRTS, 0 | |
130 | DLSIZE, 0 | |
131 | ABORTX, 0 | |
132 | ||
133 | /PAGE 0 LOCATIONS USED BY LOADER | |
134 | ||
135 | FREEHI, 0 | |
136 | FREELO, 0 | |
137 | TEMP, 0 | |
138 | TEMP2, 0 | |
139 | TEMP3, 0 | |
140 | WORD1, 0 | |
141 | WORD2, 0 | |
142 | WORD3, 0 | |
143 | NCHARS, 0 | |
144 | SUBHI, 0 | |
145 | SUBLO, 0 | |
146 | CODSZ1, 0 | |
147 | CODSZ2, 0 | |
148 | LOCHI, 0 | |
149 | LOCLO, 0 | |
150 | CODB, 0 | |
151 | CODF, 0 | |
152 | ICOUNT, 0 | |
153 | OCOUNT, 0 | |
154 | AC1, 0 | |
155 | AC2, 0 | |
156 | AC3, 0 | |
157 | SC, 0 | |
158 | LINEH, 0 | |
159 | LINEL, 0 | |
160 | XLABEL, 0 | |
161 | CLRFLD, 0 | |
162 | CLREND, 0 | |
163 | RESADR, 0 | |
164 | ||
165 | /MORE COMPILER DEFINITIONS | |
166 | ||
167 | SVARST= 1036 | |
168 | ARAYST= 2132 | |
169 | SARYST= 2332 | |
170 | STEMPS= 2560 | |
171 | LITRL= STEMPS+2 | |
172 | SLITRL= LITRL+2 | |
173 | DATLST= SLITRL+2 | |
174 | ||
175 | /MISC DEFINES | |
176 | ||
177 | STACKA= 7120 /MAIN STACK OF COMPILER | |
178 | EDTBGN= 3212 /START OF EDITOR | |
179 | EDTSIZ= 2100 /SIZE OF EDITOR | |
180 | BRTBGN= 200 /START OF BRTS | |
181 | BRTSIZ= 3400 /SIZE OF BRTS | |
182 | DCB= 7760 | |
183 | JSW= 7746 /OS/8 JOB STATUS WORD | |
184 | BIPCCL= 7777 /OS/8 SOFTWARE CORE SIZE AND BATCH FLAGS WORD | |
185 | FSTOP1= 7 /ADDR OF BRTS EXIT ROUTINE | |
186 | ||
187 | ENPUNCH /END OF DUMMY SECTIONS | |
188 | \f /LOADER PROPER | |
189 | ||
190 | *400 | |
191 | LOADER, JMS I (IMAGE /CORE IMAGE FILE PATCH | |
192 | TAD (7577 /EXECUTION RESUMES HERE | |
193 | DCA FREELO | |
194 | CIA IAC | |
195 | DCA SWPINF /SET SWAPPER FLAG TO INDICATE 17600 IS IN FIELD 1 | |
196 | DCA LINEH /CLEAR LINE NUMBER | |
197 | DCA LINEL | |
198 | TAD STACK /ANY UNCLOSED FOR'S ? | |
199 | CIA | |
200 | TAD (STACKA-1 | |
201 | SNA CLA | |
202 | JMP .+3 /NO | |
203 | JMS I (ERMSG /YES | |
204 | 2506 | |
205 | CLA CMA | |
206 | TAD HIFLD /NO CDF'S IF ONLY 8K | |
207 | SZA CLA | |
208 | JMP NOPATCH /NO PATCHES | |
209 | TAD (PATLST-1 | |
210 | DCA X10 | |
211 | PATLUP, TAD I X10 | |
212 | SNA | |
213 | JMP I (STSTUF | |
214 | DCA TEMP | |
215 | TAD (SKP /ALWAYS TWO WORDS | |
216 | DCA I TEMP | |
217 | JMP PATLUP | |
218 | NOPATCH,CDF 10 | |
219 | TAD I (DCB /CHECK FOR TD8E SYSTEM | |
220 | AND (770 /ED FRIEDMAN GAVE ME THIS CODE | |
221 | TAD (-210 /AND I'M TAKING IT ON FAITH | |
222 | CDF | |
223 | SNA CLA | |
224 | TAD I (7612 /IS IT A ROM SYSTEM ? | |
225 | TAD (-3 | |
226 | SZA CLA | |
227 | GOTTD, JMP NOTD8E /NO TD/8E OR ROM TD/8E | |
228 | /PREV INSTR NOP'D OUT TO FORCE TD8E (IMAGE) | |
229 | TAD (7377 /TD8E SYS WASTES 400 WORDS | |
230 | DCA FREELO | |
231 | STL RAR /SET SWAP INFO (17600 OUT NOW) | |
232 | NOTD8E, DCA SWPINF | |
233 | JMS I (FREEF /GET CDF TO HIGHEST FIELD | |
234 | DCA SWPF1 /INTO 2 PLACES | |
235 | TAD SWPF1 | |
236 | DCA SWPF2 | |
237 | JMS SWAP /MOVE OS8 OUT | |
238 | TAD (TAD L6221 | |
239 | DCA TDLIE+1 | |
240 | TAD (TAD L6221 | |
241 | DCA TDLIE+3 | |
242 | JMP I (STSTUF /DO SYMBOL TABLE STUFF | |
243 | \fSWAP, 0 /SWAP OS8 RESIDENT | |
244 | CLL CML RAR /4000 | |
245 | AND SWPINF /IS IT A TD8E SYS ? | |
246 | SZA CLA | |
247 | JMP TD8ESYS /YES | |
248 | JMS SWPSUB /SWAP 17600 TO/FROM N7600 | |
249 | CDF 10 | |
250 | 7600 | |
251 | JMP I SWAP | |
252 | TD8ESYS,JMS SWPSUB /SWAP 17600 TO/FROM N7400 | |
253 | CDF 10 | |
254 | 7400 | |
255 | JMS SWPSUB /SWAP 27600 TO/FROM N7600 | |
256 | L6221, CDF 20 | |
257 | L7600, 7600 | |
258 | TDLIE, CLL CML RTL /FIX UP 07600 STUFF TO MATCH | |
259 | TAD SWPF1 /CIF CDF N0 | |
260 | DCA I (7642 | |
261 | TAD SWPF1 | |
262 | IAC /CIF N0 | |
263 | DCA I (7721 | |
264 | TAD I (7721 | |
265 | DCA I (7727 | |
266 | JMP I SWAP | |
267 | SWPRET, CLA | |
268 | CDF /RETURN IF 8K | |
269 | JMP I SWAP | |
270 | SWPFLAG,0 | |
271 | ||
272 | SWPSUB, 0 /SWAPPER | |
273 | TAD I SWPSUB /GET FIELD | |
274 | DCA SWP1 /TWICE | |
275 | TAD SWP1 | |
276 | DCA SWP2 /ONCE FOR EACH DIRECTION | |
277 | ISZ SWPSUB | |
278 | TAD I SWPSUB /GET HI FIELD ADDR | |
279 | DCA TEMP | |
280 | ISZ SWPSUB | |
281 | TAD L7600 /GET COUNT/POITER | |
282 | DCA TEMP2 | |
283 | SWP1, HLT | |
284 | TAD I TEMP2 /GET PART OF RESIDENT | |
285 | DCA TEMP3 | |
286 | SWPF1, JMP SWPRET /RETURN IF 8K ONLY | |
287 | TAD I TEMP | |
288 | SWP2, HLT | |
289 | DCA I TEMP2 | |
290 | TAD TEMP3 | |
291 | SWPF2, HLT | |
292 | DCA I TEMP /INTO HI FIELD | |
293 | ISZ TEMP /BUMP POINTER | |
294 | NOP /JR PROTECT AGAINST WRAP AROUND | |
295 | ISZ TEMP2 /AND PTR/CTR | |
296 | JMP SWP1 /LOOP | |
297 | CDF | |
298 | JMP I SWPSUB | |
299 | ||
300 | PAGE | |
301 | \fNODATA, CDF | |
302 | JMS I (FREEF /SAVE FIELD | |
303 | CIA | |
304 | DCA CLRFLD /FOR ARRAY CLEARING | |
305 | TAD FREELO /SAVE THIS ADDR | |
306 | CIA | |
307 | DCA CLREND /FOR END OF ARRAY CLEAR | |
308 | ISZ FREELO /MAKE IT NEXT FREE + 1 | |
309 | TAD (SVARST-1 | |
310 | DCA X10 /ALLOCATE STRING VARS | |
311 | TAD (-436 | |
312 | DCA TEMP | |
313 | ASVLUP, CDF 10 | |
314 | TAD I X10 /LOOK FOR DEFINED STRING VAR | |
315 | DCA TEMP2 /SAVE SYMBOL NUMBER | |
316 | TAD I X10 /GET SIZE | |
317 | SPA | |
318 | TAD (4010 /IF UNDEF USE 16 CHARS | |
319 | DCA TEMP3 | |
320 | TAD TEMP2 /IS IT DEFINED ? | |
321 | CDF | |
322 | SMA CLA | |
323 | JMS SVSTOR /YES, CREATE ENTRY | |
324 | ISZ TEMP /BUMP COUNT | |
325 | JMP ASVLUP /LOOP | |
326 | CDF 10 /ALLOCATE STRING TEMPS | |
327 | P6, TAD I (STEMPS+1 | |
328 | DCA STEMPF /INIT FIELD | |
329 | TAD I (STEMPS /AND POINTER | |
330 | SKP | |
331 | STMLUP, TAD TEMP /LOOK AT NEXT ENTRY | |
332 | SNA | |
333 | JMP I (ALLOCA /DONE GO ALLOCATE ARRAYS | |
334 | TAD (-1 | |
335 | DCA X10 /GET POINTER | |
336 | STEMPF, CDF 10 | |
337 | TAD I X10 /GET ADDR OF NEXT ENTRY | |
338 | DCA TEMP /SAVE IT | |
339 | P7, TAD I X10 /AND ITS FIELD | |
340 | DCA STEMPF | |
341 | ISZ X10 /SKIP TEMP NUMBER | |
342 | TAD I X10 /GET SYM NUMBER | |
343 | DCA TEMP2 | |
344 | CDF | |
345 | TAD (110 /GIVE IT MAX SIZE | |
346 | DCA TEMP3 | |
347 | JMS SVSTOR /ALOOCATE IT | |
348 | JMP STMLUP /LOOP | |
349 | SVSTOR, 0 /MAKE ST ENTRY FOR STRING VAR | |
350 | TAD TEMP2 /FIND ST ADDR | |
351 | CLL RAL | |
352 | TAD TEMP2 | |
353 | TAD SSTADR | |
354 | DCA X11 | |
355 | TAD TEMP3 /NUMBER OF CHARS | |
356 | TAD (3 | |
357 | CLL RAR | |
358 | DCA SUBLO /NUMBER OF WORDS | |
359 | DCA SUBHI | |
360 | JMS SUB /FREEHI,LO=FREEHI,LO-SUBHI,LO | |
361 | TAD FREELO /SAVE ADDR | |
362 | DCA I X11 | |
363 | JMS I (FREEF /AND FIELD | |
364 | DCA I X11 | |
365 | TAD TEMP3 /PUT IN MAX LENGTH | |
366 | CIA /(NEGATIVE) | |
367 | DCA I X11 | |
368 | JMP I SVSTOR | |
369 | PSN, 0 /PRINT 3 DIGITS DECIMAL | |
370 | DCA WORD2 | |
371 | CLL CMA RTL /-3 | |
372 | DCA XLABEL | |
373 | PRNTSN, TAD WORD2 /GET NEXT DIGIT | |
374 | CLL RTL /INTO THE LOW ORDER | |
375 | RTL /THREE BITS AND THE LINK | |
376 | DCA WORD2 /SAVE SHIFTED NUMBER | |
377 | TAD WORD2 /NOW DO LAST SHIFT | |
378 | RAL | |
379 | AND (17 /ONLY FOUR BITS | |
380 | SPACE, SZA | |
381 | JMP NOZERO /NOT A ZERO | |
382 | TAD I (TTY /ANY DIGITS YET ? | |
383 | SNA CLA | |
384 | JMP LEAD0 /NO, ITS A LEADING ZERO | |
385 | NOZERO, TAD (60 /MAKE IT ASCII | |
386 | JMS I (TTY /PRINT DIGIT | |
387 | LEAD0, ISZ XLABEL /BUMP COUNT | |
388 | JMP PRNTSN /MORE DIGIT(S) | |
389 | JMP I PSN | |
390 | SUB, 0 /DOUBLE SUBTRACT | |
391 | TAD SUBLO /SUBTRACT LOWER | |
392 | CLL CML CIA | |
393 | TAD FREELO | |
394 | DCA FREELO | |
395 | RAL /GET BORROW | |
396 | TAD SUBHI | |
397 | CIA | |
398 | TAD FREEHI /SUBTRACT UPPER | |
399 | DCA FREEHI /SAVE NEW UPPER | |
400 | TAD FREEHI /DID IT FIT ? | |
401 | SMA SZA CLA | |
402 | JMP I SUB /YUP | |
403 | TOOBIG, DCA LINEH /CLEAR LINE NUMBER | |
404 | DCA LINEL | |
405 | JMS I (ERMSG /WRITE MESSAGE | |
406 | 2402 /TOO BIG | |
407 | JMP I (ABORTL /ABORT RUN | |
408 | ||
409 | TTX, 0 /PRINT CHAR ON TTY | |
410 | TSF /WAIT FOR PREVIOUS CHAR | |
411 | JMP .-1 | |
412 | TLS /PRINT THIS ONE | |
413 | CLA | |
414 | JMP I TTX | |
415 | ||
416 | PAGE | |
417 | \f/ CAUTION !!! | |
418 | / THIS PAGE AND THE NEXT ONE ARE | |
419 | / OVERLAYED BY THE INPUT BUFFER | |
420 | / AS SOON AS THE ROUTINE "INWORD" | |
421 | / IS CALLED. THIS FIRST HAPPENS | |
422 | / AFTER THE TAG "RELCIT" . | |
423 | ||
424 | STSTUF, TAD FREELO /SAVE START OF RESIDENT -1 | |
425 | CIA /NEGATED | |
426 | DCA RESADR /USED TO COMPUTE AMOUNT OF MOVE | |
427 | TAD VARCNT /GET NUMBER OF | |
428 | TAD (401 /VARIABLES | |
429 | CIA | |
430 | DCA VARCNT | |
431 | TAD SVCNT /STRING VARIABLES | |
432 | TAD (401 | |
433 | CIA | |
434 | DCA SVCNT | |
435 | TAD ACNT /ARRAYS | |
436 | TAD (41 | |
437 | CIA | |
438 | DCA ACNT | |
439 | TAD SACNT /AND STRING ARRAYS | |
440 | TAD (41 | |
441 | CIA | |
442 | DCA SACNT | |
443 | JMS I (FREEF /SAVE HIGH FIELD | |
444 | DCA STCDF | |
445 | TAD VARCNT /SUBTRACT SPACE FOR | |
446 | CLL RAL /SCALAR TABLE (3 WORDS A PIECE) | |
447 | TAD VARCNT | |
448 | TAD FREELO /DON'T BOTHER WITH A | |
449 | DCA FREELO /DOUBLE PREC. SUBTRACTION | |
450 | TAD FREELO /SAVE START OF SCALAR TABLE | |
451 | IAC /FOR INTERPRETER | |
452 | DCA NSTADR | |
453 | TAD FREELO /CLEAR ALL VARIABLES | |
454 | DCA X10 /IN THE | |
455 | DCA I X10 /SCALAR TABLE | |
456 | DCA I X10 | |
457 | DCA I X10 | |
458 | ISZ VARCNT | |
459 | JMP .-4 /JUST TO BE NICE | |
460 | CDF 10 /PREPARE TO MOVE | |
461 | P1, TAD I (LITRL+1/THE NUMERIC LITERALS | |
462 | DCA LFLD /INTO THE SCALAR TABLE | |
463 | TAD I (LITRL | |
464 | CDF | |
465 | SKP | |
466 | NLLOOP, TAD TEMP /ADDR OF NEXT LITERAL | |
467 | SNA | |
468 | JMP NONL /NO MORE NUMERIC LITERALS | |
469 | TAD (-1 | |
470 | DCA X10 | |
471 | LFLD, CDF 10 | |
472 | TAD I X10 /GET ADDR OF NEXT LITERAL | |
473 | DCA TEMP | |
474 | P2, TAD I X10 /ALSO ITS FIELD | |
475 | DCA LFLD | |
476 | TAD I X10 /NOW ITS VALUE | |
477 | DCA WORD1 | |
478 | TAD I X10 | |
479 | DCA WORD2 | |
480 | TAD I X10 | |
481 | DCA WORD3 | |
482 | TAD I X10 /NOW THE SYMBOL NUMBER | |
483 | DCA TEMP2 | |
484 | TAD TEMP2 /TIMES THREE | |
485 | CLL RAL | |
486 | TAD TEMP2 | |
487 | TAD FREELO /PLUS START | |
488 | DCA X11 /GIVES STORE ADDR | |
489 | CDF | |
490 | TAD WORD1 /NOW PUT LITERAL INTO TABLE | |
491 | DCA I X11 | |
492 | TAD WORD2 | |
493 | DCA I X11 | |
494 | TAD WORD3 | |
495 | DCA I X11 | |
496 | JMP NLLOOP /DO NEXT LITERAL | |
497 | NONL, TAD ACNT /ALLOCATE ARRAY TABLE | |
498 | CLL RAL | |
499 | CLL RAL /FOUR WORDS PER | |
500 | TAD FREELO /SUBTRACT FROM LOWER END | |
501 | DCA FREELO | |
502 | TAD FREELO /SAVE THIS | |
503 | DCA NASTAD /START OF ARRAY TABLE | |
504 | TAD SVCNT /ALLOCATE | |
505 | CLL RAL /STRING VAR TABLE | |
506 | TAD SVCNT | |
507 | TAD FREELO /3 WORDS EACH | |
508 | DCA FREELO | |
509 | TAD FREELO /AND SAVE IT FOR THE INT | |
510 | DCA SSTADR | |
511 | TAD SACNT /NOW SPACE FOR STRING | |
512 | CLL RAL /ARRAY | |
513 | CLL RAL | |
514 | TAD FREELO /TABLE | |
515 | DCA FREELO | |
516 | TAD FREELO /SAVE FOR INT | |
517 | DCA SASTAD | |
518 | CDF 10 /PREPARE TO MOVE | |
519 | P3, TAD I (SLITRL+1 | |
520 | DCA SLFLD /STRING LITERALS | |
521 | TAD I (SLITRL | |
522 | CDF | |
523 | SKP | |
524 | SLLOOP, TAD TEMP /IS NEXT LIT THERE ? | |
525 | SNA | |
526 | JMP I (NOSL /NO, END OF THE LINE | |
527 | TAD (-1 | |
528 | DCA X10 | |
529 | JMS SFLD /SET THE FIELD | |
530 | TAD I X10 /GET ADDR OF NEXT | |
531 | DCA TEMP | |
532 | P4, TAD I X10 /ALSO FIELD | |
533 | DCA TEMP2 | |
534 | TAD I X10 /THEN CHAR COUNT | |
535 | DCA NCHARS | |
536 | JMP I (SLIT2 /DO REST OF STRING LIT | |
537 | SFLD, 0 | |
538 | SLFLD, CDF 10 | |
539 | JMP I SFLD | |
540 | ||
541 | PAGE | |
542 | \fSLIT2, TAD NCHARS /COMPUTE WORD COUNT | |
543 | TAD (3 | |
544 | CLL RAR | |
545 | TAD X10 /TO GET ADDR OF SYMBOL NUMBER | |
546 | DCA TEMP3 | |
547 | TAD I TEMP3 | |
548 | CLL RAL /SYM NUMBER TIMES 3 | |
549 | TAD I TEMP3 | |
550 | TAD SSTADR /PLUS BASE | |
551 | DCA X11 /GIVES ST ADDR | |
552 | TAD NCHARS /ALLOCATE SPACE FOR IT | |
553 | IAC | |
554 | CLL CML CMA RAR | |
555 | DCA TEMP3 /(SAVE NUMBER OF WORDS) | |
556 | TAD TEMP3 | |
557 | CLL | |
558 | TAD FREELO | |
559 | DCA FREELO /BELOW THE SYMBOL TABLES | |
560 | SNL | |
561 | JMP TMSLIT /TOO MUCH STRING LITERALS | |
562 | TAD FREELO | |
563 | TAD (-END-10 | |
564 | SZL CLA | |
565 | JMP TMSLIT /DITTO | |
566 | TAD FREELO /STICK THE ADDR | |
567 | IAC | |
568 | CDF | |
569 | DCA I X11 /INTO THE ST ENTRY | |
570 | JMS I (FREEF /ALSO THE FIELD | |
571 | DCA I X11 | |
572 | TAD NCHARS /ALSO THE SIZE | |
573 | CIA | |
574 | DCA I X11 | |
575 | TAD FREELO /THIS IS WHERE IT GOES | |
576 | DCA X11 | |
577 | TAD NCHARS /PUT IN THE LENGTH TOO | |
578 | CIA /(NEGATIVE) | |
579 | JMP .+4 | |
580 | MOVSL, JMS I (SFLD | |
581 | TAD I X10 | |
582 | CDF | |
583 | DCA I X11 /MOVE THE LITERAL TEXT | |
584 | ISZ TEMP3 | |
585 | JMP MOVSL | |
586 | P5, TAD TEMP2 /PUT THE FIELD OF THE NEXT | |
587 | DCA I (SLFLD /ENTRY WHERE IT DOES THE MOST GOOD | |
588 | JMP I (SLLOOP /DO THE NEXT LITERAL | |
589 | NOSL, TAD FREELO /SAVE TOP OF DATA LIST | |
590 | DCA DATTOP | |
591 | TAD DATTOP /IF EMPTY MAKE TOP=BOTTOM | |
592 | DCA DATPTR | |
593 | TAD DLSIZE | |
594 | SNA /IS ANY DATA ? | |
595 | JMP I (NODATA /NO | |
596 | CLL | |
597 | TAD FREELO /GET START OF DATA | |
598 | DCA FREELO | |
599 | SNL | |
600 | JMP TMDATA /TOO MUCH DATA | |
601 | TAD FREELO | |
602 | TAD (-END-10 | |
603 | SZL CLA | |
604 | JMP TMDATA /DITTO | |
605 | TAD FREELO /SAVE IT | |
606 | DCA DATPTR | |
607 | TAD FREELO /USE X13 TO FILL LIST | |
608 | DCA X13 | |
609 | TAD (DATLST-1 | |
610 | DCA X10 | |
611 | CDF 10 | |
612 | DATLUP, TAD I X10 /ANY MORE DATA ELEMENTS ? | |
613 | SNA | |
614 | JMP I (NODATA | |
615 | DCA TEMP /SAVE ADDR | |
616 | P8, TAD I X10 /GET NEW FIELD | |
617 | DCA DATAF1 | |
618 | P9, TAD DATAF1 /TWICE | |
619 | DCA DATAF2 | |
620 | TAD TEMP /START WITH NEW ELEMENT | |
621 | DCA X10 | |
622 | DATAF1, CDF 10 | |
623 | TAD I TEMP /GET COUNT | |
624 | DCA TEMP | |
625 | DATMOV, TAD I X10 /GET NEXT WORD | |
626 | CDF | |
627 | DCA I X13 /MOVE INTO DATA AREA | |
628 | DATAF2, CDF 10 | |
629 | ISZ TEMP | |
630 | JMP DATMOV | |
631 | JMP DATLUP /DO NEXT ELEMENT | |
632 | TMDATA, DCA LINEL /ZERO LINE NUMBER | |
633 | DCA LINEH | |
634 | JMS I (ERMSG /PRINT ERROR MESSAGE | |
635 | 2404 | |
636 | JMP I (ABORTL | |
637 | TMSLIT, DCA LINEH /CLEAR THE LINE NUMBER | |
638 | DCA LINEL | |
639 | JMS I (ERMSG /PRINT MESSAGE | |
640 | 2423 | |
641 | JMP I (ABORTL | |
642 | ||
643 | PATLST, P1;P2;P3;P4;P5;P6;P7;P8;P9;0 | |
644 | ||
645 | PAGE | |
646 | \fALLOCA, TAD ACNT /ANY ARRAYS ? | |
647 | SNA CLA | |
648 | JMP ALLOCS /NO | |
649 | TAD (ARAYST /ALLOCATE ARRAYS | |
650 | DCA X10 | |
651 | TAD NASTAD | |
652 | DCA X11 | |
653 | DOARAY, CDF 10 | |
654 | TAD I X10 /GET NEXT ARRAY | |
655 | DCA TEMP | |
656 | TAD I X10 /GET FIRST DIM | |
657 | SNA | |
658 | TAD (12 /USE 10 IF NONE | |
659 | IAC /ALLOCATE 0TH ELEMENT | |
660 | DCA TEMP2 | |
661 | TAD I X10 /GET SECOND DIM | |
662 | SNA | |
663 | TAD (12 | |
664 | IAC | |
665 | DCA TEMP3 | |
666 | TAD TEMP3 /GET READY TO SUBTRACT | |
667 | DCA SUBLO | |
668 | DCA SUBHI | |
669 | CDF | |
670 | CLL CML RTR | |
671 | AND TEMP /HOW MANY DIMS ? | |
672 | SNA CLA | |
673 | JMP ONLY1 /ONE | |
674 | TAD TEMP2 /PRODUCT OF DIMS | |
675 | JMS I (MUL12 | |
676 | JMP TIMES3 /MULT BY 3 | |
677 | ONLY1, DCA TEMP3 /ZERO SECOND DIMENSION | |
678 | TAD TEMP2 | |
679 | DCA SUBLO | |
680 | TIMES3, TAD (3 /MULT SIZE BY 3 | |
681 | JMS I (MUL12 | |
682 | JMS I (SUB /SUBTRACT FROM FREE | |
683 | TAD FREELO | |
684 | DCA I X11 /SAVE ADDR IN S.T. | |
685 | JMS I (FREEF | |
686 | DCA I X11 | |
687 | TAD TEMP2 /ALSO DIMS | |
688 | DCA I X11 | |
689 | TAD TEMP3 | |
690 | DCA I X11 | |
691 | ISZ X10 /SKIP SYMBOL NUMBER | |
692 | ISZ ACNT | |
693 | JMP DOARAY | |
694 | ALLOCS, TAD SACNT /ANY STRING ARRAYS | |
695 | SNA CLA | |
696 | JMP I (RELCIT /NO | |
697 | TAD (SARYST+1 | |
698 | DCA X10 /ALLOCATE STRING ARRAYS | |
699 | TAD SASTAD | |
700 | DCA X11 | |
701 | DOSARY, CDF 10 | |
702 | TAD I X10 | |
703 | SNA | |
704 | TAD (12 /USE 10 FOR DIM | |
705 | IAC | |
706 | DCA TEMP3 | |
707 | TAD I X10 /GET DIM | |
708 | SNA | |
709 | TAD (10 /USE 16 IF NO SIZE SPEC | |
710 | DCA TEMP2 | |
711 | TAD TEMP3 | |
712 | DCA SUBLO /PREPARE FOR MULT | |
713 | DCA SUBHI | |
714 | CDF | |
715 | TAD TEMP2 /GET NUM WORDS PER STRING | |
716 | TAD (3 | |
717 | CLL RAR | |
718 | JMS I (MUL12 /GET ARRAY SIZE | |
719 | JMS I (SUB /DO SUBTRACTION | |
720 | TAD FREELO /SAVE ADDR | |
721 | DCA I X11 | |
722 | JMS I (FREEF | |
723 | DCA I X11 | |
724 | TAD TEMP2 /AND STRING SIZE | |
725 | CIA /(SIZES ARE NEG) | |
726 | DCA I X11 | |
727 | TAD TEMP3 /AND NUMBER OF STRINGS | |
728 | DCA I X11 | |
729 | ISZ X10 /SKIP NEXT NAME | |
730 | ISZ X10 /AND NEXT SYM NUMBER | |
731 | ISZ SACNT | |
732 | JMP DOSARY | |
733 | JMP I (RELCIT | |
734 | INWORD, 0 /READ FROM CODE FILE | |
735 | ISZ ICOUNT /ANYTHING IN BUFFER | |
736 | JMP NOREAD /YASSUH! | |
737 | JMS I (7607 /READ NEXT BLOCK | |
738 | 200 | |
739 | 1000 /NOTE: THIS OVERLAYS USED CODE | |
740 | INBLOK, 0 | |
741 | JMP I (IOERR | |
742 | ISZ INBLOK /BUMP BLOCK COUNTER | |
743 | TAD INBLOK-1/RESET BUFFER POINTER | |
744 | DCA INPTR | |
745 | TAD (-400 /AND COUNTER | |
746 | DCA ICOUNT | |
747 | NOREAD, TAD I INPTR /GET WORD | |
748 | ISZ INPTR /BUMP POINTER | |
749 | JMP I INWORD | |
750 | INPTR, 0 | |
751 | ||
752 | CIPAT, 0 /PATCH TO MAKECI | |
753 | TAD (1000 | |
754 | DCA I (JSW /CHANGE JSW | |
755 | COPT, DCA I (CISTRT+1 /& TAKE CARE OF /C | |
756 | JMP I CIPAT | |
757 | ||
758 | PAGE | |
759 | \fRELCIT, TAD LOCTRL /FIND START OF CODE | |
760 | CLL IAC | |
761 | DCA SUBLO /BY SUBTRACTING | |
762 | RAL | |
763 | TAD LOCTRH /AMOUNT FROM FREE | |
764 | DCA SUBHI | |
765 | JMS I (SUB | |
766 | TAD FREELO /THIS IS THE START OF THE CODE | |
767 | DCA CODBGN /MINUS ONE | |
768 | TAD FREEHI /THIS IS THE FIELD NUMBER | |
769 | DCA CODCDF | |
770 | TAD LOCTRL /SET UP PROG SIZE COUNT | |
771 | CLL CML CIA | |
772 | DCA CODSZ1 /LOWER COUNT | |
773 | RAL | |
774 | TAD LOCTRH | |
775 | CIA | |
776 | DCA CODSZ2 /UPPER COUNT | |
777 | TAD BLOCK /SET UP FOR READ AND WRITE | |
778 | DCA I (OUBLOK | |
779 | TAD BLOCK | |
780 | DCA I (INBLOK | |
781 | TAD (-401 | |
782 | DCA OCOUNT | |
783 | CLA CMA | |
784 | DCA ICOUNT | |
785 | RELOOP, JMS I (INWORD /GET A WORD OF CODE | |
786 | DCA TEMP | |
787 | TAD (3000 | |
788 | TAD TEMP /CHECK FOR OPCODE 5000 (GOTO) | |
789 | AND (7000 | |
790 | SZA CLA | |
791 | JMP NORELC /NO JUMP | |
792 | TAD TEMP /REMOVE FIELD BITS | |
793 | AND (340 | |
794 | CLL RTR | |
795 | TAD CDF0 | |
796 | DCA LBLFLD /FIELD OF LABEL ENTRY | |
797 | TAD TEMP /ZERO FIELD BITS | |
798 | AND (7437 | |
799 | DCA TEMP | |
800 | JMS I (INWORD /GET REST OF ADDR | |
801 | DCA TEMP2 | |
802 | JMS I (CHKLBL /CHECK FOR UNDEFINED LABEL | |
803 | LBLFLD, HLT | |
804 | TAD I TEMP2 | |
805 | AND (7 /GET ADDR TO BE RELOCATED | |
806 | DCA LOCHI | |
807 | ISZ TEMP2 | |
808 | TAD I TEMP2 | |
809 | CLL | |
810 | TAD CODBGN /ADD BASE ADDR | |
811 | CDF0, CDF | |
812 | DCA LOCLO /SAVE LOW PART OF JUMP | |
813 | RAL | |
814 | TAD CODCDF /GET HIGH PART | |
815 | TAD LOCHI | |
816 | CLL RTL /PUT IT INTO CORRECT PLACE | |
817 | RTL | |
818 | RAL | |
819 | TAD TEMP /PLUS INSTRUCTION | |
820 | JMS I (OUTWRD | |
821 | ISZ CODSZ1 /BUMP COUNTER | |
822 | SKP | |
823 | ISZ CODSZ2 /CAN'T BE LAST WORD | |
824 | TAD LOCLO /OUTPUT LOW ORDER ADDR | |
825 | SKP | |
826 | NORELC, TAD TEMP /JUST OUTPUT IT | |
827 | RELOUT, JMS I (OUTWRD | |
828 | ISZ CODSZ1 /DOUBLE WORD ISZ BUMP | |
829 | JMP RELOOP | |
830 | ISZ CODSZ2 | |
831 | JMP RELOOP | |
832 | JMP I (LOADIT /DONE RELOCATING, GO LOAD | |
833 | ||
834 | /PRINT ERROR MESSAGE | |
835 | ||
836 | ERMSG, 0 /PRINT ERROR MESSAGE | |
837 | CDF | |
838 | TAD I ERMSG /GET CODE | |
839 | CLL RTR /PRINT FIRST CHAR | |
840 | RTR | |
841 | RTR | |
842 | JMS TTY | |
843 | TAD I ERMSG /PRINT SECOND CHAR | |
844 | JMS TTY | |
845 | ISZ ERMSG /FIX RETURN ADDR | |
846 | TAD (240 /PRINT SPACE | |
847 | JMS TTY | |
848 | DCA TTY /USE TTY AS A SWITCH | |
849 | TAD LINEH /PRINT HIGH ORDER | |
850 | JMS I (PSN | |
851 | TAD LINEL /THEN LOW ORDER | |
852 | JMS I (PSN /(LINE NUMBER NATCH !) | |
853 | TAD (215 /PRINT CARRIAGE RETURN | |
854 | JMS I (TTX | |
855 | TAD (212 /PRINT LINE FEED | |
856 | JMS I (TTX | |
857 | JMP I ERMSG /RETURN | |
858 | ||
859 | TTY, 0 /CONVERT TO ASCII AND PRINT | |
860 | TAD (240 | |
861 | AND (77 | |
862 | TAD (240 | |
863 | JMS I (TTX /PRINT CHAR | |
864 | JMP I TTY /RETURN | |
865 | ||
866 | PAGE | |
867 | \fLOADIT, JMS I (OUDUMP /DUMP LAST BLOCK | |
868 | TAD LOCTRL /SET UP COUNTER | |
869 | CIA CLL CML | |
870 | DCA CODSZ1 | |
871 | RAL | |
872 | TAD LOCTRH | |
873 | CIA | |
874 | DCA CODSZ2 | |
875 | TAD CODBGN | |
876 | DCA TEMP /CODE BEGIN -1 | |
877 | TAD BLOCK /SET UP BLOCK NUMBER | |
878 | DCA I (INBLOK | |
879 | CLA CMA | |
880 | DCA ICOUNT | |
881 | TAD CODCDF /SET UP CODE CDF | |
882 | CLL RTL | |
883 | RAL | |
884 | TAD (6201 | |
885 | DCA CODCDF | |
886 | TAD CODCDF | |
887 | DCA CF | |
888 | LODLUP, ISZ TEMP /BUMP POINTER | |
889 | JMP NOFJMP /FIELD IS OK | |
890 | TAD CF /BUMP THE FIELD | |
891 | TAD (10 | |
892 | DCA CF | |
893 | NOFJMP, JMS I (INWORD /GET NEXT WORD | |
894 | CF, HLT | |
895 | DCA I TEMP /SAVE THE WORD | |
896 | CDFZER, CDF | |
897 | ISZ CODSZ1 /MORE CODE ? | |
898 | JMP LODLUP /YES | |
899 | ISZ CODSZ2 | |
900 | JMP LODLUP /YES | |
901 | TAD CF /GET THE FIELD | |
902 | DCA CLEARF /AND SAVE IT | |
903 | CLRLUP, TAD CLREND /IS THIS THE END OF CLEAR ? | |
904 | TAD TEMP | |
905 | SZA CLA | |
906 | JMP MORCLR /NO, KEEP GOING | |
907 | TAD CLRFLD /DO FIELDS MATCH ? | |
908 | TAD CLEARF | |
909 | SNA CLA | |
910 | JMP DONCLR /YES, ARRAYS ARE CLEARED | |
911 | MORCLR, ISZ TEMP /BUMP POINTER | |
912 | JMP CLEARF /DON'T BUMP FIELD | |
913 | TAD CLEARF /DO BUMP FIELD | |
914 | TAD (10 | |
915 | DCA CLEARF | |
916 | CLEARF, HLT | |
917 | DCA I TEMP /CLEAR THE WORD | |
918 | JMP CLRLUP /DO MORE | |
919 | DONCLR, TAD CLEARF /COPY THE FIELD | |
920 | DCA STFLDM | |
921 | TAD TEMP /GET THE COUNT | |
922 | TAD RESADR /OF HOW MUCH SYMBOL TABLE | |
923 | DCA TEMP2 /TO MOVE | |
924 | TAD TEMP /PUT IT INTO AUTO XR'S | |
925 | DCA X13 | |
926 | TAD X13 | |
927 | DCA X11 | |
928 | MOVSTL, CDF | |
929 | TAD I X11 /GET NEXT WORD OF ST | |
930 | STFLDM, HLT | |
931 | DCA I X13 /STORE IT | |
932 | ISZ TEMP2 | |
933 | JMP MOVSTL | |
934 | JMS MOVFIN /MOVE FINI PAGE INTO 7000-7177 | |
935 | JMP I (7000 /GO READ BRTS.SV | |
936 | \fCHKLBL, 0 /CHECK LABEL FOR UNDEF | |
937 | TAD I CHKLBL /GET FIELD | |
938 | DCA .+1 | |
939 | HLT | |
940 | TAD I TEMP2 /GET FIRST WORD OF LABEL | |
941 | SPA CLA | |
942 | JMP I CHKLBL /SIGN BIT IS DEFINED | |
943 | CLL CMA RAL /GET ADDR OF LINE NUM | |
944 | TAD TEMP2 | |
945 | DCA XLABEL | |
946 | TAD I XLABEL /GET HIGH ORDER LINE | |
947 | DCA LINEH | |
948 | ISZ XLABEL | |
949 | TAD I XLABEL /GET LOW ORDER | |
950 | DCA LINEL | |
951 | CDF | |
952 | JMS I (ERMSG /PRINT MESSAGE | |
953 | 2523 | |
954 | JMP I CHKLBL /RETURN | |
955 | ||
956 | FREEF, 0 /MAKE A CDF FROM FREEHI | |
957 | TAD FREEHI | |
958 | CLL RTL | |
959 | RAL | |
960 | TAD CDFZER | |
961 | JMP I FREEF | |
962 | ||
963 | ABORTL, JMS MOVFIN /PUT FINI PAGE INTO 7000-7177 | |
964 | /AND ABORT THE RUN | |
965 | JMP I (ABORT-FINI+7000 | |
966 | ||
967 | MOVFIN, 0 /FINI PAGE MOVER | |
968 | CDF | |
969 | TAD (FINI-1 /MOVE INT READING CODE | |
970 | DCA X10 | |
971 | TAD (6777 /INTO 7000 | |
972 | DCA X11 | |
973 | TAD (-200 | |
974 | DCA TEMP /PUT CORRECT COUNT HERE | |
975 | TAD I X10 | |
976 | DCA I X11 /MOVE CODE | |
977 | ISZ TEMP | |
978 | JMP .-3 | |
979 | JMP I MOVFIN | |
980 | ||
981 | PAGE | |
982 | \fFINI, TAD I XERMSG /ANY ERRORS ? | |
983 | SZA CLA | |
984 | JMP ABORT /YES, DON'T RUN IT | |
985 | TAD XINT /MOVE INT STUFF | |
986 | DCA FTEMP | |
987 | TAD M12 /10 KEY LOCATIONS | |
988 | DCA FCNT | |
989 | TAD XSAVE /INTO A SAFE PLACE | |
990 | DCA FTEMP2 | |
991 | TAD I FTEMP | |
992 | ISZ FTEMP | |
993 | DCA I FTEMP2 | |
994 | ISZ FTEMP2 | |
995 | ISZ FCNT | |
996 | JMP .-5 /MOVE LOOP | |
997 | TAD BRTS /READ IN BRTS | |
998 | DCA BRTSB | |
999 | JMS I X7607 | |
1000 | BRTSIZ | |
1001 | 0 | |
1002 | BRTSB, 0 | |
1003 | JMP IOERR | |
1004 | TAD XSAVE | |
1005 | DCA FTEMP | |
1006 | TAD XINT /MOVE STUFF BACK | |
1007 | DCA FTEMP2 | |
1008 | TAD I FTEMP | |
1009 | ISZ FTEMP | |
1010 | DCA I FTEMP2 | |
1011 | ISZ FTEMP2 | |
1012 | ISZ M12 | |
1013 | JMP .-5 | |
1014 | TAD (JMP I FSTOP1 /PATCH ^C LOCATIONS | |
1015 | DCA I (7600 | |
1016 | TAD (JMP I FSTOP1 | |
1017 | DCA I (7605 | |
1018 | JMP I (BRTBGN /GO START BRTS | |
1019 | ||
1020 | M12, -12 | |
1021 | XINT, 20 | |
1022 | XERMSG, ERMSG | |
1023 | X7607, 7607 | |
1024 | XSAVE, 7001+XSAVE-FINI | |
1025 | ||
1026 | MUL12, 0 /MULTIPLY 12BITS AND 24 BITS | |
1027 | DCA AC3 /SAVE 12 BIT THING | |
1028 | DCA AC2 /CLEAR REST OF AC | |
1029 | DCA AC1 | |
1030 | TAD (-15 /ONLY TEST 12 BITS | |
1031 | DCA SC | |
1032 | JMP MULBGN | |
1033 | MULLUP, SNL /WAS BIT ON ? | |
1034 | JMP NOADD /NO, DON'T ADD | |
1035 | TAD SUBLO /ADD TO HIGH ORDER 2/3'S OF AC | |
1036 | TAD AC2 | |
1037 | DCA AC2 | |
1038 | CML RAL | |
1039 | TAD SUBHI | |
1040 | NOADD, TAD AC1 /SHIFT AC RIGHT | |
1041 | CLL RAR | |
1042 | DCA AC1 | |
1043 | TAD AC2 | |
1044 | RAR | |
1045 | DCA AC2 | |
1046 | MULBGN, TAD AC3 | |
1047 | FTEMP, RAR | |
1048 | FTEMP2, DCA AC3 | |
1049 | FCNT, ISZ SC /BUMP SHIFT COUNTER | |
1050 | JMP MULLUP | |
1051 | TAD AC2 /ANSWER IS LOWER 2/3'S OF AC | |
1052 | DCA SUBHI | |
1053 | TAD AC3 | |
1054 | DCA SUBLO | |
1055 | JMP I MUL12 | |
1056 | ||
1057 | IOERR, DCA LINEL /ZERO LINE NUMBER | |
1058 | JMS I XERMSG /PRINT MESSAGE | |
1059 | 1117 | |
1060 | ABORT, JMS I (SWAP /SWAP OS8 BACK | |
1061 | JMS I (200 /CHECK OUT W/ CI BUILDER | |
1062 | TAD (4207 /RESTORE ^C LOCATIONS | |
1063 | DCA I (7600 | |
1064 | TAD (6213 | |
1065 | DCA I (7605 | |
1066 | TAD ABORTX /CALLED VIA CHAIN ?(FROM EDIT) | |
1067 | SNA | |
1068 | JMP I (7600 /NO, RETURN TO OS8 | |
1069 | DCA EDTBLK /YES, SAVE EDITOR START | |
1070 | JMS I X7607 /READ IN EDITOR | |
1071 | EDTSIZ /THIS MUCH | |
1072 | 0 | |
1073 | OWTEMP, | |
1074 | EDTBLK, 0 | |
1075 | JMP I (7605 /ERROR | |
1076 | JMP I (EDTBGN /GO START EDITOR | |
1077 | ||
1078 | OUTWRD, 0 /OUTPUT WORD TO TEMP FILE | |
1079 | ISZ OCOUNT /ANY ROOM ? | |
1080 | JMP NOWRIT /YES | |
1081 | DCA OWTEMP /SAVE WORD | |
1082 | JMS OUDUMP /WRITE BLOCK | |
1083 | ISZ OUBLOK /BUMP BLOCK NUMBER | |
1084 | TAD OUBLOK-1/RESET BUFFET POINTER | |
1085 | DCA OUPTR | |
1086 | TAD (-400 | |
1087 | DCA OCOUNT /AND COUNT | |
1088 | TAD OWTEMP /RESTORE AC | |
1089 | NOWRIT, CDF 10 | |
1090 | DCA I OUPTR /INTO BUFFER | |
1091 | CDF | |
1092 | ISZ OUPTR | |
1093 | JMP I OUTWRD | |
1094 | OUPTR, 0 | |
1095 | OUDUMP, 0 /WRITE BLOCK | |
1096 | JMS I X7607 /WRITE BLOCK | |
1097 | 4210 | |
1098 | 0 | |
1099 | OUBLOK, 0 | |
1100 | JMP IOERR | |
1101 | JMP I OUDUMP | |
1102 | ||
1103 | END=FINI+200 | |
1104 | ||
1105 | PAGE | |
1106 | \f BLDCI=200 /PAGE INTO WHICH MAKECI GETS MOVED | |
1107 | LOADBL=357 /LOC WHERE BCOMP LEAVES BLOAD BLOCK # | |
1108 | ||
1109 | IMAGE, 0 | |
1110 | TAD I (LOADBL /COME HERE TO CREATE CORE IMAGE | |
1111 | TAD (6 /ALREADY HAVE THIS MUCH | |
1112 | DCA I (LDRBLK /INIT BLOAD OVRLY READER | |
1113 | CDF 10 | |
1114 | TAD I (7644 /TEST FOR /V | |
1115 | CDF | |
1116 | AND (4 | |
1117 | SZA CLA | |
1118 | JMS I (VERNUM | |
1119 | CDF 10 | |
1120 | TAD I (7643 /GET OPTION BITS | |
1121 | CDF | |
1122 | DCA TEMP | |
1123 | TAD TEMP | |
1124 | RTR | |
1125 | SNL CLA /HAVE K OPTION? | |
1126 | JMP LSTART /NO: START LOADER | |
1127 | TAD TEMP | |
1128 | RTL | |
1129 | SZL CLA /HAVE B OPTION? | |
1130 | DCA I (FLGRTS /YES: FLAG IT | |
1131 | TAD TEMP /TEST FOR /C | |
1132 | RTL | |
1133 | SPA CLA | |
1134 | JMP .+3 | |
1135 | TAD (NOP | |
1136 | DCA I (COPT | |
1137 | CDF 10 | |
1138 | TAD I (7646 /GET =N | |
1139 | CDF | |
1140 | AND (7 /WIPE ALT MODE | |
1141 | SNA | |
1142 | CLL CML RTL /DEFAULT=12K FOR NOW | |
1143 | DCA TEMP | |
1144 | CLL CMA | |
1145 | TAD TEMP /MUST BE >1 HERE | |
1146 | SNA CLA | |
1147 | ISZ TEMP | |
1148 | TAD TEMP | |
1149 | CLL CMA | |
1150 | TAD HIFLD | |
1151 | SNL CLA /WHICH HAS MORE CORE? | |
1152 | JMP .+3 /TARGET MACHINE: TOUGH | |
1153 | TAD TEMP /HOST MACHINE | |
1154 | DCA HIFLD /FAKE OUT LOADER | |
1155 | TAD HIFLD | |
1156 | CIA | |
1157 | DCA I (FLDCNT /INIT CI BUILDER | |
1158 | TAD I (FLDCNT | |
1159 | DCA I (MYCORE /AND CI STARTER | |
1160 | CDF 10 | |
1161 | DCA I (7646 /CLEAR =N BITS | |
1162 | DCA I (7643 /AND EARLY OPTIONS | |
1163 | TAD I (7644 /GET OPTION BITS | |
1164 | CDF | |
1165 | RTL | |
1166 | SZL CLA /HAVE N SWITCH? | |
1167 | JMP NOTDSY /NEVER SEES TD8E SYSTEM | |
1168 | TAD HIFLD | |
1169 | CLL RAR | |
1170 | SNA CLA /HAVE OVER 8K CORE? | |
1171 | JMP NOTDSY | |
1172 | TAD (NOP | |
1173 | DCA I (GOTTD /YES: FORCE SYS=TD8E | |
1174 | CDF 10 /THE QUESTION IS, | |
1175 | TAD I (DCB /WAS IT A LITTLE WHITE ONE | |
1176 | AND (770 /OR NOT? | |
1177 | TAD (-210 | |
1178 | CDF | |
1179 | SNA CLA | |
1180 | TAD I (7612 | |
1181 | TAD (-3 | |
1182 | SNA CLA | |
1183 | JMP .+3 /IT WAS TRUTH! | |
1184 | TAD (SWAP-LOADER+5600 | |
1185 | DCA I (TDLIE /LIES: MUST LIE TO SWAPPER ALSO | |
1186 | CLA IAC | |
1187 | NOTDSY, DCA I (TDFLAG /NOT 0 MEANS HAVE TD8E | |
1188 | CMA | |
1189 | DCA I (ERMSG /FORCE LOAD ABORT | |
1190 | LSTART, TAD (BLDCI-1 /MOVE CI BUILDER | |
1191 | DCA X10 /INTO LOW CORE | |
1192 | TAD (MAKECI-1 | |
1193 | DCA X11 | |
1194 | TAD I X11 | |
1195 | DCA I X10 | |
1196 | ISZ ICTR | |
1197 | JMP .-3 | |
1198 | TAD HIFLD /START OF BLOAD V1 | |
1199 | DCA FREEHI | |
1200 | JMP I IMAGE /RETURN TO LOADER | |
1201 | ||
1202 | ICTR, -200 | |
1203 | CCLIST, 0 /1ST 4 WORDS OF CCB | |
1204 | 6203 | |
1205 | CISTRT | |
1206 | 1000 /JOB STATUS WORD | |
1207 | ||
1208 | PAGE | |
1209 | \f CCB=1000 /LOC TO START BUILDING CCB | |
1210 | ||
1211 | MAKECI, 0 /THIS PAGE GETS MOVED! | |
1212 | TSF | |
1213 | JMP .-1 /SEE TAG "ABORT" IN BLOAD V1 | |
1214 | ISZ I (ERMSG /WHY ARE WE HERE? | |
1215 | JMP BOSFIX /GENUINE ABORTION | |
1216 | TAD (CCB-1 | |
1217 | DCA X10 | |
1218 | TAD (CCLIST-1 | |
1219 | DCA X11 | |
1220 | TAD I X11 /1ST FOUR WORDS OF CCB | |
1221 | DCA I X10 | |
1222 | ISZ MKCCNT | |
1223 | JMP .-3 | |
1224 | CCSEGS, TAD FLDCNT | |
1225 | CLL CIA RAL | |
1226 | RTL /THIS FIELD | |
1227 | DCA TEMP | |
1228 | TAD (70 | |
1229 | AND CODCDF /LOWEST FIELD USED | |
1230 | CLL CIA | |
1231 | TAD TEMP | |
1232 | SNL /THIS FIELD USED? | |
1233 | JMP NOCODE /NO: BYPASS IT | |
1234 | SZA CLA /IS IT FULL? | |
1235 | JMP ALLCODE /YES | |
1236 | TAD CODBGN /PROBABLY NOT | |
1237 | AND (7400 | |
1238 | DCA TEMP2 | |
1239 | TAD TEMP2 | |
1240 | CIA | |
1241 | CLL RAR | |
1242 | TAD TEMP | |
1243 | DCA TEMP | |
1244 | TAD TEMP2 | |
1245 | ALLCODE,DCA I X10 | |
1246 | TAD FLDCNT | |
1247 | IAC | |
1248 | TAD TDFLAG | |
1249 | SMA CLA /NEED TOP PAGE? | |
1250 | TAD (3700 /NO: 37 PAGES | |
1251 | TAD TEMP /YES: 40 PAGES | |
1252 | AND K3777 | |
1253 | DCA I X10 | |
1254 | ISZ I (CCB | |
1255 | NOCODE, CLA CLL | |
1256 | ISZ FLDCNT /NEXT FIELD ZERO? | |
1257 | JMP CCSEGS /NO: LOOP | |
1258 | TAD FLGRTS | |
1259 | SZA CLA /NEED BRTS? | |
1260 | TAD (CISTRT | |
1261 | DCA I X10 | |
1262 | TAD FLGRTS | |
1263 | SZA CLA | |
1264 | TAD (200-3700 | |
1265 | TAD (3700 | |
1266 | DCA I X10 | |
1267 | TAD I (CCB | |
1268 | CMA | |
1269 | DCA I (CCB /NEGATE SEG COUNT | |
1270 | JMS I (7607 /READ CI STARTER | |
1271 | KP200, 200 /FROM END OF BLOAD.SV | |
1272 | CISTRT /INTO HI CORE | |
1273 | LDRBLK, 0 /INIT BY "IMAGE" | |
1274 | BOSPT1, 7600 /CAN'T GET THIS ERROR | |
1275 | JMS I JCIP | |
1276 | TAD TDFLAG /PASS TD8E FLAG | |
1277 | DCA I (FLAGTD | |
1278 | TAD FLGRTS | |
1279 | DCA I (RTSFLG /AND BRTS FLAG | |
1280 | TAD MYCORE | |
1281 | DCA I (NOCORE /AND CORE LIMIT | |
1282 | TAD (17 /SAVE 10 KEY LOCATIONS | |
1283 | DCA X10 | |
1284 | TAD (KEYLOC-1 | |
1285 | DCA X11 | |
1286 | TAD I X10 | |
1287 | DCA I X11 | |
1288 | ISZ MCICNT | |
1289 | JMP .-3 | |
1290 | JMS I (7607 /CALL SYS HANDLER | |
1291 | 4200 /TO WRITE CCB | |
1292 | CCB-200 /(AND PRECEDING PG) | |
1293 | 37 /INTO SCRATCH BLOCK | |
1294 | K3777, 3777 /CAN'T GET THIS ERROR | |
1295 | JMP I (EXEUIT | |
1296 | ||
1297 | MKCCNT, -4 | |
1298 | MCICNT, -12 | |
1299 | FLDCNT, -7 | |
1300 | TDFLAG, 1 /0 MEANS TD8E IS DEATH AT RT | |
1301 | FLGRTS, -1 /0 MEANS INCL BRTS IN CI | |
1302 | ||
1303 | BOSFIX, TAD I (BIPCCL | |
1304 | RAL | |
1305 | SMA CLA | |
1306 | JMP I MAKECI /BATCH NOT RUNNING | |
1307 | TAD I (7777 | |
1308 | AND (70 | |
1309 | TAD CDFZRO | |
1310 | DCA BOSCDF /CDF TO BATCH FIELD | |
1311 | BOSLUP, CDF 10 | |
1312 | TAD I BOSPT1 /GET BATCH WRDS | |
1313 | BOSCDF, CDF 10 | |
1314 | DCA I BOSPT2 /BACK INTO POSITION | |
1315 | CDFZRO, CDF | |
1316 | ISZ BOSPT1 | |
1317 | ISZ BOSPT2 | |
1318 | JMP BOSLUP | |
1319 | JMP I MAKECI | |
1320 | ||
1321 | BOSPT2, 7774 | |
1322 | MYCORE, 0 | |
1323 | JCIP, CIPAT | |
1324 | ||
1325 | PAGE | |
1326 | \fVERNUM, 0 | |
1327 | TAD (VTEXT | |
1328 | DCA TEMP | |
1329 | MOREV, TAD I TEMP | |
1330 | SNA | |
1331 | JMP VOUT | |
1332 | CLL RTR | |
1333 | RTR | |
1334 | RTR | |
1335 | JMS I (TTY | |
1336 | TAD I TEMP | |
1337 | JMS I (TTY | |
1338 | ISZ TEMP | |
1339 | JMP MOREV | |
1340 | VOUT, TAD (215 | |
1341 | JMS I (TTX | |
1342 | TAD (212 | |
1343 | JMS I (TTX | |
1344 | JMP I VERNUM | |
1345 | ||
1346 | VTEXT, TEXT /BLOAD V/ | |
1347 | *.-1 | |
1348 | VERLOC, 100^VERSON+6001 | |
1349 | 0 | |
1350 | ||
1351 | PAGE | |
1352 | \f *7000 | |
1353 | BSTART=200 /START ADDR FOR BRTS | |
1354 | CISTRT, SKP /RUNNED | |
1355 | JMP CHAIN /CHAINED | |
1356 | TAD (7603 | |
1357 | DCA X10 | |
1358 | TAD (NAMLST-1 | |
1359 | DCA X11 | |
1360 | CDF 10 | |
1361 | DCA I X10 /ZERO EDITOR | |
1362 | DCA I X10 /COMPILER | |
1363 | DCA I X10 /AND LOADER BLOCK #S | |
1364 | CDF | |
1365 | CIF 10 | |
1366 | JMS I (7700 | |
1367 | 10 /USRIN | |
1368 | FINDSV, TAD I X11 /LOOKUP SOME SAVE FILES | |
1369 | SNA | |
1370 | JMP LUBUF /GO LOOK FOR BASIC.UF | |
1371 | DCA XXXXSV /SAVE POINTER TO NAME | |
1372 | CLA IAC /THEY'RE ON SYS | |
1373 | CIF 10 | |
1374 | JMS I (200 | |
1375 | 2 | |
1376 | XXXXSV, 0 | |
1377 | 0 | |
1378 | JMS I (ERRORX /ERROR | |
1379 | TAD XXXXSV /GET STARTING BLOCK | |
1380 | IAC /PLUS 1 | |
1381 | CDF 10 | |
1382 | DCA I X10 /INTO INFO AREA | |
1383 | CDF | |
1384 | JMP FINDSV /LOOP | |
1385 | LUBUF, CLA IAC | |
1386 | CIF 10 | |
1387 | JMS I (200 /LOOKUP BASIC.UF | |
1388 | 2 | |
1389 | BUFN /(USER DEFINED FUNCTIONS) | |
1390 | 0 | |
1391 | JMP .+3 /OK IF NOT THERE | |
1392 | TAD .-3 /GET STARTING BLOCK +1 | |
1393 | IAC | |
1394 | CDF 10 | |
1395 | DCA I X10 /INTO INFO BLOCK | |
1396 | CDF 0 | |
1397 | CIF 10 | |
1398 | JMS I (200 | |
1399 | 11 /USR OUT | |
1400 | CHAIN, CDF 10 | |
1401 | TAD I (7607 /GET BRTS STARTING BLK | |
1402 | CDF | |
1403 | DCA I (BRTSST /INTO RTS READER | |
1404 | JMP I (BINIT | |
1405 | ||
1406 | NAMLST, BRTSN | |
1407 | BAFN | |
1408 | BSFN | |
1409 | BFFN | |
1410 | 0 | |
1411 | BRTSN, FILENAME BRTS.SV | |
1412 | BAFN, FILENAME BASIC.AF | |
1413 | BSFN, FILENAME BASIC.SF | |
1414 | BFFN, FILENAME BASIC.FF | |
1415 | BUFN, FILENAME BASIC.UF | |
1416 | \fCORE, 0 | |
1417 | TAD I (BIPCCL | |
1418 | AND COR70 | |
1419 | CLL RAR | |
1420 | RTR | |
1421 | SZA /IS THERE A SYSTEM VALUE? | |
1422 | JMP I CORE /YES: USE IT | |
1423 | COR0, CDF | |
1424 | TAD CORSIZ | |
1425 | RTL | |
1426 | RAL | |
1427 | AND COR70 | |
1428 | TAD COREX | |
1429 | DCA .+1 | |
1430 | COR1, CDF | |
1431 | TAD I CORLOC | |
1432 | COR2, NOP | |
1433 | DCA COR1 | |
1434 | TAD COR2 | |
1435 | DCA I CORLOC | |
1436 | COR70, 70 | |
1437 | TAD I CORLOC | |
1438 | CORX, 7400 | |
1439 | TAD CORX | |
1440 | TAD CORV | |
1441 | SZA CLA | |
1442 | JMP COREX | |
1443 | TAD COR1 | |
1444 | DCA I CORLOC | |
1445 | ISZ CORSIZ | |
1446 | JMP COR0 | |
1447 | COREX, CDF | |
1448 | CLA CMA /HI FIELD IS #FIELDS-1 | |
1449 | TAD CORSIZ | |
1450 | JMP I CORE | |
1451 | CORLOC, CORX | |
1452 | CORV, 1400 | |
1453 | CORSIZ, 1 | |
1454 | ||
1455 | PAGE | |
1456 | \fGETRTS, 0 /READ BRTS INTO 0-6777 | |
1457 | TAD BRTS | |
1458 | DCA BRTSBB | |
1459 | JMS I (7607 | |
1460 | BRTSIZ | |
1461 | 0 | |
1462 | BRTSBB, 0 | |
1463 | NOCORE, -1 /CAN'T GET THIS ERROR | |
1464 | JMP I GETRTS | |
1465 | BINIT, ISZ RTSFLG /NEED BRTS? | |
1466 | JMP BRTSIN /GOT IT: START IT | |
1467 | JMS I (7607 | |
1468 | BRTSIZ | |
1469 | 0 | |
1470 | BRTSST, 0 | |
1471 | SR2, 20 /CAN'T GET THIS ERROR | |
1472 | BRTSIN, CDF 10 /WHAT ARE WE RUNNING ON? | |
1473 | ISZ EKOUNT | |
1474 | TAD I (DCB /CHECK FOR TD8E SYSTEM | |
1475 | AND (770 /ED FRIEDMAN GAVE ME THIS CODE | |
1476 | TAD (-210 /AND I'M TAKING IT ON FAITH | |
1477 | CDF | |
1478 | SNA CLA | |
1479 | TAD I (7642 /IS IT A ROM SYSTEM ? | |
1480 | TAD (-6223 | |
1481 | SZA CLA | |
1482 | JMP PSADJ /NO TD/8E OR ELSE ROM TD/8E | |
1483 | TAD FLAGTD | |
1484 | SNA CLA /IMAGE OK ON TD8E? | |
1485 | JMS ERRORX /NO: DONT RUN IT | |
1486 | TAD KEYLOC | |
1487 | DCA CDFTOP | |
1488 | SWPLOOP,CDF 20 | |
1489 | TAD I TDCTR | |
1490 | DCA GETRTS | |
1491 | CDFTOP, CDF 70 | |
1492 | TAD I TDCTR | |
1493 | DCA ERRORX | |
1494 | TAD GETRTS | |
1495 | DCA I TDCTR | |
1496 | CDF 20 | |
1497 | TAD ERRORX | |
1498 | DCA I TDCTR | |
1499 | ISZ TDCTR | |
1500 | JMP SWPLOOP | |
1501 | CDF | |
1502 | CLL CML RTL | |
1503 | TAD CDFTOP /PATCH MONITOR FIELD STUFF | |
1504 | DCA I (7642 /CDF CIF HI CORE | |
1505 | IAC | |
1506 | TAD CDFTOP | |
1507 | DCA I (7721 /CIF HI CORE | |
1508 | TAD I (7721 | |
1509 | DCA I (7727 | |
1510 | CCHEK, ISZ EKOUNT | |
1511 | JMS I (CORE /HOW MUCH CORE DO WE HAVE? | |
1512 | TAD NOCORE /HOW MUCH DO WE NEED? | |
1513 | SPA CLA | |
1514 | JMS ERRORX /INSUFFICIENT CORE | |
1515 | TAD I SR1 /RESTORE KEY LOCATIONS | |
1516 | DCA I SR2 | |
1517 | ISZ SR1 | |
1518 | ISZ SR2 | |
1519 | ISZ SR3 | |
1520 | JMP .-5 | |
1521 | TAD (JMP I FSTOP1 /PATCH CTRL/C LOCS | |
1522 | DCA I (7600 | |
1523 | TAD (JMP I FSTOP1 | |
1524 | DCA I (7605 | |
1525 | TAD SWPINF /TELL BRTS OS/8 PG 17600 OUT NOW | |
1526 | RAR | |
1527 | STL RAL | |
1528 | DCA SWPINF | |
1529 | JMP I (BSTART /START BRTS | |
1530 | ||
1531 | ERRORX, 0 | |
1532 | CIF 10 | |
1533 | JMS I (7700 | |
1534 | 7 | |
1535 | EKOUNT, 1 | |
1536 | JMP I (7605 | |
1537 | ||
1538 | EXEUIT, TAD RTSFLG | |
1539 | SNA CLA /NEED BRTS? | |
1540 | JMS GETRTS /YES: READ IT | |
1541 | TAD (4207 /RESTORE ^C HOOKS | |
1542 | DCA I (7600 | |
1543 | TAD (6213 | |
1544 | DCA I (7605 | |
1545 | JMP I (7600 /BACK TO OS8 | |
1546 | KEYLOC, ZBLOCK 12 | |
1547 | SR1, KEYLOC | |
1548 | SR3, -12 | |
1549 | RTSFLG, -1 /0 MEANS BRTS IS IN CORE | |
1550 | FLAGTD, 1 /1 IF TD8E IS OK AT RUNTIME | |
1551 | PSADJ, TAD (4001 | |
1552 | AND KEYLOC+11 | |
1553 | TAD (2000 | |
1554 | DCA KEYLOC+11 | |
1555 | JMP CCHEK | |
1556 | TDCTR, 7600 | |
1557 | ||
1558 | PAGE | |
1559 | $$$$$ | |
1560 | \f |