Commit | Line | Data |
---|---|---|
5ca535a0 CH |
1 | #\f |
2 | # 00int.s | |
3 | # | |
4 | _ABORT: | |
5 | halt #stop immediately!!! | |
6 | _HALT: | |
7 | movw $EHALT,_perrno | |
8 | jbr error | |
9 | _CALL: | |
10 | cvtbl (r10)+,r0 #entry level of new proc | |
11 | movl (r10)+,r1 #new entry point | |
12 | pushr $R11|R10|R9 #save lino, lc, dp | |
13 | moval _display[r0],r9 | |
14 | addl3 r1,ap,r10 #calc new entry point | |
15 | jmp (r8) | |
16 | _NODUMP: | |
17 | moval iloop,r8 #disable profiling | |
18 | incw _nodump | |
19 | bicpsw $0xe0 #disable overflow checks | |
20 | _BEG: | |
21 | incl r10 | |
22 | cvtwl (r10)+,r0 #r0 has local variable size | |
23 | bgtr framesize #current max is 32768 bytes | |
24 | addl2 _addrsze,r9 #enter local scope | |
25 | pushl (r9) #save old display value | |
26 | pushl r10 #pointer to proc name | |
27 | addl2 $8,r10 #skip over name text | |
28 | movzwl (r10)+,r11 #set new lino | |
29 | pushl r7 #save I/O info | |
30 | pushl _file | |
31 | subl2 $4,sp #space for top of frame pointer | |
32 | movl sp,(r9) #set new display pointer | |
33 | addl3 r0,sp,r1 #r1 points to new top of stack | |
34 | clrl tempsize(r1) #check for memory (fault => not available) | |
35 | movl r1,(sp) #set new top of stack pointer | |
36 | movl r1,sp #allocate local variables | |
37 | mnegl r0,r0 #r0 has amount of space to alloc | |
38 | movc5 $0,(r2),$0,r0,(sp) #zero out local variables | |
39 | jmp (r8) | |
40 | framesize: | |
41 | movw $EFRAMESIZE,_perrno | |
42 | jbr error | |
43 | _BLKBEG: | |
44 | incl r10 | |
45 | mnegl (sp)+,r0 #r0 has size of block | |
46 | cmpl *(r9),sp #check stack integrity | |
47 | bneq stknemp | |
48 | subl3 r0,sp,r1 #r1 points to new top of stack | |
49 | clrl tempsize(r1) #check for memory (fault => not available) | |
50 | movl r1,sp #allocate space | |
51 | movl sp,*(dp) #set top of stack ptr | |
52 | movc5 $0,(r2),$0,r0,(sp) #clear space | |
53 | jmp (r8) | |
54 | stknemp: | |
55 | movw $ESTKNEMP,_perrno | |
56 | jbr error | |
57 | _END: | |
58 | pushl (r9) #flush and close local files | |
59 | calls $1,_pclose | |
60 | movl (r9),sp #deallocate local vars | |
61 | movl 4(sp),_file #restore old I/O info | |
62 | movl 8(sp),r7 | |
63 | movl 16(sp),(r9) #restore old display entry | |
64 | addl2 $20,sp #deallocate current frame | |
65 | addl3 $_display,_addrsze,r0 | |
66 | cmpl r9,r0 #exiting main proc ??? | |
67 | beql l0011 | |
68 | popr $R11|R10|R9 #restore lino, lc, dp | |
69 | jmp (r8) | |
70 | l0011: | |
71 | ret #end of interpretation | |
72 | _GOTO: | |
73 | cvtbl (r10)+,r0 | |
74 | bneq l0016 | |
75 | cvtwl (r10)+,r0 | |
76 | l0016: | |
77 | moval _display[r0],r0 #r0 has exit dp value | |
78 | addl3 (r10),ap,r10 #establish return address | |
79 | l0017: | |
80 | cmpl r0,r9 #check for done | |
81 | beql l0018 | |
82 | cmpl r9,$_display #check for end of stack | |
83 | beql egoto | |
84 | pushl (r9) #flush and close local files | |
85 | calls $1,_pclose | |
86 | movl (r9),sp #deallocate local vars | |
87 | movl 4(sp),_file #restore old I/O info | |
88 | movl 8(sp),r7 | |
89 | movl 16(sp),(r9) #restore old display entry | |
90 | addl2 $20,sp #deallocate current frame | |
91 | movl (sp),r9 #get old display pointer | |
92 | brb l0017 #continue | |
93 | l0018: | |
94 | movl *(r9),sp #reset sp to top of stack | |
95 | jmp (r8) | |
96 | egoto: | |
97 | movl $EGOTO,_perrno | |
98 | jbr error | |
99 | _LINO: | |
100 | cmpl *(r9),sp #check stack integrity | |
101 | jneq stknemp | |
102 | cvtbl (r10)+,r11 #update line number | |
103 | bneq l0015 | |
104 | cvtwl (r10)+,r11 | |
105 | l0015: | |
106 | aoblss _stlim,_stcnt,l0021 #update statement count | |
107 | movw $ESTLIM,_perrno | |
108 | jbr error | |
109 | l0021: | |
110 | jmp (r8) | |
111 | _IF: | |
112 | tstw (sp)+ | |
113 | beql _TRA | |
114 | addl2 $3,r10 | |
115 | jmp (r8) | |
116 | _TRA4: | |
117 | addl3 1(r10),ap,r10 | |
118 | jmp (r8) | |
119 | _TRA: | |
120 | incl r10 | |
121 | cvtwl (r10),r0 | |
122 | addl2 r0,r10 | |
123 | jmp (r8) | |
124 | _PUSH: | |
125 | cvtbl (r10)+,r0 | |
126 | bneq l0012 | |
127 | cvtwl (r10)+,r0 | |
128 | l0012: | |
129 | jgtr framesize #current maximum of 32768 | |
130 | mnegl r0,r0 | |
131 | blbc r0,l0020 | |
132 | incl r0 | |
133 | l0020: | |
134 | subl3 r0,sp,r1 #r1 points to new top of stack | |
135 | clrl tempsize(r1) #check for memory (fault => not available) | |
136 | movl r1,sp #allocate the memory | |
137 | movc5 $0,(r2),$0,r0,(sp) | |
138 | jmp (r8) | |
139 | _POP: | |
140 | cvtbl (r10)+,r0 | |
141 | bneq l0013 | |
142 | cvtwl (r10)+,r0 | |
143 | l0013: | |
144 | addl2 r0,sp | |
145 | jmp (r8) | |
146 | _PUSH4: | |
147 | incl r10 | |
148 | mnegl (sp)+,r0 | |
149 | blbc r0,l0019 | |
150 | incl r0 | |
151 | l0019: | |
152 | subl3 r0,sp,r1 #r1 points to new top of stack | |
153 | clrl tempsize(r1) #check for memeory (fault => not available) | |
154 | movl r1,sp #allocate the memory | |
155 | movc5 $0,(r2),$0,r0,(sp) | |
156 | jmp (r8) | |
157 | _POP4: | |
158 | incl r10 | |
159 | addl2 (sp)+,sp | |
160 | jmp (r8) | |
161 | _SDUP: | |
162 | incl r10 | |
163 | movw (sp),-(sp) | |
164 | jmp (r8) | |
165 | _ASRT: | |
166 | incl r10 | |
167 | tstw (sp)+ | |
168 | beql l0014 | |
169 | jmp (r8) | |
170 | l0014: | |
171 | movw $EASRT,_perrno | |
172 | jbr error |