1: /
2: /
3:
4: / bas0 -- basic
5:
6: scope = 1
7: .globl main
8: .globl sin, cos, log, exp, atan, pow, sqrt
9: .globl rand, srand
10: .globl fptrap
11: .globl fopen, getc
12:
13: indir = 0 /for indirect sys calls. (not in as)
14: one = 40200
15:
16: main:
17: mov $1,prfile /initial print file
18: sys signal; 4; fptrap
19: setd
20: sys time
21: mov r1,r0
22: mov r0,randx
23: jsr pc,srand
24: sys signal; 2; intrup
25: mov sp,gsp
26: clr seeka
27: mov $'a,r1
28: 1:
29: movb r1,tmpf+8
30: sys stat; tmpf; line
31: bes 1f
32: inc r1
33: cmp r1,$'z
34: blos 1b
35: br 2f
36: 1:
37: sys creat; tmpf; 600
38: bes 2f
39: mov r0,tfo
40: sys open; tmpf; 0
41: bec 1f
42: 2:
43: mov $3f,r0
44: jsr pc,print
45: sys exit
46: 3:
47: <Tmp file?\n\0>; .even
48: 1:
49: mov r0,tfi
50:
51: mov gsp,sp
52: cmp (sp),$2 /is there a file argument
53: blt noarg
54: mov 4(sp),r0
55: mov $argname,r1
56: 1:
57: movb (r0)+,(r1)+
58: bne 1b
59: aftered: / after edit
60: mov $argname,r0
61: jsr r5,fopen; iobuf
62: bes 1f
63: noarg:
64: jsr pc,isymtab
65: br loop
66: 1:
67: mov $1f,r0
68: jsr pc,print
69: br loop
70: 1:
71: <Cannot open file\n\0>; .even
72:
73: intrup:
74: sys signal; 2; intrup
75: mov $'\n,r0
76: jsr r5,xputc
77: jsr r5,error
78: <ready\n\0>; .even
79:
80: loop:
81: mov gsp,sp
82: clr lineno
83: jsr pc,rdline
84: mov $line,r3
85: 1:
86: movb (r3),r0
87: jsr pc,digit
88: br 1f
89: jsr r5,atoi
90: cmp r0,$' /
91: beq 3f
92: cmp r0,$' /tab
93: bne 1f
94: 3:
95: mov $lintab,r3
96: mov r1,r0
97: bgt 2f
98: jsr pc,serror
99: 2:
100: cmp r0,(r3)
101: beq 2f
102: tst (r3)
103: beq 2f
104: add $6,r3
105: br 2b
106: 2:
107: cmp r3,$elintab-12.
108: blo 2f
109: jsr r5,error
110: <too many lines\n\0>; .even
111: 2:
112: mov r0,(r3)+
113: mov seeka,(r3)+
114: mov tfo,r0
115: mov seeka,seekx
116: sys indir; sysseek
117: mov $line,r0
118: jsr pc,size
119: inc r0
120: add r0,seeka
121: mov r0,wlen
122: mov tfo,r0
123: mov $line,wbuf
124: sys indir;syswrit
125: br loop
126: 1:
127: mov $line,r3
128: jsr pc,singstat
129: br loop
130:
131: nextc:
132: movb (r3)+,r0
133: rts r5
134:
135: size:
136: clr -(sp)
137: 1:
138: inc (sp)
139: cmpb (r0),$'\n
140: beq 1f
141: cmpb (r0),$0
142: beq 1f
143: inc r0
144: br 1b
145: 1:
146: mov (sp)+,r0
147: rts pc
148:
149: rdline: / read input (file or tty) to carr. ret.
150: mov $line,r1
151: 1:
152: jsr r5,getc; iobuf
153: bes 2f
154: tst r0
155: beq 2f
156: cmp r1,$line+99.
157: bhis 2f / bad check, but a check
158: movb r0,(r1)+
159: cmpb r0,$'\n
160: bne 1b
161: clrb (r1)
162: rts pc
163: 2:
164: mov fi,r0
165: beq 1f
166: sys close
167: clr fi
168: br 1b
169: 1:
170: jmp _done
171:
172: error:
173: tst fi
174: beq 1f
175: sys close
176: clr fi
177: 1:
178: tst lineno
179: beq 1f
180: jsr pc,nextlin
181: br 1f
182: mov $line,r0
183: jsr pc,print
184: 1:
185: mov r5,r0
186: jsr pc,print
187: jmp loop
188:
189: serror:
190: dec r3
191: tst fi
192: beq 1f
193: sys close
194: clr fi
195: 1:
196: mov $line,r1
197: 1:
198: cmp r1,r3
199: bne 2f
200: mov $'_,r0
201: jsr r5,xputc
202: mov $10,r0
203: jsr r5,xputc
204: 2:
205: movb (r1),r0
206: jsr r5,xputc
207: cmpb (r1)+,$'\n
208: bne 1b
209: jmp loop
210:
211: print:
212: mov r0,wbuf
213: jsr pc,size
214: mov r0,wlen
215: mov prfile,r0
216: sys indir; syswrit
217: rts pc
218:
219: digit:
220: cmp r0,$'0
221: blo 1f
222: cmp r0,$'9
223: bhi 1f
224: add $2,(sp)
225: 1:
226: rts pc
227:
228: alpha:
229: cmp r0,$'a
230: blo 1f
231: cmp r0,$'z
232: bhi 1f
233: add $2,(sp)
234: 1:
235: cmp r0,$'A
236: blo 1f
237: cmp r0,$'Z
238: bhi 1f
239: add $2,(sp)
240: 1:
241: rts pc
242:
243: name:
244: mov $nameb,r1
245: clr (r1)
246: clr 2(r1)
247: 1:
248: cmp r1,$nameb+4
249: bhis 2f
250: movb r0,(r1)+
251: 2:
252: movb (r3)+,r0
253: jsr pc,alpha
254: br 2f
255: br 1b
256: 2:
257: jsr pc,digit
258: br 2f
259: br 1b
260: 2:
261: mov $resnam,r1
262: 1:
263: cmp nameb,(r1)
264: bne 2f
265: cmp nameb+2,2(r1)
266: bne 2f
267: sub $resnam,r1
268: asr r1
269: add $2,(sp)
270: rts pc
271: 2:
272: add $4,r1
273: cmp r1,$eresnam
274: blo 1b
275: mov $symtab,r1
276: 1:
277: tst (r1)
278: beq 1f
279: cmp nameb,(r1)
280: bne 2f
281: cmp nameb+2,2(r1)
282: bne 2f
283: rts pc
284: 2:
285: add $14.,r1
286: br 1b
287: 1:
288: cmp r1,$esymtab-28.
289: blo 1f
290: jsr r5,error
291: <out of symbol space\n\0>; .even
292: 1:
293: mov nameb,(r1)
294: mov nameb+2,2(r1)
295: clr 4(r1)
296: clr 14.(r1)
297: rts pc
298:
299: skip:
300: cmp r0,$' /
301: beq 1f
302: cmp r0,$' / tab
303: bne 2f
304: 1:
305: movb (r3)+,r0
306: br skip
307: 2:
308: rts pc
309:
310: xputc:
311: .if scope / for plotting
312: tstb drflg
313: beq 1f
314: jsr pc,drput
315: rts r5
316: 1:
317: .endif
318: mov r0,ch
319: mov $1,r0
320: sys write; ch; 1
321: rts r5
322:
323: nextlin:
324: clr -(sp)
325: mov $lintab,r1
326: 1:
327: tst (r1)
328: beq 1f
329: cmp lineno,(r1)
330: bhi 2f
331: mov (sp),r0
332: beq 3f
333: cmp (r0),(r1)
334: blos 2f
335: 3:
336: mov r1,(sp)
337: 2:
338: add $6,r1
339: br 1b
340: 1:
341: mov (sp)+,r1
342: beq 1f
343: mov (r1)+,lineno
344: mov (r1)+,seekx
345: mov tfi,r0
346: sys indir; sysseek
347: mov tfi,r0
348: sys read; line; 100.
349: add $2,(sp)
350: 1:
351: rts pc
352:
353: getloc:
354: mov $lintab,r1
355: 1:
356: tst (r1)
357: beq 1f
358: cmp r0,(r1)
359: beq 2f
360: add $6,r1
361: br 1b
362: 1:
363: jsr r5,error
364: <label not found\n\0>; .even
365: 2:
366: rts pc
367:
368: isymtab:
369: mov $symtab,r0
370: mov $symtnam,r1
371: clrf fr0
372: movf $one,fr1
373: 1:
374: mov (r1)+,(r0)+
375: mov (r1)+,(r0)+
376: mov $1,(r0)+
377: subf r1,r0
378: movf r0,(r0)+
379: cmp r1,$esymtnam
380: blo 1b
381: clr (r0)+
382: rts pc
383:
384: /
385: /
386:
387: / bas1 -- compile
388: /
389: / convention: jsr pc,subrout /test
390: / br failside
391: / succeed ...
392:
393: compile:
394: clr forp
395: mov $iflev,ifp /added for if..else..fi
396: mov $space,r4
397: tst lineno
398: beq 1f
399: rts pc
400: 1:
401: jsr pc,nextlin
402: br 1f
403: mov lineno,r0
404: jsr pc,getloc
405: mov r4,4(r1)
406: jsr pc,statement
407: br .+2
408: inc lineno
409: cmp r4,$espace+20 / out of code space?
410: blo 1b
411: jsr r5,error
412: <out of code space\n\0>; .even
413: 1:
414: tst forp
415: jne forer
416: cmp ifp,$iflev
417: jne fier /hanging if..fi
418: mov $loop,(r4)+
419: rts pc
420:
421: singstat:
422: clr forp
423: mov $iflev,ifp
424: mov $exline,r4
425: jsr pc,statement
426: br 1f
427: cmp -2(r4),$_asgn
428: beq 1f
429: mov $_print,(r4)+
430: mov $_nline,(r4)+
431: 1:
432: tst forp
433: jne forer
434: cmp r4,$eexline
435: blo 1f
436: jsr r5,error
437: <out of code space\n\0>; .even
438: 1:
439: mov $loop,(r4)+
440: mov r4,exprloc
441: mov $exline,r4
442: jmp execute
443:
444: statement:
445: mov $line,r3
446: movb (r3)+,r0
447: jsr pc,digit
448: br stat1
449: dec r3
450: jsr r5,atoi
451: cmp r0,$' /
452: beq 1f
453: cmp r0,$' /tab
454: beq 1f
455: mov $line,r3
456: movb (r3)+,r0
457: br stat1
458: 1:
459: mov $_line,(r4)+
460: mov r1,(r4)+
461:
462: stat1:
463: jsr pc,skip
464: cmp r0,$'\n
465: bne .+4
466: rts pc
467: mov r3,-(sp)
468: jsr pc,alpha
469: br 1f
470: jsr pc,name
471: br 1f
472: tst (sp)+
473: jsr pc,skip
474: dec r3
475: jmp *2f(r1)
476: 2:
477: stlist
478: stdone
479: stdone
480: strun
481: stprint
482: stprompt / prompt is like print except for cr
483: stif
484: stgoto
485: streturn
486: stfor
487: stnext
488: stoctl
489: stsave
490: stdump
491: stfi
492: stelse
493: stedit
494: stcomment
495: .if scope / for plotting on tektronix
496: stdisp
497: stdraw
498: steras
499: .endif
500:
501: 1:
502: mov (sp)+,r3
503: dec r3
504: jsr pc,expr
505: cmp r0,$'\n
506: jne joe
507: add $2,(sp)
508: rts pc
509:
510: stsave:
511: mov $_save,func
512: br 1f
513:
514: stlist:
515: mov $_list,func
516: 1:
517: cmp r0,$'\n
518: bne 1f
519: clrf r0
520: jsr pc,const
521: movif $77777,r0
522: jsr pc,const
523: br 2f
524: 1:
525: jsr pc,expr
526: cmp r0,$'\n
527: bne 1f
528: mov $_dup,(r4)+
529: br 2f
530: 1:
531: dec r3
532: jsr pc,expr
533: cmp r0,$'\n
534: jne joe
535: 2:
536: mov func,(r4)+
537: rts pc
538:
539: stdone:
540: cmp r0,$'\n
541: jne joe
542: mov $_done,(r4)+
543: rts pc
544:
545: strun:
546: cmp r0,$'\n
547: jne joe
548: mov $_run,(r4)+
549: rts pc
550:
551:
552: stprompt:
553: clr -(sp)
554: br stpr2
555:
556: stdump:
557: cmp r0,$'\n
558: jne joe
559: mov $_dump,(r4)+
560: rts pc
561:
562: stprint:
563: mov pc,-(sp)
564: stpr2:
565: movb (r3)+,r0
566: jsr pc,skip
567: 1:
568: cmp r0,$'\n
569: beq 2f
570: cmp r0,$'"
571: beq 1f
572: dec r3
573: jsr pc,expr
574: mov $_print,(r4)+
575: br 1b
576: 1:
577: mov $_ascii,(r4)+
578: 1:
579: movb (r3)+,(r4)
580: cmpb (r4),$'"
581: beq 1f
582: cmpb (r4)+,$'\n
583: bne 1b
584: jbr joe
585: 1:
586: add $2,r4
587: bic $1,r4
588: br stpr2
589: 2:
590: tst (sp)+
591: beq 1f
592: mov $_nline,(r4)+
593: 1:
594: rts pc
595:
596: stif:
597: jsr pc,expr
598: mov $_if,(r4)+
599: mov r4,*ifp
600: add $2,ifp
601: tst (r4)+
602: jsr pc,skip
603: cmp r0,$'\n / if ... fi
604: beq 1f
605: jsr pc,stat1
606: br .+2
607: stfi:
608: sub $2,ifp
609: cmp ifp,$iflev
610: jlo fier
611: mov *ifp,r1 /for jump around if
612: mov r4,(r1)
613: 1:
614: rts pc
615:
616: fier:
617: jsr r5,error; <if...else...fi imbalance\n\0>; .even
618:
619: stelse:
620: mov $_tra,(r4)+ /jump around else side
621: mov r4+,-(sp) / save hole
622: tst (r4)+
623: sub $2,ifp
624: cmp ifp,$iflev
625: jlo fier
626: mov *ifp,r1
627: mov r4,(r1) /fill in jump to else
628: mov (sp)+,*ifp /save hole for fi
629: add $2,ifp
630: rts pc
631:
632: stedit: / enter the regular editor <ed>
633: sys fork
634: br newpr
635: mov $lintab,r0 / zero out line table during edit
636: 1:
637: cmp r0,$elintab /done
638: beq 1f
639: mov $0,(r0)+
640: br 1b
641: 1:
642: sys unlink; tmpf
643: sys wait
644: jmp aftered / start over
645: newpr:
646: sys exec; ed; edarg
647: sys exit
648: ed: </bin/ed\0> ; .even
649: ednm: <-\n>
650: .even
651: edarg: ednm; argname; 0
652:
653: : /comment line
654: cmp r0,$'\n
655: beq 1f
656: movb (r3)+,r0
657: br stcomment
658: 1:
659: rts pc
660: stgoto:
661: jsr pc,expr
662: mov $_goto,(r4)+
663: rts pc
664:
665: streturn:
666: cmp r0,$'\n
667: beq 1f
668: jsr pc,expr
669: cmp r0,$'\n
670: bne joe
671: br 2f
672: 1:
673: clrf r0
674: jsr pc,const
675: 2:
676: mov $_return,(r4)+
677: rts pc
678:
679: joe:
680: jsr pc,serror
681:
682: stfor:
683: mov r4,-(sp)
684: jsr pc,e2
685: mov r4,-(sp)
686: cmp r0,$'=
687: bne joe
688: tst val
689: bne joe
690: jsr pc,expr
691: mov forp,(r4)+ / overlay w _asgn
692: mov r4,forp
693: cmp (r4)+,(r4)+ / _tra ..
694: mov (sp)+,r0
695: mov (sp)+,r1
696: 1:
697: mov (r1)+,(r4)+
698: cmp r1,r0
699: blo 1b
700: mov $_fori,(r4)+
701: mov forp,r1
702: mov $_tra,(r1)+
703: mov r4,(r1)+
704: dec r3
705: jsr pc,expr
706: mov $_lesseq,(r4)+
707: mov $_if,(r4)+
708: mov forp,(r4)+
709: mov r4,forp
710: cmp r0,$'\n
711: beq 1f
712: jsr pc,stat1
713: br .+2
714: br stnext
715: 1:
716: rts pc
717:
718: forer:
719: jsr r5,error; <for/next imbalance\n\0>; .even
720:
721: stnext:
722: mov forp,r1
723: beq forer
724: mov -(r1),r0
725: mov -(r0),forp
726: mov $_ptra,(r4)+
727: mov $_asgn,(r0)+
728: cmp (r0)+,(r0)+
729: mov r0,(r4)+
730: mov r4,(r1)+
731: rts pc
732:
733: stoctl:
734: jsr pc,expr
735: mov $_octal,(r4)+
736: rts pc
737:
738: .if scope / for plotting
739: stdisp:
740: mov $_sdisp,(r4)+
741: jsr pc,stprint
742: mov $_fdisp,(r4)+
743: rts pc
744: stdraw:
745: jsr pc,expr
746: dec r3
747: jsr pc,expr
748: cmp r0,$'\n
749: bne 1f
750: movf $one,r0
751: jsr pc,const
752: br 2f
753: 1:
754: dec r3
755: jsr pc,expr
756: 2:
757: mov $_draw,(r4)+
758: rts pc
759:
760: steras:
761: mov $_erase,(r4)+
762: rts pc
763: .endif
764:
765: /
766: /
767:
768: / bas2 -- expression evaluation
769:
770: expr:
771: jsr pc,e1
772: jsr pc,rval
773: rts pc
774:
775: / assignment right to left
776: e1:
777: jsr pc,e2
778: cmp r0,$'=
779: beq 1f
780: jsr pc,rval
781: rts pc
782: 1:
783: tst val
784: beq 1f
785: jsr pc,serror
786: 1:
787: jsr pc,e1
788: jsr r5,op; _asgn
789: rts pc
790:
791: / and or left to right
792: e2:
793: jsr pc,e3
794: 1:
795: cmp r0,$'&
796: beq 2f
797: cmp r0,$'|
798: beq 3f
799: rts pc
800: 2:
801: jsr pc,rval
802: jsr pc,e3
803: jsr r5,op; _and
804: br 1b
805: 3:
806: jsr pc,rval
807: jsr pc,e3
808: jsr r5,op; _or
809: br 1b
810:
811: / relation extended relation
812: e3:
813: jsr pc,e4
814: jsr pc,e3a
815: rts pc
816: clr -(sp)
817: 1:
818: mov r0,-(sp)
819: jsr pc,e4
820: jsr pc,rval
821: mov (sp)+,(r4)+
822: jsr pc,e3a
823: br 1f
824: mov $_extr,(r4)+
825: inc (sp)
826: br 1b
827: 1:
828: dec (sp)
829: blt 1f
830: mov $_and,(r4)+
831: br 1b
832: 1:
833: tst (sp)+
834: rts pc
835:
836: / relational operator
837: e3a:
838: cmp r0,$'>
839: beq 1f
840: cmp r0,$'<
841: beq 2f
842: cmp r0,$'=
843: beq 3f
844: rts pc
845: 1:
846: mov $_great,r0
847: cmpb (r3),$'=
848: bne 1f
849: inc r3
850: mov $_greateq,r0
851: br 1f
852: 2:
853: cmpb (r3),$'>
854: bne 2f
855: inc r3
856: mov $_noteq,r0
857: br 1f
858: 2:
859: mov $_less,r0
860: cmpb (r3),$'=
861: bne 1f
862: inc r3
863: mov $_lesseq,r0
864: br 1f
865: 3:
866: cmpb (r3),$'=
867: beq 2f
868: rts pc
869: 2:
870: inc r3
871: mov $_equal,r0
872: 1:
873: jsr pc,rval
874: add $2,(sp)
875: rts pc
876:
877: / add subtract
878: e4:
879: jsr pc,e5
880: 1:
881: cmp r0,$'+
882: beq 2f
883: cmp r0,$'-
884: beq 3f
885: rts pc
886: 2:
887: jsr pc,rval
888: jsr pc,e5
889: jsr r5,op; _add
890: br 1b
891: 3:
892: jsr pc,rval
893: jsr pc,e5
894: jsr r5,op; _sub
895: br 1b
896:
897: / multiply divide
898: e5:
899: jsr pc,e6
900: 1:
901: cmp r0,$'*
902: beq 2f
903: cmp r0,$'/
904: beq 3f
905: rts pc
906: 2:
907: jsr pc,rval
908: jsr pc,e6
909: jsr r5,op; _mult
910: br 1b
911: 3:
912: jsr pc,rval
913: jsr pc,e6
914: jsr r5,op; _divid
915: br 1b
916:
917: / exponential
918: e6:
919: jsr pc,e6a
920: 1:
921: cmp r0,$'^
922: beq 2f
923: rts pc
924: 2:
925: jsr pc,rval
926: jsr pc,e6a
927: jsr r5,op; _expon
928: br 1b
929:
930: e6a:
931: movb (r3)+,r0
932: jsr pc,skip
933: cmp r0,$'_
934: bne 1f
935: jsr pc,e6a
936: jsr r5,op; _neg
937: rts pc
938: 1:
939: dec r3
940: jsr pc,e7
941: rts pc
942: / end of unary -
943:
944: / primary
945: e7:
946: movb (r3)+,r0
947: jsr pc,skip
948: mov $1,val
949: cmp r0,$'(
950: bne 1f
951: jsr pc,e1
952: cmp r0,$')
953: bne 2f
954: movb (r3)+,r0
955: br e7a
956: 2:
957: jsr pc,serror
958: 1:
959: cmp r0,$'.
960: beq 2f
961: jsr pc,digit
962: br 1f
963: 2:
964: dec r3
965: jsr r5,atof; nextc
966: jsr pc,const
967: br e7a
968: 1:
969: jsr pc,alpha
970: br jim
971: jsr pc,name
972: br 2f
973: jsr r5,error; <reserved name\n\0>; .even
974: 2:
975: / try to fix illegal symbol bug:
976: cmp r4,$eexline
977: bhis jim
978:
979: mov $_lval,(r4)+
980: mov r1,(r4)+
981: clr val
982: br e7a
983: jim:
984: jsr pc,serror
985:
986: e7a:
987: jsr pc,skip
988: cmp r0,$'(
989: bne 1f
990: jsr pc,rval
991: jsr r5,rlist; _funct
992: cmp r0,$')
993: bne jim
994: movb (r3)+,r0
995: br e7a
996: 1:
997: cmp r0,$'[
998: bne 1f
999: tst val
1000: beq 2f
1001: jsr pc,serror
1002: 2:
1003: jsr r5,rlist; _subscr
1004: clr val
1005: cmp r0,$']
1006: bne jim
1007: movb (r3)+,r0
1008: br e7a
1009: 1:
1010: rts pc
1011:
1012: op:
1013: jsr pc,rval
1014: mov (r5)+,(r4)+
1015: rts r5
1016:
1017: rval:
1018: tst val
1019: bne 1f
1020: mov $_rval,(r4)+
1021: inc val
1022: 1:
1023: rts pc
1024:
1025: const:
1026: mov r0,-(sp)
1027: movf r1,-(sp)
1028: tstf r0
1029: cfcc
1030: bne 1f
1031: mov $_con0,(r4)+
1032: br 2f
1033: 1:
1034: cmpf $one,r0
1035: cfcc
1036: bne 1f
1037: mov $_con1,(r4)+
1038: br 2f
1039: 1:
1040: movfi r0,r0
1041: movif r0,r1
1042: cmpf r0,r1
1043: cfcc
1044: bne 1f
1045: mov $_intcon,(r4)+
1046: mov r0,(r4)+
1047: br 2f
1048: 1:
1049: mov $_const,(r4)+
1050: movf r0,(r4)+
1051: 2:
1052: movf (sp)+,r1
1053: mov (sp)+,r0
1054: rts pc
1055:
1056: rlist:
1057: clr -(sp)
1058: cmpb (r3),$')
1059: bne 1f
1060: movb (r3)+,r0
1061: br 2f
1062: 1:
1063: inc (sp)
1064: jsr pc,expr
1065: cmp r0,$',
1066: beq 1b
1067: 2:
1068: mov (r5)+,(r4)+
1069: mov (sp)+,(r4)+
1070: rts r5
1071:
1072: /
1073: /
1074: / bas3 -- execution
1075:
1076: execute:
1077: mov $estack,r3
1078: mov r3,sstack
1079: jmp *(r4)+
1080:
1081: _if:
1082: tstf (r3)+
1083: cfcc
1084: beq _tra
1085: tst (r4)+
1086: jmp *(r4)+
1087:
1088: _ptra:
1089: mov sstack,r3
1090:
1091: _tra:
1092: mov (r4)+,r4
1093: jmp *(r4)+
1094:
1095: _funct:
1096: mov r4,-(r3)
1097: mov sstack,-(r3)
1098: mov r3,sstack
1099: inc sublev
1100: clr r0
1101: jsr pc,arg
1102: tstf r0
1103: cfcc
1104: bge 1f
1105: jmp builtin
1106:
1107: _goto:
1108: movf (r3),r0
1109: 1:
1110: movfi r0,-(sp)
1111: jsr pc,compile
1112: mov (sp)+,r0
1113: jsr pc,getloc
1114: mov 4(r1),r4
1115: jmp *(r4)+
1116:
1117: _run:
1118: jsr pc,isymtab
1119: mov randx,r0
1120: jsr pc,srand
1121: jsr pc,compile
1122: mov $space,r4
1123: jmp *(r4)+
1124:
1125: _save: / _save is a _list to the file named on the bas command
1126: sys creat; argname; 666
1127: bes 1f
1128: mov r0,prfile
1129: br 2f
1130: 1:
1131: mov 1f,r0
1132: mov $1,prfile
1133: jsr pc,print
1134: br _done
1135: 1: <Cannot create b.out\n\0>; .even
1136:
1137: _list:
1138: mov $1,prfile
1139: 2:
1140: movf (r3)+,r0
1141: movfi r0,-(sp)
1142: / probably vistigal?? mov r3,0f
1143: movf (r3),r0
1144: movfi r0,lineno
1145: 1:
1146: jsr pc,nextlin
1147: br 1f
1148: cmp lineno,(sp)
1149: bhi 1f
1150: mov $line,r0
1151: jsr pc,print
1152: inc lineno
1153: br 1b
1154: 1:
1155: cmp $1,prfile
1156: beq 1f
1157: mov prfile,r0
1158: sys close
1159: mov $1,prfile
1160: 1:
1161: tst (sp)+
1162: jmp *(r4)+
1163:
1164: _done:
1165: sys unlink; tmpf
1166: sys exit
1167:
1168: .if scope / for plotting
1169: _sdisp:
1170: mov $2,r0
1171: jsr pc,drput
1172: jsr pc,drxy
1173: mov $1,r0
1174: jsr pc,drput
1175: mov $3,r0
1176: jsr pc,drput
1177: incb drflg
1178: jmp *(r4)+
1179:
1180: _fdisp:
1181: clr r0
1182: jsr pc,drput
1183: clrb drflg
1184: jmp *(r4)+
1185:
1186: _draw:
1187: movf (r3)+,r2
1188: movf (r3)+,r1
1189: movf (r3)+,r0
1190: jsr r5,draw
1191: jmp *(r4)+
1192:
1193: _erase:
1194: mov $1,r0
1195: jsr pc,drput
1196: mov $1,r0
1197: jsr pc,drput
1198: jmp *(r4)+
1199: .endif
1200:
1201: _print:
1202: movf (r3)+,r0
1203: jsr r5,ftoa; xputc
1204: jmp *(r4)+
1205:
1206: _octal:
1207: movf (r3)+,r0
1208: jsr r5,ftoo; xputc
1209: jmp *(r4)+
1210:
1211: _nline:
1212: mov $'\n,r0
1213: jsr r5,xputc
1214: jmp *(r4)+
1215:
1216: _ascii:
1217: movb (r4)+,r0
1218: cmp r0,$'"
1219: beq 1f
1220: jsr r5,xputc
1221: br _ascii
1222: 1:
1223: inc r4
1224: bic $1,r4
1225: jmp *(r4)+
1226:
1227: _line:
1228: mov sstack,r3
1229: cmp r3,$stack+20.
1230: bhi 1f
1231: jsr r5,error
1232: <out of space\n\0>; .even
1233: 1:
1234: mov (r4)+,lineno
1235: jmp *(r4)+
1236:
1237: _or:
1238: tstf (r3)+
1239: cfcc
1240: bne stone
1241: tstf (r3)
1242: cfcc
1243: bne stone
1244: br stzero
1245:
1246: _and:
1247: tstf (r3)+
1248: cfcc
1249: beq stzero
1250: tstf (r3)
1251: cfcc
1252: beq stzero
1253: br stone
1254:
1255: _great:
1256: jsr pc,bool
1257: bgt stone
1258: br stzero
1259:
1260: _greateq:
1261: jsr pc,bool
1262: bge stone
1263: br stzero
1264:
1265: _less:
1266: jsr pc,bool
1267: blt stone
1268: br stzero
1269:
1270: _lesseq:
1271: jsr pc,bool
1272: ble stone
1273: br stzero
1274:
1275: _noteq:
1276: jsr pc,bool
1277: bne stone
1278: br stzero
1279:
1280: _equal:
1281: jsr pc,bool
1282: beq stone
1283:
1284: stzero:
1285: clrf r0
1286: br advanc
1287:
1288: stone:
1289: movf $one,r0
1290: br advanc
1291:
1292: _extr:
1293: movf r1,r0 / dup for _and in extended rel
1294: br subadv
1295:
1296: _asgn:
1297: movf (r3)+,r0
1298: mov (r3)+,r0
1299: add $4,r0
1300: bis $1,(r0)+
1301: movf r0,(r0)
1302: br subadv
1303:
1304: _add:
1305: movf (r3)+,r0
1306: addf (r3),r0
1307: br advanc
1308:
1309: _sub:
1310: movf (r3)+,r0
1311: negf r0
1312: addf (r3),r0
1313: br advanc
1314:
1315: _mult:
1316: movf (r3)+,r0
1317: mulf (r3),r0
1318: br advanc
1319:
1320: _divid:
1321: movf (r3)+,r1
1322: movf (r3),r0
1323: divf r1,r0
1324: br advanc
1325:
1326: _expon:
1327: movf (r3)+,fr1
1328: movf (r3),fr0
1329: jsr pc,pow
1330: bec advanc
1331: jsr r5,error
1332: <Bad exponentiation\n\0>; .even
1333:
1334: _neg: / unary -
1335: negf r0
1336: jbr advanc
1337: / end of _neg
1338:
1339: _intcon:
1340: movif (r4)+,r0
1341: jbr subadv
1342:
1343: _con0:
1344: clrf r0
1345: jbr subadv
1346:
1347: _con1:
1348: movf $one,r0
1349: jbr subadv
1350:
1351: _const:
1352: movf (r4)+,r0
1353:
1354: subadv:
1355: movf r0,-(r3)
1356: jmp *(r4)+
1357:
1358: advanc:
1359: movf r0,(r3)
1360: jmp *(r4)+
1361:
1362: _rval:
1363: jsr pc,getlv
1364: br subadv
1365:
1366: _fori:
1367: jsr pc,getlv
1368: addf $one,r0
1369: movf r0,(r0)
1370: br subadv
1371:
1372: _lval:
1373: mov (r4)+,-(r3)
1374: jmp *(r4)+
1375:
1376: _dup:
1377: movf (r3),r0
1378: br subadv
1379:
1380: _return:
1381: dec sublev
1382: bge 1f
1383: jsr r5,error
1384: <bad return\n\0>; .even
1385: 1:
1386: movf (r3),r0
1387: mov sstack,r3
1388: mov (r3)+,sstack
1389: mov (r3)+,r4
1390: mov (r4)+,r0
1391: 1:
1392: dec r0
1393: blt advanc
1394: add $8,r3
1395: br 1b
1396:
1397: _subscr:
1398: mov (r4),r1
1399: mpy $8.,r1
1400: add r1,r3
1401: mov r3,-(sp)
1402: mov (r3),r0
1403: mov (r4)+,-(sp)
1404: 1:
1405: dec (sp)
1406: blt 1f
1407: movf -(r3),r0
1408: movfi r0,r2
1409: com r2
1410: blt 2f
1411: jsr r5,error
1412: <subscript out of range\n\0>; .even
1413: 2:
1414: mov r0,r1
1415: mov 4(r0),r0
1416: bic $1,r0
1417: 2:
1418: beq 2f
1419: cmp r2,(r0)+
1420: bne 3f
1421: tst -(r0)
1422: br 1b
1423: 3:
1424: mov (r0),r0
1425: br 2b
1426: 2:
1427: mov $symtab,r0
1428: 2:
1429: tst (r0)
1430: beq 2f
1431: add $14.,r0
1432: br 2b
1433: 2:
1434: cmp r0,$esymtab-28.
1435: blo 2f
1436: jsr r5,error
1437: <out of symbol space\n\0>; .even
1438: 2:
1439: cmp (r1)+,(r1)+
1440: mov r0,-(sp)
1441: clr 14.(r0)
1442: mov r2,(r0)+
1443: mov (r1),r2
1444: bic $1,r2
1445: mov r2,(r0)+
1446: clr (r0)+
1447: mov (sp)+,r0
1448: bic $!1,(r1)
1449: bis r0,(r1)
1450: br 1b
1451: 1:
1452: tst (sp)+
1453: mov (sp)+,r3
1454: mov r0,(r3)
1455: jmp *(r4)+
1456:
1457: bool:
1458: movf (r3)+,r1 / r1 used in extended rel
1459: cmpf (r3),r1
1460: cfcc
1461: rts pc
1462:
1463: getlv:
1464: mov (r3)+,r0
1465: add $4,r0
1466: bit $1,(r0)+
1467: bne 1f
1468: jsr r5,error;<used before set\n\0>; .even
1469: 1:
1470: movf (r0),r0
1471: rts pc
1472:
1473: /
1474: /
1475:
1476: / bas4 -- builtin functions
1477:
1478: builtin:
1479: dec sublev
1480: mov (r3)+,sstack
1481: mov (r3)+,r4
1482: movfi r0,r0
1483: com r0
1484: asl r0
1485: cmp r0,$2f-1f
1486: bhis 2f
1487: jmp *1f(r0)
1488: 1:
1489: fnarg
1490: fnexp
1491: fnlog
1492: fnsin
1493: fncos
1494: fnatan
1495: fnrand
1496: fnexpr
1497: fnint
1498: fnabs
1499: fnsqr
1500: 2:
1501: mov $-1,r0
1502: jsr pc,getloc / label not found diagnostic
1503:
1504: fnarg:
1505: cmp (r4)+,$1
1506: bne narg
1507: movf (r3),r0
1508: movfi r0,r0
1509: jsr pc,arg
1510: br fnadvanc
1511:
1512: fnexp:
1513: jsr r5,fnfn; exp
1514: br fnadvanc
1515:
1516: fnlog:
1517: jsr r5,fnfn; log
1518: bec fnadvanc
1519: jsr r5,error
1520: <Bad log\n\0>; .even
1521:
1522: fnsin:
1523: jsr r5,fnfn; sin
1524: bec fnadvanc
1525: jsr r5,error
1526: <Bad sine\n\0>; .even
1527:
1528: fncos:
1529: jsr r5,fnfn; cos
1530: bec fnadvanc
1531: jsr r5,error
1532: <Bad cosine\n\0>; .even
1533:
1534: fnatan:
1535: jsr r5,fnfn; atan
1536: bec fnadvanc
1537: jsr r5,error
1538: <Bad arctangent\n\0>; .even
1539:
1540: fnrand:
1541: tst (r4)+
1542: bne narg
1543: jsr pc,rand
1544: movif r0,r0
1545: divf $44000,r0
1546: jmp advanc
1547:
1548: fnexpr:
1549: tst (r4)+
1550: bne narg
1551: mov r3,-(sp)
1552: mov r4,-(sp)
1553: jsr pc,rdline
1554: mov exprloc,r4
1555: mov $line,r3
1556: jsr pc,expr
1557: mov $_tra,(r4)+
1558: mov (sp)+,(r4)+
1559: mov (sp)+,r3
1560: mov exprloc,r4
1561: add $8,r3
1562: jmp *(r4)+
1563:
1564: fnint:
1565: cmp (r4)+,$1
1566: bne narg
1567: movf (r3),r0
1568: modf $one,r0
1569: movf r1,r0
1570: br fnadvanc
1571:
1572: fnabs:
1573: cmp (r4)+,$1
1574: bne narg
1575: movf (r3),r0
1576: cfcc
1577: bge fnadvanc
1578: negf r0
1579: br fnadvanc
1580:
1581: fnsqr:
1582: jsr r5,fnfn; sqrt
1583: bec fnadvanc
1584: jsr r5,error
1585: <Bad square root arg\n\0>; .even
1586: fnadvanc:
1587: add $8,r3
1588: jmp advanc
1589:
1590: narg:
1591: jsr r5,error
1592: <arg count\n\0>; .even
1593:
1594: arg:
1595: tst sublev
1596: beq 1f
1597: mov sstack,r1
1598: sub *2(r1),r0
1599: bhi 1f
1600: 2:
1601: inc r0
1602: bgt 2f
1603: add $8,r1
1604: br 2b
1605: 2:
1606: movf 4(r1),r0
1607: rts pc
1608: 1:
1609: jsr r5,error
1610: <bad arg\n\0>; .even
1611:
1612: fnfn:
1613: cmp (r4)+,$1
1614: bne narg
1615: movf (r3),r0
1616: jsr pc,*(r5)+
1617: rts r5
1618:
1619: .if scope / for plotting
1620: draw:
1621: tstf r2
1622: cfcc
1623: bne 1f
1624: movf r0,drx
1625: movf r1,dry
1626: rts r5
1627: 1:
1628: movf r0,-(sp)
1629: movf r1,-(sp)
1630: mov $3,r0
1631: jsr pc,drput
1632: jsr pc,drxy
1633: movf (sp)+,r0
1634: movf r0,dry
1635: movf (sp)+,r0
1636: movf r0,drx
1637: jsr pc,drxy
1638: rts r5
1639:
1640: drxy:
1641: movf drx,r0
1642: jsr pc,drco
1643: movf dry,r0
1644:
1645: drco:
1646: tstf r0
1647: cfcc
1648: bge 1f
1649: clrf r0
1650: 1:
1651: cmpf $40200,r0 / 1.0
1652: cfcc
1653: bgt 1f
1654: movf $40177,r0 / 1.0-eps
1655: 1:
1656: subf $40000,r0 / .5
1657: mulf $43200,r0 / 4096
1658: movfi r0,r0
1659: mov r0,-(sp)
1660: jsr pc,drput
1661: mov (sp)+,r0
1662: swab r0
1663:
1664: drput:
1665: movb r0,ch
1666: mov drfo,r0
1667: bne 1f
1668: sys open; vt; 1
1669: bec 2f
1670: 4
1671: 2:
1672: mov r0,drfo
1673: 1:
1674: sys write; ch; 1
1675: rts pc
1676:
1677: .endif
1678: / bas4 -- old library routines
1679: atoi:
1680: clr r1
1681: jsr r5,nextc
1682: clr -(sp)
1683: cmp r0,$'-
1684: bne 2f
1685: inc (sp)
1686: 1:
1687: jsr r5,nextc
1688: 2:
1689: sub $'0,r0
1690: cmp r0,$9
1691: bhi 1f
1692: mpy $10.,r1
1693: bcs 3f / >32k
1694: add r0,r1
1695: bcs 3f / >32k
1696: br 1b
1697: 1:
1698: add $'0,r0
1699: tst (sp)+
1700: beq 1f
1701: neg r1
1702: 1:
1703: rts r5
1704: 3:
1705: tst (sp)+
1706: mov $'.,r0 / faking overflow
1707: br 1b
1708:
1709: ldfps = 170100^tst
1710: stfps = 170200^tst
1711: atof:
1712: stfps -(sp)
1713: ldfps $200
1714: movf fr1,-(sp)
1715: mov r1,-(sp)
1716: mov r2,-(sp)
1717: clr -(sp)
1718: clrf fr0
1719: clr r2
1720: jsr r5,*(r5)
1721: cmpb r0,$'-
1722: bne 2f
1723: inc (sp)
1724: 1:
1725: jsr r5,*(r5)
1726: 2:
1727: sub $'0,r0
1728: cmp r0,$9.
1729: bhi 2f
1730: jsr pc,dig
1731: br 1b
1732: inc r2
1733: br 1b
1734: 2:
1735: cmpb r0,$'.-'0
1736: bne 2f
1737: 1:
1738: jsr r5,*(r5)
1739: sub $'0,r0
1740: cmp r0,$9.
1741: bhi 2f
1742: jsr pc,dig
1743: dec r2
1744: br 1b
1745: 2:
1746: cmpb r0,$'e-'0
1747: bne 1f
1748: jsr r5,atoi
1749: sub $'0,r0
1750: add r1,r2
1751: 1:
1752: movf $one,fr1
1753: mov r2,-(sp)
1754: beq 2f
1755: bgt 1f
1756: neg r2
1757: 1:
1758: cmp r2,$38.
1759: blos 1f
1760: clrf fr0
1761: tst (sp)+
1762: bmi out
1763: movf $huge,fr0
1764: br out
1765: 1:
1766: mulf $ten,fr1
1767: sob r2,1b
1768: 2:
1769: tst (sp)+
1770: bge 1f
1771: divf fr1,fr0
1772: br 2f
1773: 1:
1774: mulf fr1,fr0
1775: cfcc
1776: bvc 2f
1777: movf $huge,fr0
1778: 2:
1779: out:
1780: tst (sp)+
1781: beq 1f
1782: negf fr0
1783: 1:
1784: add $'0,r0
1785: mov (sp)+,r2
1786: mov (sp)+,r1
1787: movf (sp)+,fr1
1788: ldfps (sp)+
1789: tst (r5)+
1790: rts r5
1791:
1792: dig:
1793: cmpf $big,fr0
1794: cfcc
1795: blt 1f
1796: mulf $ten,fr0
1797: movif r0,fr1
1798: addf fr1,fr0
1799: rts pc
1800: 1:
1801: add $2,(sp)
1802: rts pc
1803:
1804: one = 40200
1805: ten = 41040
1806: big = 56200
1807: huge = 77777
1808:
1809: .globl _ndigits
1810: .globl ecvt
1811: .globl fcvt
1812:
1813: ftoa:
1814: jsr pc,ecvt
1815: mov r0,bufptr
1816: tstb r1
1817: beq 1f
1818: mov $'-,r0
1819: jsr r5,*(r5)
1820: 1:
1821: cmp r3,$-2
1822: blt econ
1823: cmp r2,$-5
1824: ble econ
1825: cmp r2,$6
1826: bgt econ
1827: jsr pc,cout
1828: tst (r5)+
1829: rts r5
1830:
1831: econ:
1832: mov r2,-(sp)
1833: mov $1,r2
1834: jsr pc,cout
1835: mov $'e,r0
1836: jsr r5,*(r5)
1837: mov (sp)+,r0
1838: dec r0
1839: jmp itoa
1840:
1841: cout:
1842: mov bufptr,r1
1843: add _ndigits,r1
1844: mov r2,-(sp)
1845: add bufptr,r2
1846: 1:
1847: cmp r1,r2
1848: blos 1f
1849: cmpb -(r1),$'0
1850: beq 1b
1851: inc r1
1852: 1:
1853: mov (sp)+,r2
1854: bge 2f
1855: mov $'.,r0
1856: jsr r5,*(r5)
1857: 1:
1858: mov $'0,r0
1859: jsr r5,*(r5)
1860: inc r2
1861: blt 1b
1862: dec r2
1863: 2:
1864: mov r2,-(sp)
1865: mov bufptr,r2
1866: 1:
1867: cmp r2,r1
1868: bhis 1f
1869: tst (sp)
1870: bne 2f
1871: mov $'.,r0
1872: jsr r5,*(r5)
1873: 2:
1874: dec (sp)
1875: movb (r2)+,r0
1876: jsr r5,*(r5)
1877: br 1b
1878: 1:
1879: tst (sp)+
1880: rts pc
1881:
1882: .bss
1883: bufptr: .=.+2
1884: .text
1885:
1886: ftoo:
1887: stfps -(sp)
1888: ldfps $200
1889: mov r1,-(sp)
1890: mov r2,-(sp)
1891: mov $buf,r1
1892: movf fr0,(r1)+
1893: mov $buf,r2
1894: br 2f
1895: 1:
1896: cmp r2,r1
1897: bhis 1f
1898: mov $';,r0
1899: jsr r5,*(r5)
1900: 2:
1901: mov (r2)+,r0
1902: jsr pc,oct
1903: br 1b
1904: 1:
1905: mov $'\n,r0
1906: jsr pc,*(r5)+
1907: ldfps (sp)+
1908: rts r5
1909:
1910: oct:
1911: mov r0,x+2
1912: setl
1913: movif x,fr0
1914: mulf $small,fr0
1915: seti
1916: mov $6.,-(sp)
1917: 1:
1918: modf $eight,fr0
1919: movfi fr1,r0
1920: add $'0,r0
1921: jsr r5,*(r5)
1922: dec (sp)
1923: bne 1b
1924: tst (sp)+
1925: rts pc
1926:
1927: eight = 41000
1928: small = 33600
1929: .bss
1930: buf: .=.+8
1931: x: .=.+4
1932: .text
1933:
1934: itoa:
1935: mov r1,-(sp)
1936: mov r0,r1
1937: bge 1f
1938: neg r1
1939: mov $'-,r0
1940: jsr r5,*(r5)
1941: 1:
1942: jsr pc,1f
1943: mov (sp)+,r1
1944: tst (r5)+
1945: rts r5
1946:
1947: 1:
1948: clr r0
1949: dvd $10.,r0
1950: mov r1,-(sp)
1951: mov r0,r1
1952: beq 1f
1953: jsr pc,1b
1954: 1:
1955: mov (sp)+,r0
1956: add $'0,r0
1957: jsr r5,*(r5)
1958: rts pc
1959: / bas -- BASIC
1960: / new command "dump" which dumps symbol table values by name
1961: / R. Haight
1962: /
1963: _dump:
1964: mov r4,-(sp)
1965: mov $11.*14.+symtab-14.,r4
1966: 1:
1967: add $14.,r4
1968: tst (r4)
1969: beq 1f
1970: bit $1,4(r4)
1971: beq 1b
1972: jsr pc,dmp1
1973: mov $'=,r0
1974: jsr r5,xputc
1975: movf 6(r4),r0
1976: jsr r5,ftoa; xputc
1977: mov $'\n,r0
1978: jsr r5,xputc
1979: br 1b
1980: 1:
1981: mov (sp)+,r4
1982: jmp *(r4)+
1983:
1984: dmp1:
1985: tst (r4)
1986: blt 1f
1987: mov (r4),nameb
1988: mov 2(r4),nameb+2
1989: mov $nameb,r0
1990: jsr pc,print
1991: rts pc
1992: 1:
1993: mov r4,-(sp)
1994: mov $symtab-14.,r4
1995: 1:
1996: add $14.,r4
1997: tst (r4)
1998: beq 1f
1999: mov 4(r4),r0
2000: bic $1,r0
2001: 2:
2002: beq 1b
2003: cmp r0,(sp)
2004: beq 2f
2005: mov 2(r0),r0
2006: br 2b
2007: 2:
2008: jsr pc,dmp1
2009: mov $'[,r0
2010: jsr r5,xputc
2011: mov *(sp),r0
2012: com r0
2013: movif r0,r0
2014: jsr r5,ftoa; xputc
2015: mov $'],r0
2016: jsr r5,xputc
2017: 1:
2018: mov (sp)+,r4
2019: rts pc
2020: /
2021: /
2022:
2023: / basx -- data
2024:
2025: one = 40200
2026:
2027: .data
2028:
2029: _ndigits:10.
2030: tmpf: </tmp/btma\0>
2031: argname: <b.out\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0>
2032: vt: </dev/vt0\0>
2033: .even
2034: pname: <\0\0\0\0\0\0>
2035: .even
2036:
2037: resnam:
2038: <list>
2039: <done>
2040: <q\0\0\0>
2041: <run\0>
2042: <prin>
2043: <prom> / prompt is like print without \n (cr)
2044: <if\0\0>
2045: <goto>
2046: <retu>
2047: <for\0>
2048: <next>
2049: <octa>
2050: <save>
2051: <dump>
2052: <fi\0\0>
2053: <else>
2054: <edit>
2055: <comm> / comment
2056: .if scope / for plotting
2057: <disp>
2058: <draw>
2059: <eras>
2060: .endif
2061: eresnam:
2062:
2063: symtnam:
2064: <arg\0>
2065: <exp\0>
2066: <log\0>
2067: <sin\0>
2068: <cos\0>
2069: <atn\0>
2070: <rnd\0>
2071: <expr>
2072: <int\0>
2073: <abs\0>
2074: <sqr\0>
2075: esymtnam:
2076:
2077: / indirect sys calls:
2078: sysseek: sys seek; seekx: 0; 0
2079: syswrit: sys write; wbuf: 0; wlen: 0
2080: sysread: sys read; rbuf: 0; rlen: 0
2081: sysopen: sys open; ofile: 0 ; omode: 0
2082: syscreat: sys creat; cfile: 0; cmode: 0
2083: .bss
2084: drx: .=.+8
2085: dry: .=.+8
2086: drfo: .=.+2
2087: ch: .=.+2
2088: drflg: .=.+2
2089: randx: .=.+2
2090: gsp: .=.+2
2091: forp: .=.+2
2092: exprloc:.=.+2
2093: sstack: .=.+2
2094: sublev: .=.+2
2095: val: .=.+2
2096: splimit: .=.+2 / statement size limit
2097: iflev: .=.+20. / nested if compile stack: 10 deep
2098: ifp: .=.+2 / current pointer to iflev
2099: line: .=.+100.
2100: prfile: .=.+2 / output from _list or _save
2101: tfi: .=.+2 / input file
2102: func: .=.+2 / alternate functions, eg: _list or _save
2103: seeka: .=.+2 / seek offset 1
2104: lineno: .=.+2
2105: nameb: .=.+4
2106: tfo: .=.+2
2107: symtab: .=.+2800.; esymtab: / symbol=7wds; symtab for 200
2108: space: .=.+8000.; espace: / code space
2109: exline: .=.+1000.; eexline: / line execute space
2110: lintab: .=.+1800.; elintab: / 3wds per statement = 300 stmts
2111: stack: .=.+800.; estack:
2112:
2113: iobuf: fi: .=.+518. / should be aquired??