Research V2 release
[unix-history] / cmd / bas0.s
CommitLineData
90ac6589
KT
1/ bas0 -- basic
2
3.globl main
4.globl sin, cos, log, exp, atan, pow
5.globl atoi, atof, ftoa, ftoo
6.globl rand, srand
7
8one = 40200
9
10main:
11 setd
12 sys time
13 mov r1,r0
14 mov r0,randx
15 jsr pc,srand
16 sys intr; intrup
17 mov sp,gsp
18 clr seeka
19 mov $'a,r1
201:
21 movb r1,tmpf+8
22 sys stat; tmpf; line
23 bes 1f
24 inc r1
25 cmp r1,$'z
26 blos 1b
27 br 2f
281:
29 sys creat; tmpf; 14
30 bes 2f
31 mov r0,tfo
32 sys open; tmpf; 0
33 bec 1f
342:
35 mov $3f,r0
36 jsr pc,print
37 sys exit
383:
39 <Tmp file?\n\0>; .even
401:
41 mov r0,tfi
42 jsr pc,isymtab
43 cmp (sp),$2
44 blt loop
45 mov 4(sp),0f
46 sys open; 0:..; 0
47 bes 1f
48 mov r0,fi
49 br loop
501:
51 mov $1f,r0
52 jsr pc,print
53 br loop
541:
55 <Cannot open file\n\0>; .even
56
57intrup:
58 mov $'\n,r0
59 jsr r5,putc
60 jsr r5,error
61 <ready\n\0>; .even
62
63loop:
64 mov gsp,sp
65 clr lineno
66 jsr pc,rdline
67 mov $line,r3
681:
69 movb (r3),r0
70 jsr pc,digit
71 br 1f
72 jsr r5,atoi; nextc
73 cmp r0,$' /
74 bne 1f
75 mov $lintab,r3
76 mov r1,r0
77 bgt 2f
78 jsr pc,serror
792:
80 cmp r0,(r3)
81 beq 2f
82 tst (r3)
83 beq 2f
84 add $6,r3
85 br 2b
862:
87 cmp r3,$elintab-12.
88 blo 2f
89 jsr r5,error
90 <too many lines\n\0>; .even
912:
92 mov r0,(r3)+
93 mov seeka,(r3)+
94 mov tfo,r0
95 sys seek; seeka:..; 0
96 mov $line,r0
97 jsr pc,size
98 inc r0
99 add r0,seeka
100 mov r0,0f
101 mov tfo,r0
102 sys write; line; 0:..
103 br loop
1041:
105 mov $line,r3
106 jsr pc,singstat
107 br loop
108
109nextc:
110 movb (r3)+,r0
111 rts r5
112
113size:
114 clr -(sp)
1151:
116 inc (sp)
117 cmpb (r0)+,$'\n
118 bne 1b
119 mov (sp)+,r0
120 rts pc
121
122rdline:
123 mov $line,0f
1241:
125 mov fi,r0
126 sys read; 0:..; 1
127 bes 2f
128 tst r0
129 beq 2f
130 cmp 0b,$line+99.
131 bhis 2f / bad check, but a check
132 movb *0b,r0
133 inc 0b
134 cmp r0,$'\n
135 bne 1b
136 clrb *0b
137 rts pc
1382:
139 mov fi,r0
140 beq 1f
141 sys close
142 clr fi
143 br 1b
1441:
145 jmp _done
146
147error:
148 tst fi
149 beq 1f
150 sys close
151 clr fi
1521:
153 tst lineno
154 beq 1f
155 jsr pc,nextlin
156 br 1f
157 mov $line,r0
158 jsr pc,print
1591:
160 mov r5,r0
161 jsr pc,print
162 jmp loop
163
164serror:
165 dec r3
166 tst fi
167 beq 1f
168 sys close
169 clr fi
1701:
171 mov $line,r1
1721:
173 cmp r1,r3
174 bne 2f
175 mov $'_,r0
176 jsr r5,putc
177 mov $10,r0
178 jsr r5,putc
1792:
180 movb (r1),r0
181 jsr r5,putc
182 cmpb (r1)+,$'\n
183 bne 1b
184 jmp loop
185
186print:
187 mov r0,0f
188 jsr pc,size
189 mov r0,0f+2
190 mov $1,r0
191 sys write; 0:..; ..
192 rts pc
193
194digit:
195 cmp r0,$'0
196 blo 1f
197 cmp r0,$'9
198 bhi 1f
199 add $2,(sp)
2001:
201 rts pc
202
203alpha:
204 cmp r0,$'a
205 blo 1f
206 cmp r0,$'z
207 bhi 1f
208 add $2,(sp)
2091:
210 rts pc
211
212name:
213 mov $nameb,r1
214 clr (r1)
215 clr 2(r1)
2161:
217 cmp r1,$nameb+4
218 bhis 2f
219 movb r0,(r1)+
2202:
221 movb (r3)+,r0
222 jsr pc,alpha
223 br 2f
224 br 1b
2252:
226 jsr pc,digit
227 br 2f
228 br 1b
2292:
230 mov $resnam,r1
2311:
232 cmp nameb,(r1)
233 bne 2f
234 cmp nameb+2,2(r1)
235 bne 2f
236 sub $resnam,r1
237 asr r1
238 add $2,(sp)
239 rts pc
2402:
241 add $4,r1
242 cmp r1,$eresnam
243 blo 1b
244 mov $symtab,r1
2451:
246 tst (r1)
247 beq 1f
248 cmp nameb,(r1)
249 bne 2f
250 cmp nameb+2,2(r1)
251 bne 2f
252 rts pc
2532:
254 add $14.,r1
255 br 1b
2561:
257 cmp r1,$esymtab-28.
258 blo 1f
259 jsr r5,error
260 <out of symbol space\n\0>; .even
2611:
262 mov nameb,(r1)
263 mov nameb+2,2(r1)
264 clr 4(r1)
265 clr 14.(r1)
266 rts pc
267
268skip:
269 cmp r0,$' /
270 bne 1f
271 movb (r3)+,r0
272 br skip
2731:
274 rts pc
275
276putc:
277 tstb drflg
278 beq 1f
279 jsr pc,drput
280 rts r5
2811:
282 mov r0,ch
283 mov $1,r0
284 sys write; ch; 1
285 rts r5
286
287nextlin:
288 clr -(sp)
289 mov $lintab,r1
2901:
291 tst (r1)
292 beq 1f
293 cmp lineno,(r1)
294 bhi 2f
295 mov (sp),r0
296 beq 3f
297 cmp (r0),(r1)
298 blos 2f
2993:
300 mov r1,(sp)
3012:
302 add $6,r1
303 br 1b
3041:
305 mov (sp)+,r1
306 beq 1f
307 mov (r1)+,lineno
308 mov (r1)+,0f
309 mov tfi,r0
310 sys seek; 0:..; 0
311 mov tfi,r0
312 sys read; line; 100.
313 add $2,(sp)
3141:
315 rts pc
316
317getloc:
318 mov $lintab,r1
3191:
320 tst (r1)
321 beq 1f
322 cmp r0,(r1)
323 beq 2f
324 add $6,r1
325 br 1b
3261:
327 jsr r5,error
328 <label not found\n\0>; .even
3292:
330 rts pc
331
332isymtab:
333 mov $symtab,r0
334 mov $symtnam,r1
335 clrf fr0
336 movf $one,fr1
3371:
338 mov (r1)+,(r0)+
339 mov (r1)+,(r0)+
340 mov $1,(r0)+
341 subf r1,r0
342 movf r0,(r0)+
343 cmp r1,$esymtnam
344 blo 1b
345 clr (r0)+
346 rts pc
347
348 r1,(sp)
3492:
350 add $6,r1
351 br 1b
3521:
353 mov (sp)+,r1
354 beq 1f
355 mov (r1)+,lineno
356 mov (r1)+,0f
357 mov tfi,r0
358 sys seek; 0:..; 0
359 mov tfi,r0
360 sys read; line; 100.
361 add $2,(sp)
3621:
363 rts pc
364
365getloc:
366 mov $lintab,r1
3671:
368 tst (r1)
369 beq 1f
370 cmp r0,(r1)
371 beq 2f
372 add $6,r1
373 br 1b
3741:
375 jsr r5,error
376 <label not found\n\0>; .even
3772:
378 rts pc
379
380isymtab:
381 mov $symtab,r0
382 mov $symtnam,r1
383 clrf fr0
384 movf $one,fr1
3851:
386 mov (r1)+,(r0)+
387 mov (r1)+,(r0)+
388 mov $1,(r0)+
389 subf r1,r0
390 movf r0,(r0)+
391 cmp r1