Commit | Line | Data |
---|---|---|
c427afba CH |
1 | # 00case.s |
2 | # | |
3 | # Berkeley Pascal Assembler Kernel | |
4 | # | |
5 | .globl _interpret #normal interpreter entry point | |
6 | # | |
7 | # register definitions | |
8 | # | |
9 | # registers R0 - R6 are for scratch use | |
10 | # | |
11 | .set lino, r11 | |
12 | .set lc, r10 | |
13 | .set dp, r9 | |
14 | .set loop, r8 | |
15 | .set buf, r7 | |
16 | # | |
17 | # Global constants | |
18 | # | |
19 | .set R2,0x004 #register fields in call mask | |
20 | .set R3,0x008 | |
21 | .set R4,0x010 | |
22 | .set R5,0x020 | |
23 | .set R6,0x040 | |
24 | .set R7,0x080 | |
25 | .set R8,0x100 | |
26 | .set R9,0x200 | |
27 | .set R10,0x400 | |
28 | .set R11,0x800 | |
29 | .set SIGINT,2 #interrupt signal | |
30 | .set SIGFPE,8 #arithmetic exception signal | |
31 | .set SIGSEGV,11 #segmentation violation | |
32 | .set MASK,6 #offset of save mask in call stack | |
33 | .set FP,12 #offset of "fp" in call stack | |
34 | .set PC,16 #offset of "pc" in call stack | |
35 | .set REGS,20 #beginning of saved registers in call stack | |
36 | .set O_DATE,0346 #DATE opcode number | |
37 | .set O_TIME,0347 #TIME opcode number | |
38 | .set tempsize,-256 #maximum required temporary stack space | |
39 | .set HZ,60 #interrupt frequency | |
40 | # | |
41 | # program variables | |
42 | # | |
43 | .globl _display #runtime display | |
44 | .globl _addrsze #size of addresses | |
45 | .globl _file #current file name | |
46 | .globl _bufopt #standard output buffering option | |
47 | .globl _fchain #head of active file chain | |
48 | .globl _llimit #max number of output lines | |
49 | .globl _stcnt #number of stmts executed | |
50 | .globl _stlim #max number of stmts to exec | |
51 | .globl _nodump #1 => no postmortum dump | |
52 | .globl _perrno #interpreter error number | |
53 | .globl _profcnts #PX profile execution counts | |
54 | .globl _pxpbuf #ptr to pxp buffer | |
55 | .globl _pxpsize #size of pxp buffer | |
56 | .globl _argc #number of passed args | |
57 | .globl _argv #values of passed args | |
58 | .globl __iob #base of I/O buffer block | |
59 | # | |
60 | # system subroutines | |
61 | # | |
62 | .globl _signal | |
63 | .globl _time | |
64 | .globl _times | |
65 | # | |
66 | # system math routines | |
67 | # | |
68 | .globl _atan | |
69 | .globl _cos | |
70 | .globl _exp | |
71 | .globl _log | |
72 | .globl _sin | |
73 | .globl _sqrt | |
74 | .globl _srand | |
75 | .globl _rand | |
76 | # | |
77 | # pascal specific subroutines | |
78 | # | |
79 | .globl _error #error message routine | |
80 | .globl _palloc #heap allocator | |
81 | .globl _pfree | |
82 | .globl _pcttot #set constructor | |
83 | .globl _pdattim #getting date, time info | |
84 | .globl _perror #process pxp errors | |
85 | # | |
86 | # initializing the interpreter | |
87 | # | |
88 | _interpret: | |
89 | .word 0xffc #register save mask | |
90 | moval iloop,r8 | |
91 | tstl 8(ap) #check for profiling | |
92 | beql l0050 | |
93 | moval ploop,r8 #set profiling request | |
94 | l0050: | |
95 | callg *4(ap),l0051 #set ap to base of program | |
96 | ret | |
97 | l0051: | |
98 | .word 0 | |
99 | bispsw $0xe0 #enable overflow traps | |
100 | movl ap,r10 #program start address | |
101 | moval _display,r9 | |
102 | moval -4(sp),(r9) | |
103 | pushal stderr #set up global file variables | |
104 | movl sp,stderr+FLEV | |
105 | movl _llimit,stderr+LLIMIT | |
106 | pushal stdout | |
107 | movl sp,stdout+FLEV | |
108 | movl _llimit,stdout+LLIMIT | |
109 | pushal stdin | |
110 | movl sp,stdin+FLEV | |
111 | moval stdin,_fchain | |
112 | jmp (r8) #begin interpreter | |
113 | # | |
114 | # main interpreter loop | |
115 | # the instruction 'jmp (loop)' | |
116 | # transfers here | |
117 | # | |
118 | ploop: | |
119 | movzbl (r10),r0 | |
120 | incl _profcnts[r0] | |
121 | iloop: | |
122 | caseb (r10)+,$0,$255 | |
123 | optab: | |
124 | .word _ABORT-optab | |
125 | .word _HALT-optab | |
126 | .word _TRA4-optab | |
127 | .word _NODUMP-optab | |
128 | .word _BEG-optab | |
129 | .word _END-optab | |
130 | .word _CALL-optab | |
131 | .word _TRACNT-optab | |
132 | .word _PUSH-optab | |
133 | .word _POP-optab | |
134 | .word _INX4-optab | |
135 | .word _SDUP-optab | |
136 | .word _IF-optab | |
137 | .word _TRA-optab | |
138 | .word _LINO-optab | |
139 | .word _GOTO-optab | |
140 | .word _REL2-optab | |
141 | .word _REL4-optab | |
142 | .word _REL24-optab | |
143 | .word _REL42-optab | |
144 | .word _REL8-optab | |
145 | .word _RELG-optab | |
146 | .word _RELT-optab | |
147 | .word badop-optab | |
148 | .word _REL28-optab | |
149 | .word _REL48-optab | |
150 | .word _REL82-optab | |
151 | .word _REL84-optab | |
152 | .word _AND-optab | |
153 | .word _OR-optab | |
154 | .word _NOT-optab | |
155 | .word badop-optab | |
156 | .word _AS2-optab | |
157 | .word _AS4-optab | |
158 | .word _AS24-optab | |
159 | .word _AS42-optab | |
160 | .word _AS8-optab | |
161 | .word _INX2P2-optab | |
162 | .word _INX4P2-optab | |
163 | .word _AS-optab | |
164 | .word _AS21-optab | |
165 | .word _AS41-optab | |
166 | .word _AS28-optab | |
167 | .word _AS48-optab | |
168 | .word _OFF-optab | |
169 | .word _INX2-optab | |
170 | .word _NIL-optab | |
171 | .word _LV-optab | |
172 | .word _ADD2-optab | |
173 | .word _ADD4-optab | |
174 | .word _ADD24-optab | |
175 | .word _ADD42-optab | |
176 | .word _ADD28-optab | |
177 | .word _ADD48-optab | |
178 | .word _ADD82-optab | |
179 | .word _ADD84-optab | |
180 | .word _SUB2-optab | |
181 | .word _SUB4-optab | |
182 | .word _SUB24-optab | |
183 | .word _SUB42-optab | |
184 | .word _SUB28-optab | |
185 | .word _SUB48-optab | |
186 | .word _SUB82-optab | |
187 | .word _SUB84-optab | |
188 | .word _MUL2-optab | |
189 | .word _MUL4-optab | |
190 | .word _MUL24-optab | |
191 | .word _MUL42-optab | |
192 | .word _MUL28-optab | |
193 | .word _MUL48-optab | |
194 | .word _MUL82-optab | |
195 | .word _MUL84-optab | |
196 | .word _ABS2-optab | |
197 | .word _ABS4-optab | |
198 | .word _ABS8-optab | |
199 | .word badop-optab | |
200 | .word _ADD8-optab | |
201 | .word _SUB8-optab | |
202 | .word _MUL8-optab | |
203 | .word _DVD8-optab | |
204 | .word _DIV2-optab | |
205 | .word _DIV4-optab | |
206 | .word _DIV24-optab | |
207 | .word _DIV42-optab | |
208 | .word badop-optab | |
209 | .word badop-optab | |
210 | .word badop-optab | |
211 | .word badop-optab | |
212 | .word _MOD2-optab | |
213 | .word _MOD4-optab | |
214 | .word _MOD24-optab | |
215 | .word _MOD42-optab | |
216 | .word badop-optab | |
217 | .word badop-optab | |
218 | .word badop-optab | |
219 | .word badop-optab | |
220 | .word _NEG2-optab | |
221 | .word _NEG4-optab | |
222 | .word _NEG8-optab | |
223 | .word badop-optab | |
224 | .word badop-optab | |
225 | .word badop-optab | |
226 | .word badop-optab | |
227 | .word badop-optab | |
228 | .word badop-optab | |
229 | .word badop-optab | |
230 | .word badop-optab | |
231 | .word badop-optab | |
232 | .word badop-optab | |
233 | .word badop-optab | |
234 | .word badop-optab | |
235 | .word badop-optab | |
236 | .word _DVD2-optab | |
237 | .word _DVD4-optab | |
238 | .word _DVD24-optab | |
239 | .word _DVD42-optab | |
240 | .word _DVD28-optab | |
241 | .word _DVD48-optab | |
242 | .word _DVD82-optab | |
243 | .word _DVD84-optab | |
244 | .word _RV1-optab | |
245 | .word _RV2-optab | |
246 | .word _RV4-optab | |
247 | .word _RV8-optab | |
248 | .word _IND1-optab | |
249 | .word _IND2-optab | |
250 | .word _IND4-optab | |
251 | .word _IND8-optab | |
252 | .word _CON1-optab | |
253 | .word _CON2-optab | |
254 | .word _CON4-optab | |
255 | .word _CON8-optab | |
256 | .word _RV-optab | |
257 | .word _IND-optab | |
258 | .word _CON-optab | |
259 | .word badop-optab | |
260 | .word _RANG2-optab | |
261 | .word _RANG42-optab | |
262 | .word _RSNG2-optab | |
263 | .word _RSNG42-optab | |
264 | .word _RANG4-optab | |
265 | .word _RANG24-optab | |
266 | .word _RSNG4-optab | |
267 | .word _RSNG24-optab | |
268 | .word _WRITEF-optab | |
269 | .word _WRITEC-optab | |
270 | .word _WRITES-optab | |
271 | .word _WRITEB-optab | |
272 | .word badop-optab | |
273 | .word badop-optab | |
274 | .word badop-optab | |
275 | .word badop-optab | |
276 | .word _BLKBEG-optab | |
277 | .word _PUSH4-optab | |
278 | .word _POP4-optab | |
279 | .word badop-optab | |
280 | .word badop-optab | |
281 | .word badop-optab | |
282 | .word badop-optab | |
283 | .word badop-optab | |
284 | .word _CASE1OP-optab | |
285 | .word _CASE2OP-optab | |
286 | .word _CASE4OP-optab | |
287 | .word _PXPBUF-optab | |
288 | .word _COUNT-optab | |
289 | .word badop-optab | |
290 | .word badop-optab | |
291 | .word badop-optab | |
292 | .word _ADDT-optab | |
293 | .word _SUBT-optab | |
294 | .word _MULT-optab | |
295 | .word _INCT-optab | |
296 | .word _CTTOT-optab | |
297 | .word _CARD-optab | |
298 | .word _IN-optab | |
299 | .word _ASRT-optab | |
300 | .word _FOR1U-optab | |
301 | .word _FOR2U-optab | |
302 | .word _FOR4U-optab | |
303 | .word _FOR1D-optab | |
304 | .word _FOR2D-optab | |
305 | .word _FOR4D-optab | |
306 | .word _STLIM-optab | |
307 | .word _SCLCK-optab | |
308 | .word _STOI-optab | |
309 | .word _STOD-optab | |
310 | .word _ITOD-optab | |
311 | .word _ITOS-optab | |
312 | .word _BUFF-optab | |
313 | .word _WCLCK-optab | |
314 | .word _WRHEX2-optab | |
315 | .word _WRHEX4-optab | |
316 | .word _GET-optab | |
317 | .word _PUT-optab | |
318 | .word _MESSAGE-optab | |
319 | .word _FNIL-optab | |
320 | .word _EOF-optab | |
321 | .word _EOLN-optab | |
322 | .word _RESET-optab | |
323 | .word _REWRITE-optab | |
324 | .word _REMOVE-optab | |
325 | .word _READ4-optab | |
326 | .word _UNIT-optab | |
327 | .word _READC-optab | |
328 | .word _READ8-optab | |
329 | .word _UNITINP-optab | |
330 | .word _UNITOUT-optab | |
331 | .word _READLN-optab | |
332 | .word _WRIT2-optab | |
333 | .word _WRIT4-optab | |
334 | .word _WRITB-optab | |
335 | .word _WRITC-optab | |
336 | .word _WRIT8-optab | |
337 | .word _WRITG-optab | |
338 | .word _WRIT82-optab | |
339 | .word _WRITLN-optab | |
340 | .word _WROCT2-optab | |
341 | .word _WROCT4-optab | |
342 | .word _FLUSH-optab | |
343 | .word _PACK-optab | |
344 | .word _UNPACK-optab | |
345 | .word _LLIMIT-optab | |
346 | .word _ARGC-optab | |
347 | .word _ARGV-optab | |
348 | .word _CLCK-optab | |
349 | .word _SEED-optab | |
350 | .word _RANDOM-optab | |
351 | .word _DISPOSE-optab | |
352 | .word _NEW-optab | |
353 | .word _EXPO-optab | |
354 | .word _DATE-optab | |
355 | .word _TIME-optab | |
356 | .word _ATAN-optab | |
357 | .word _COS-optab | |
358 | .word _EXP-optab | |
359 | .word _LN-optab | |
360 | .word _SIN-optab | |
361 | .word _SQRT-optab | |
362 | .word _CHR2-optab | |
363 | .word _CHR4-optab | |
364 | .word _ODD2-optab | |
365 | .word _ODD4-optab | |
366 | .word _PRED2-optab | |
367 | .word _PRED4-optab | |
368 | .word _PRED24-optab | |
369 | .word _SUCC2-optab | |
370 | .word _SUCC4-optab | |
371 | .word _SUCC24-optab | |
372 | .word _DEFNAME-optab | |
373 | .word _PAGE-optab | |
374 | .word _UNDEF-optab | |
375 | .word _SQR2-optab | |
376 | .word _SQR4-optab | |
377 | .word _SQR8-optab | |
378 | .word _ROUND-optab | |
379 | .word _TRUNC-optab | |
380 | badop: | |
381 | incl r10 | |
382 | movw $EBADOP,_perrno | |
383 | jbr error |