|
|
1.1 root 1: #
2: # Copyright (c) 1979 Regents of the University of California
3: #
4: # char sccsid[] = "@(#)00case.h 4.1 10/10/80";
5: #
6: # Berkeley Pascal Assembler Kernel
7: #
8: .globl _interpret #normal interpreter entry point
9: #
10: # register definitions
11: #
12: # registers R0 - R6 are for scratch use
13: #
14: .set lino, r11
15: .set lc, r10
16: .set dp, r9
17: .set loop, r8
18: .set buf, r7
19: #
20: # Global constants
21: #
22: .set R2,0x004 #register fields in call mask
23: .set R3,0x008
24: .set R4,0x010
25: .set R5,0x020
26: .set R6,0x040
27: .set R7,0x080
28: .set R8,0x100
29: .set R9,0x200
30: .set R10,0x400
31: .set R11,0x800
32: .set SIGINT,2 #interrupt signal
33: .set SIGFPE,8 #arithmetic exception signal
34: .set SIGSEGV,11 #segmentation violation
35: .set MASK,6 #offset of save mask in call stack
36: .set FP,12 #offset of "fp" in call stack
37: .set PC,16 #offset of "pc" in call stack
38: .set REGS,20 #beginning of saved registers in call stack
39: .set O_DATE,0345 #DATE opcode number
40: .set O_TIME,0346 #TIME opcode number
41: .set tempsize,-1024 #maximum required temporary stack space
42: #
43: # program variables
44: #
45: .globl _display #runtime display
46: .globl _file #current file name
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: .globl __sobuf #standard output buffer
60: #
61: # system subroutines
62: #
63: .globl _signal
64: .globl _time
65: .globl _times
66: #
67: # system math routines
68: #
69: .globl _atan
70: .globl _cos
71: .globl _exp
72: .globl _log
73: .globl _sin
74: .globl _sqrt
75: .globl _srand
76: .globl _rand
77: #
78: # pascal specific subroutines
79: #
80: .globl _error #error message routine
81: .globl _palloc #heap allocator
82: .globl _pfree
83: .globl _cttot #set constructor
84: .globl _inct #set inclusion
85: .globl _pdattim #getting date, time info
86: .globl _perror #process pxp errors
87: #
88: # initializing the interpreter
89: #
90: _interpret:
91: .word 0xffc #register save mask
92: moval iloop,r8
93: tstl 8(ap) #check for profiling
94: beql l0050
95: moval ploop,r8 #set profiling request
96: l0050:
97: callg *4(ap),l0051 #set ap to base of program
98: ret
99: l0051:
100: .word 0
101: bispsw $0xe0 #enable overflow traps
102: movl ap,r10 #program start address
103: moval _display,r9
104: moval -4(sp),(r9)
105: pushal stderr #set up global file variables
106: movl sp,stderr+FLEV
107: movl _llimit,stderr+LLIMIT
108: calls $0,_unit #init active file
109: pushal stdout
110: movl sp,stdout+FLEV
111: movl _llimit,stdout+LLIMIT
112: pushal stdin
113: movl sp,stdin+FLEV
114: moval stdin,_fchain
115: jmp (r8) #begin interpreter
116: #
117: # main interpreter loop
118: # the instruction 'jmp (loop)'
119: # transfers here
120: #
121: ploop:
122: movzbl (r10),r0
123: incl _profcnts[r0]
124: iloop:
125: caseb (r10)+,$0,$255
126: optab:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.