Commit | Line | Data |
---|---|---|
8d8c20ed DR |
1 | / |
2 | / | |
3 | ||
4 | / a7 -- pdp-11 assembler | |
5 | ||
6 | expres: | |
7 | clr xsymbol | |
8 | expres1: | |
9 | mov r5,-(sp) | |
10 | mov $'+,-(sp) | |
11 | clr r2 | |
12 | mov $1,r3 | |
13 | br 1f | |
14 | advanc: | |
15 | jsr pc,readop | |
16 | 1: | |
17 | mov r4,r0 | |
18 | jsr r5,betwen; 0; 177 | |
19 | br .+4 | |
20 | br 7f | |
21 | movb (r4),r0 | |
22 | tst r0 | |
23 | bne 1f | |
24 | tstb passno | |
25 | beq 1f | |
26 | jsr r5,error; 'u | |
27 | 1: | |
28 | cmp r0,$40 | |
29 | bne 1f | |
30 | mov r4,xsymbol | |
31 | clr r1 | |
32 | br oprand | |
33 | 1: | |
34 | mov 2(r4),r1 | |
35 | br oprand | |
36 | 7: | |
37 | cmp r4,$141 | |
38 | blo 1f | |
39 | asl r4 | |
40 | mov curfb-[2*141](r4),r0 | |
41 | mov 2(r0),r1 | |
42 | movb (r0),r0 | |
43 | br oprand | |
44 | 1: | |
45 | mov $esw1,r1 | |
46 | 1: | |
47 | cmp (r1)+,r4 | |
48 | beq 1f | |
49 | tst (r1)+ | |
50 | bne 1b | |
51 | tst (sp)+ | |
52 | mov (sp)+,r5 | |
53 | rts pc | |
54 | 1: | |
55 | jmp *(r1) | |
56 | ||
57 | esw1: | |
58 | '+; binop | |
59 | '-; binop | |
60 | '*; binop | |
61 | '/; binop | |
62 | '&; binop | |
63 | 037; binop | |
64 | 035; binop | |
65 | 036; binop | |
66 | '%; binop | |
67 | '[; brack | |
68 | '^; binop | |
69 | 1; exnum | |
70 | 2; exnum1 | |
71 | '!; binop | |
72 | 200; 0 | |
73 | ||
74 | binop: | |
75 | cmpb (sp),$'+ | |
76 | beq 1f | |
77 | jsr pc,errore | |
78 | 1: | |
79 | movb r4,(sp) | |
80 | br advanc | |
81 | ||
82 | exnum1: | |
83 | mov numval,r1 | |
84 | br 1f | |
85 | ||
86 | exnum: | |
87 | jsr pc,getw | |
88 | mov r4,r1 | |
89 | 1: | |
90 | mov $1,r0 | |
91 | br oprand | |
92 | ||
93 | brack: | |
94 | mov r2,-(sp) | |
95 | mov r3,-(sp) | |
96 | jsr pc,readop | |
97 | jsr pc,expres1 | |
98 | cmp r4,$'] | |
99 | beq 1f | |
100 | jsr r5,error; '] | |
101 | 1: | |
102 | mov r3,r0 | |
103 | mov r2,r1 | |
104 | mov (sp)+,r3 | |
105 | mov (sp)+,r2 | |
106 | ||
107 | oprand: | |
108 | mov $exsw2,r5 | |
109 | 1: | |
110 | cmp (sp),(r5)+ | |
111 | beq 1f | |
112 | tst (r5)+ | |
113 | bne 1b | |
114 | br eoprnd | |
115 | 1: | |
116 | jmp *(r5) | |
117 | ||
118 | exsw2: | |
119 | '+; exadd | |
120 | '-; exsub | |
121 | '*; exmul | |
122 | '/; exdiv | |
123 | 037; exor | |
124 | '&; exand | |
125 | 035;exlsh | |
126 | 036;exrsh | |
127 | '%; exmod | |
128 | '^; excmbin | |
129 | '!; exnot | |
130 | 200; 0 | |
131 | ||
132 | excmbin: | |
133 | mov r0,r3 | |
134 | br eoprnd | |
135 | ||
136 | exrsh: | |
137 | neg r1 | |
138 | beq exlsh | |
139 | inc r1 | |
140 | clc | |
141 | ror r2 | |
142 | exlsh: | |
143 | jsr r5,combin; relte2 | |
144 | als r1,r2 | |
145 | br eoprnd | |
146 | ||
147 | exmod: | |
148 | jsr r5,combin; relte2 | |
149 | mov r3,r0 | |
150 | mov r2,r3 | |
151 | clr r2 | |
152 | dvd r1,r2 | |
153 | mov r3,r2 | |
154 | mov r0,r3 | |
155 | br eoprnd | |
156 | ||
157 | exadd: | |
158 | jsr r5,combin; reltp2 | |
159 | add r1,r2 | |
160 | br eoprnd | |
161 | ||
162 | exsub: | |
163 | jsr r5,combin; reltm2 | |
164 | sub r1,r2 | |
165 | br eoprnd | |
166 | ||
167 | exand: | |
168 | jsr r5,combin; relte2 | |
169 | com r1 | |
170 | bic r1,r2 | |
171 | br eoprnd | |
172 | ||
173 | exor: | |
174 | jsr r5,combin; relte2 | |
175 | bis r1,r2 | |
176 | br eoprnd | |
177 | ||
178 | exmul: | |
179 | jsr r5,combin; relte2 | |
180 | mpy r2,r1 | |
181 | mov r1,r2 | |
182 | br eoprnd | |
183 | ||
184 | exdiv: | |
185 | jsr r5,combin; relte2 | |
186 | mov r3,r0 | |
187 | mov r2,r3 | |
188 | clr r2 | |
189 | dvd r1,r2 | |
190 | mov r0,r3 | |
191 | br eoprnd | |
192 | ||
193 | exnot: | |
194 | jsr r5,combin; relte2 | |
195 | com r1 | |
196 | add r1,r2 | |
197 | br eoprnd | |
198 | ||
199 | eoprnd: | |
200 | mov $'+,(sp) | |
201 | jmp advanc | |
202 | ||
203 | combin: | |
204 | tstb passno | |
205 | bne combin1 | |
206 | mov r0,-(sp) | |
207 | bis r3,(sp) | |
208 | bic $!40,(sp) | |
209 | bic $!37,r0 | |
210 | bic $!37,r3 | |
211 | cmp r0,r3 | |
212 | ble 1f | |
213 | mov r0,-(sp) | |
214 | mov r3,r0 | |
215 | mov (sp)+,r3 | |
216 | 1: | |
217 | tst r0 | |
218 | beq 1f | |
219 | cmp (r5)+,$reltm2 | |
220 | bne 2f | |
221 | cmp r0,r3 | |
222 | bne 2f | |
223 | mov $1,r3 | |
224 | br 2f | |
225 | 1: | |
226 | tst (r5)+ | |
227 | clr r3 | |
228 | 2: | |
229 | bis (sp)+,r3 | |
230 | rts r5 | |
231 | combin1: | |
232 | mov r1,-(sp) | |
233 | clr maxtyp | |
234 | jsr pc,maprel | |
235 | mov r0,r1 | |
236 | mpy $6,r1 | |
237 | mov r3,r0 | |
238 | jsr pc,maprel | |
239 | add (r5)+,r0 | |
240 | add r1,r0 | |
241 | movb (r0),r3 | |
242 | bpl 1f | |
243 | cmp r3,$-1 | |
244 | beq 2f | |
245 | jsr r5,error; 'r | |
246 | 2: | |
247 | mov maxtyp,r3 | |
248 | 1: | |
249 | mov (sp)+,r1 | |
250 | rts r5 | |
251 | ||
252 | maprel: | |
253 | cmp r0,$40 | |
254 | bne 1f | |
255 | mov $5,r0 | |
256 | rts pc | |
257 | 1: | |
258 | bic $!37,r0 | |
259 | cmp r0,maxtyp | |
260 | blos 1f | |
261 | mov r0,maxtyp | |
262 | 1: | |
263 | cmp r0,$5 | |
264 | blo 1f | |
265 | mov $1,r0 | |
266 | 1: | |
267 | rts pc | |
268 | ||
269 | X = -2 | |
270 | M = -1 | |
271 | reltp2: | |
272 | .byte 0, 0, 0, 0, 0, 0 | |
273 | .byte 0, M, 2, 3, 4,40 | |
274 | .byte 0, 2, X, X, X, X | |
275 | .byte 0, 3, X, X, X, X | |
276 | .byte 0, 4, X, X, X, X | |
277 | .byte 0,40, X, X, X, X | |
278 | ||
279 | reltm2: | |
280 | .byte 0, 0, 0, 0, 0, 0 | |
281 | .byte 0, M, 2, 3, 4,40 | |
282 | .byte 0, X, 1, X, X, X | |
283 | .byte 0, X, X, 1, X, X | |
284 | .byte 0, X, X, X, 1, X | |
285 | .byte 0, X, X, X, X, X | |
286 | ||
287 | relte2: | |
288 | .byte 0, 0, 0, 0, 0, 0 | |
289 | .byte 0, M, X, X, X, X | |
290 | .byte 0, X, X, X, X, X | |
291 | .byte 0, X, X, X, X, X | |
292 | .byte 0, X, X, X, X, X | |
293 | .byte 0, X, X, X, X, X | |
294 |