|
|
1.1 root 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
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.