Commit | Line | Data |
---|---|---|
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 | ||
8 | one = 40200 | |
9 | ||
10 | main: | |
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 | |
20 | 1: | |
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 | |
28 | 1: | |
29 | sys creat; tmpf; 14 | |
30 | bes 2f | |
31 | mov r0,tfo | |
32 | sys open; tmpf; 0 | |
33 | bec 1f | |
34 | 2: | |
35 | mov $3f,r0 | |
36 | jsr pc,print | |
37 | sys exit | |
38 | 3: | |
39 | <Tmp file?\n\0>; .even | |
40 | 1: | |
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 | |
50 | 1: | |
51 | mov $1f,r0 | |
52 | jsr pc,print | |
53 | br loop | |
54 | 1: | |
55 | <Cannot open file\n\0>; .even | |
56 | ||
57 | intrup: | |
58 | mov $'\n,r0 | |
59 | jsr r5,putc | |
60 | jsr r5,error | |
61 | <ready\n\0>; .even | |
62 | ||
63 | loop: | |
64 | mov gsp,sp | |
65 | clr lineno | |
66 | jsr pc,rdline | |
67 | mov $line,r3 | |
68 | 1: | |
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 | |
79 | 2: | |
80 | cmp r0,(r3) | |
81 | beq 2f | |
82 | tst (r3) | |
83 | beq 2f | |
84 | add $6,r3 | |
85 | br 2b | |
86 | 2: | |
87 | cmp r3,$elintab-12. | |
88 | blo 2f | |
89 | jsr r5,error | |
90 | <too many lines\n\0>; .even | |
91 | 2: | |
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 | |
104 | 1: | |
105 | mov $line,r3 | |
106 | jsr pc,singstat | |
107 | br loop | |
108 | ||
109 | nextc: | |
110 | movb (r3)+,r0 | |
111 | rts r5 | |
112 | ||
113 | size: | |
114 | clr -(sp) | |
115 | 1: | |
116 | inc (sp) | |
117 | cmpb (r0)+,$'\n | |
118 | bne 1b | |
119 | mov (sp)+,r0 | |
120 | rts pc | |
121 | ||
122 | rdline: | |
123 | mov $line,0f | |
124 | 1: | |
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 | |
138 | 2: | |
139 | mov fi,r0 | |
140 | beq 1f | |
141 | sys close | |
142 | clr fi | |
143 | br 1b | |
144 | 1: | |
145 | jmp _done | |
146 | ||
147 | error: | |
148 | tst fi | |
149 | beq 1f | |
150 | sys close | |
151 | clr fi | |
152 | 1: | |
153 | tst lineno | |
154 | beq 1f | |
155 | jsr pc,nextlin | |
156 | br 1f | |
157 | mov $line,r0 | |
158 | jsr pc,print | |
159 | 1: | |
160 | mov r5,r0 | |
161 | jsr pc,print | |
162 | jmp loop | |
163 | ||
164 | serror: | |
165 | dec r3 | |
166 | tst fi | |
167 | beq 1f | |
168 | sys close | |
169 | clr fi | |
170 | 1: | |
171 | mov $line,r1 | |
172 | 1: | |
173 | cmp r1,r3 | |
174 | bne 2f | |
175 | mov $'_,r0 | |
176 | jsr r5,putc | |
177 | mov $10,r0 | |
178 | jsr r5,putc | |
179 | 2: | |
180 | movb (r1),r0 | |
181 | jsr r5,putc | |
182 | cmpb (r1)+,$'\n | |
183 | bne 1b | |
184 | jmp loop | |
185 | ||
186 | print: | |
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 | ||
194 | digit: | |
195 | cmp r0,$'0 | |
196 | blo 1f | |
197 | cmp r0,$'9 | |
198 | bhi 1f | |
199 | add $2,(sp) | |
200 | 1: | |
201 | rts pc | |
202 | ||
203 | alpha: | |
204 | cmp r0,$'a | |
205 | blo 1f | |
206 | cmp r0,$'z | |
207 | bhi 1f | |
208 | add $2,(sp) | |
209 | 1: | |
210 | rts pc | |
211 | ||
212 | name: | |
213 | mov $nameb,r1 | |
214 | clr (r1) | |
215 | clr 2(r1) | |
216 | 1: | |
217 | cmp r1,$nameb+4 | |
218 | bhis 2f | |
219 | movb r0,(r1)+ | |
220 | 2: | |
221 | movb (r3)+,r0 | |
222 | jsr pc,alpha | |
223 | br 2f | |
224 | br 1b | |
225 | 2: | |
226 | jsr pc,digit | |
227 | br 2f | |
228 | br 1b | |
229 | 2: | |
230 | mov $resnam,r1 | |
231 | 1: | |
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 | |
240 | 2: | |
241 | add $4,r1 | |
242 | cmp r1,$eresnam | |
243 | blo 1b | |
244 | mov $symtab,r1 | |
245 | 1: | |
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 | |
253 | 2: | |
254 | add $14.,r1 | |
255 | br 1b | |
256 | 1: | |
257 | cmp r1,$esymtab-28. | |
258 | blo 1f | |
259 | jsr r5,error | |
260 | <out of symbol space\n\0>; .even | |
261 | 1: | |
262 | mov nameb,(r1) | |
263 | mov nameb+2,2(r1) | |
264 | clr 4(r1) | |
265 | clr 14.(r1) | |
266 | rts pc | |
267 | ||
268 | skip: | |
269 | cmp r0,$' / | |
270 | bne 1f | |
271 | movb (r3)+,r0 | |
272 | br skip | |
273 | 1: | |
274 | rts pc | |
275 | ||
276 | putc: | |
277 | tstb drflg | |
278 | beq 1f | |
279 | jsr pc,drput | |
280 | rts r5 | |
281 | 1: | |
282 | mov r0,ch | |
283 | mov $1,r0 | |
284 | sys write; ch; 1 | |
285 | rts r5 | |
286 | ||
287 | nextlin: | |
288 | clr -(sp) | |
289 | mov $lintab,r1 | |
290 | 1: | |
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 | |
299 | 3: | |
300 | mov r1,(sp) | |
301 | 2: | |
302 | add $6,r1 | |
303 | br 1b | |
304 | 1: | |
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) | |
314 | 1: | |
315 | rts pc | |
316 | ||
317 | getloc: | |
318 | mov $lintab,r1 | |
319 | 1: | |
320 | tst (r1) | |
321 | beq 1f | |
322 | cmp r0,(r1) | |
323 | beq 2f | |
324 | add $6,r1 | |
325 | br 1b | |
326 | 1: | |
327 | jsr r5,error | |
328 | <label not found\n\0>; .even | |
329 | 2: | |
330 | rts pc | |
331 | ||
332 | isymtab: | |
333 | mov $symtab,r0 | |
334 | mov $symtnam,r1 | |
335 | clrf fr0 | |
336 | movf $one,fr1 | |
337 | 1: | |
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) | |
349 | 2: | |
350 | add $6,r1 | |
351 | br 1b | |
352 | 1: | |
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) | |
362 | 1: | |
363 | rts pc | |
364 | ||
365 | getloc: | |
366 | mov $lintab,r1 | |
367 | 1: | |
368 | tst (r1) | |
369 | beq 1f | |
370 | cmp r0,(r1) | |
371 | beq 2f | |
372 | add $6,r1 | |
373 | br 1b | |
374 | 1: | |
375 | jsr r5,error | |
376 | <label not found\n\0>; .even | |
377 | 2: | |
378 | rts pc | |
379 | ||
380 | isymtab: | |
381 | mov $symtab,r0 | |
382 | mov $symtnam,r1 | |
383 | clrf fr0 | |
384 | movf $one,fr1 | |
385 | 1: | |
386 | mov (r1)+,(r0)+ | |
387 | mov (r1)+,(r0)+ | |
388 | mov $1,(r0)+ | |
389 | subf r1,r0 | |
390 | movf r0,(r0)+ | |
391 | cmp r1 |