jb302@36
|
1 C51 COMPILER V9.02 ISET 04/17/2014 15:17:32 PAGE 1
|
jb302@36
|
2
|
jb302@36
|
3
|
jb302@36
|
4 C51 COMPILER V9.02, COMPILATION OF MODULE ISET
|
jb302@36
|
5 OBJECT MODULE PLACED IN iset.obj
|
jb302@36
|
6 COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE src\iset.c OMF2 BROWSE DEBUG PRINT(.\iset.lst) OBJECT(iset.obj)
|
jb302@36
|
7
|
jb302@36
|
8 line level source
|
jb302@36
|
9
|
jb302@36
|
10 1 /* iset.c
|
jb302@36
|
11 2 * IR functions */
|
jb302@36
|
12 3 #include "iset.h"
|
jb302@36
|
13 4 #include "mem.h"
|
jb302@36
|
14 5
|
jb302@36
|
15 6 /* useful macros */
|
jb302@36
|
16 7 #define NNN (IR & 0x07)
|
jb302@36
|
17 8 #define MMM ((IR & 0x38) >> 3)
|
jb302@36
|
18 9
|
jb302@36
|
19 10 /* 0x00 - NOP */
|
jb302@36
|
20 11 void
|
jb302@36
|
21 12 NOP(void) {
|
jb302@36
|
22 13 1 }
|
jb302@36
|
23 14
|
jb302@36
|
24 15 /* 0x08 - SET C
|
jb302@36
|
25 16 * 0x0A - SET BS
|
jb302@36
|
26 17 * 0x0C - SET IE */
|
jb302@36
|
27 18 void
|
jb302@36
|
28 19 SET(void) {
|
jb302@36
|
29 20 1 switch (IR) {
|
jb302@36
|
30 21 2
|
jb302@36
|
31 22 2 case 0x08:
|
jb302@36
|
32 23 2 set_flag(C, 0x01);
|
jb302@36
|
33 24 2 break;
|
jb302@36
|
34 25 2
|
jb302@36
|
35 26 2 case 0x0A:
|
jb302@36
|
36 27 2 set_flag(BS, 0x01);
|
jb302@36
|
37 28 2 break;
|
jb302@36
|
38 29 2
|
jb302@36
|
39 30 2 case 0x0C:
|
jb302@36
|
40 31 2 set_flag(IE, 0x01);
|
jb302@36
|
41 32 2 break;
|
jb302@36
|
42 33 2
|
jb302@36
|
43 34 2 default:
|
jb302@36
|
44 35 2 break;
|
jb302@36
|
45 36 2 }
|
jb302@36
|
46 37 1 }
|
jb302@36
|
47 38
|
jb302@36
|
48 39 /* 0x09 - CLR C
|
jb302@36
|
49 40 * 0x0B - CLR BS
|
jb302@36
|
50 41 * 0x0D - CLR IE */
|
jb302@36
|
51 42 void
|
jb302@36
|
52 43 CLR(void) {
|
jb302@36
|
53 44 1 switch (IR) {
|
jb302@36
|
54 45 2
|
jb302@36
|
55 46 2 case 0x09:
|
jb302@36
|
56 47 2 set_flag(C, 0x00);
|
jb302@36
|
57 48 2 break;
|
jb302@36
|
58 49 2
|
jb302@36
|
59 50 2 case 0x0B:
|
jb302@36
|
60 51 2 set_flag(BS, 0x00);
|
jb302@36
|
61 52 2 break;
|
jb302@36
|
62 53 2
|
jb302@36
|
63 54 2 case 0x0D:
|
jb302@36
|
64 55 2 set_flag(IE, 0x00);
|
jb302@36
|
65 C51 COMPILER V9.02 ISET 04/17/2014 15:17:32 PAGE 2
|
jb302@36
|
66
|
jb302@36
|
67 56 2 break;
|
jb302@36
|
68 57 2
|
jb302@36
|
69 58 2 default:
|
jb302@36
|
70 59 2 break;
|
jb302@36
|
71 60 2 }
|
jb302@36
|
72 61 1 }
|
jb302@36
|
73 62
|
jb302@36
|
74 63 /* 0x0E - CPL C
|
jb302@36
|
75 64 * 0x0F - CPL A */
|
jb302@36
|
76 65 void
|
jb302@36
|
77 66 CPL(void) {
|
jb302@36
|
78 67 1 switch (IR) {
|
jb302@36
|
79 68 2
|
jb302@36
|
80 69 2 case 0x0E:
|
jb302@36
|
81 70 2 if (get_flag(C) == 0) {
|
jb302@36
|
82 71 3 set_flag(C, 0x01);
|
jb302@36
|
83 72 3 }
|
jb302@36
|
84 73 2 else {
|
jb302@36
|
85 74 3 set_flag(C, 0x00);
|
jb302@36
|
86 75 3 }
|
jb302@36
|
87 76 2
|
jb302@36
|
88 77 2 case 0x0F:
|
jb302@36
|
89 78 2 A = ~A;
|
jb302@36
|
90 79 2 break;
|
jb302@36
|
91 80 2
|
jb302@36
|
92 81 2 default:
|
jb302@36
|
93 82 2 break;
|
jb302@36
|
94 83 2 }
|
jb302@36
|
95 84 1 }
|
jb302@36
|
96 85
|
jb302@36
|
97 86 /* 0x10 - XCSD */
|
jb302@36
|
98 87 void
|
jb302@36
|
99 88 XCSD(void) {
|
jb302@36
|
100 89 1 tmpw = get_wide(SP);
|
jb302@36
|
101 90 1 set_wide(SP, get_wide(DPTR));
|
jb302@36
|
102 91 1 set_wide(DPTR, tmpw);
|
jb302@36
|
103 92 1 }
|
jb302@36
|
104 93
|
jb302@36
|
105 94 /* 0x11 - SFA */
|
jb302@36
|
106 95 void
|
jb302@36
|
107 96 SFA(void) {
|
jb302@36
|
108 97 1 A = flags;
|
jb302@36
|
109 98 1 }
|
jb302@36
|
110 99
|
jb302@36
|
111 100 /* 0x12 - LAF */
|
jb302@36
|
112 101 void
|
jb302@36
|
113 102 LAF(void) {
|
jb302@36
|
114 103 1 flags = A;
|
jb302@36
|
115 104 1 }
|
jb302@36
|
116 105
|
jb302@36
|
117 106 /* 0b00010XXX - special MOVs
|
jb302@36
|
118 107 * 0b00011XXX - direct, indirect and indexed MOVs
|
jb302@36
|
119 108 * 0b00100nnn - register-indirect MOVs - MOV @DPTR, Rn
|
jb302@36
|
120 109 * 0b00101nnn - immediate movs - MOV Rn, #data8
|
jb302@36
|
121 110 * 0b00110nnn - MOV Rn, A
|
jb302@36
|
122 111 * 0b00111nnn - MOV A, Rn
|
jb302@36
|
123 112 * 0b01mmmnnn - 64 register move instructions
|
jb302@36
|
124 113 *
|
jb302@36
|
125 114 * this is a mess */
|
jb302@36
|
126 115 void
|
jb302@36
|
127 116 MOV(void) {
|
jb302@36
|
128 117 1 switch (IR & 0x40) {
|
jb302@36
|
129 C51 COMPILER V9.02 ISET 04/17/2014 15:17:32 PAGE 3
|
jb302@36
|
130
|
jb302@36
|
131 118 2
|
jb302@36
|
132 119 2 case 0x00:
|
jb302@36
|
133 120 2 switch (IR & 0xF8) {
|
jb302@36
|
134 121 3
|
jb302@36
|
135 122 3 /* 0b00010XXX - special MOVs*/
|
jb302@36
|
136 123 3 case 0x10:
|
jb302@36
|
137 124 3 switch (NNN) {
|
jb302@36
|
138 125 4
|
jb302@36
|
139 126 4 /* MOV DPTR, SP */
|
jb302@36
|
140 127 4 case 3:
|
jb302@36
|
141 128 4 set_wide(DPTR, get_wide(SP));
|
jb302@36
|
142 129 4 break;
|
jb302@36
|
143 130 4
|
jb302@36
|
144 131 4 /* MOV SP, DPTR */
|
jb302@36
|
145 132 4 case 4:
|
jb302@36
|
146 133 4 set_wide(SP, get_wide(DPTR));
|
jb302@36
|
147 134 4 break;
|
jb302@36
|
148 135 4
|
jb302@36
|
149 136 4 /* MOV A, #data8 */
|
jb302@36
|
150 137 4 case 5:
|
jb302@36
|
151 138 4 A = fetch();
|
jb302@36
|
152 139 4 break;
|
jb302@36
|
153 140 4
|
jb302@36
|
154 141 4 /* MOV SP, #data16 */
|
jb302@36
|
155 142 4 case 6:
|
jb302@36
|
156 143 4 set_wide(SP, fetch_wide());
|
jb302@36
|
157 144 4 break;
|
jb302@36
|
158 145 4
|
jb302@36
|
159 146 4 /* MOV DPTR, #data16 */
|
jb302@36
|
160 147 4 case 7:
|
jb302@36
|
161 148 4 set_wide(DPTR, fetch_wide());
|
jb302@36
|
162 149 4 break;
|
jb302@36
|
163 150 4
|
jb302@36
|
164 151 4 default:
|
jb302@36
|
165 152 4 break;
|
jb302@36
|
166 153 4 }
|
jb302@36
|
167 154 3 break;
|
jb302@36
|
168 155 3
|
jb302@36
|
169 156 3 /* 0b00011XXX - direct, indirect and indexed MOVs*/
|
jb302@36
|
170 157 3 case 0x18:
|
jb302@36
|
171 158 3 switch (NNN) {
|
jb302@36
|
172 159 4
|
jb302@36
|
173 160 4 /* MOV A, addr16 */
|
jb302@36
|
174 161 4 case 0:
|
jb302@36
|
175 162 4 set_wide(TMP, fetch_wide());
|
jb302@36
|
176 163 4 A = mem[get_wide(TMP)];
|
jb302@36
|
177 164 4 break;
|
jb302@36
|
178 165 4
|
jb302@36
|
179 166 4 /* MOV addr16, A */
|
jb302@36
|
180 167 4 case 1:
|
jb302@36
|
181 168 4 set_wide(TMP, fetch_wide());
|
jb302@36
|
182 169 4 mem[get_wide(TMP)] = A;
|
jb302@36
|
183 170 4 break;
|
jb302@36
|
184 171 4
|
jb302@36
|
185 172 4 /* MOV A, @A+DPTR */
|
jb302@36
|
186 173 4 case 2:
|
jb302@36
|
187 174 4 set_wide(TMP, A + get_wide(DPTR));
|
jb302@36
|
188 175 4 A = mem[get_wide(TMP)];
|
jb302@36
|
189 176 4 break;
|
jb302@36
|
190 177 4
|
jb302@36
|
191 178 4 /* MOV A, @A+PC */
|
jb302@36
|
192 179 4 case 3:
|
jb302@36
|
193 C51 COMPILER V9.02 ISET 04/17/2014 15:17:32 PAGE 4
|
jb302@36
|
194
|
jb302@36
|
195 180 4 set_wide(TMP, A + get_wide(PC));
|
jb302@36
|
196 181 4 A = mem[TMP];
|
jb302@36
|
197 182 4 break;
|
jb302@36
|
198 183 4
|
jb302@36
|
199 184 4 /* MOV A, @addr16 */
|
jb302@36
|
200 185 4 case 4:
|
jb302@36
|
201 186 4 set_wide(TMP, fetch_wide());
|
jb302@36
|
202 187 4 A = mem[mem[get_wide(TMP)]];
|
jb302@36
|
203 188 4 break;
|
jb302@36
|
204 189 4
|
jb302@36
|
205 190 4 /* MOV @addr16, A */
|
jb302@36
|
206 191 4 case 5:
|
jb302@36
|
207 192 4 set_wide(TMP, fetch_wide());
|
jb302@36
|
208 193 4 mem[mem[get_wide(TMP)]] = A;
|
jb302@36
|
209 194 4 break;
|
jb302@36
|
210 195 4
|
jb302@36
|
211 196 4 /* MOV A, @DPTR */
|
jb302@36
|
212 197 4 case 6:
|
jb302@36
|
213 198 4 set_wide(TMP, get_wide(DPTR));
|
jb302@36
|
214 199 4 A = mem[get_wide(TMP)];
|
jb302@36
|
215 200 4 break;
|
jb302@36
|
216 201 4
|
jb302@36
|
217 202 4 /* MOV @DPTR, A */
|
jb302@36
|
218 203 4 case 7:
|
jb302@36
|
219 204 4 set_wide(TMP, get_wide(DPTR));
|
jb302@36
|
220 205 4 mem[get_wide(TMP)] = A;
|
jb302@36
|
221 206 4 break;
|
jb302@36
|
222 207 4
|
jb302@36
|
223 208 4 default:
|
jb302@36
|
224 209 4 break;
|
jb302@36
|
225 210 4 }
|
jb302@36
|
226 211 3 break;
|
jb302@36
|
227 212 3
|
jb302@36
|
228 213 3 /* 0b00100nnn - MOV @DPTR, Rn*/
|
jb302@36
|
229 214 3 case 0x20:
|
jb302@36
|
230 215 3 set_wide(TMP, get_wide(DPTR));
|
jb302@36
|
231 216 3 mem[get_wide(TMP)] = get_reg(NNN);
|
jb302@36
|
232 217 3 break;
|
jb302@36
|
233 218 3
|
jb302@36
|
234 219 3 /* 0b00101nnn - immediate movs - MOV Rn, #data8*/
|
jb302@36
|
235 220 3 case 0x28:
|
jb302@36
|
236 221 3 set_reg(NNN, fetch());
|
jb302@36
|
237 222 3 break;
|
jb302@36
|
238 223 3
|
jb302@36
|
239 224 3 /* 0b00110nnn - MOV Rn, A */
|
jb302@36
|
240 225 3 case 0x30:
|
jb302@36
|
241 226 3 set_reg(NNN, A);
|
jb302@36
|
242 227 3 break;
|
jb302@36
|
243 228 3
|
jb302@36
|
244 229 3 /* 0b00111nnn MOV A, Rn */
|
jb302@36
|
245 230 3 case 0x38:
|
jb302@36
|
246 231 3 A = get_reg(NNN);
|
jb302@36
|
247 232 3 break;
|
jb302@36
|
248 233 3
|
jb302@36
|
249 234 3 default:
|
jb302@36
|
250 235 3 break;
|
jb302@36
|
251 236 3 }
|
jb302@36
|
252 237 2 break;;
|
jb302@36
|
253 238 2
|
jb302@36
|
254 239 2 /* 0b01mmmnnn MOV Rm Rn
|
jb302@36
|
255 240 2 * if m == n: MOV Rm, @DPTR */
|
jb302@36
|
256 241 2 case 0x40:
|
jb302@36
|
257 C51 COMPILER V9.02 ISET 04/17/2014 15:17:32 PAGE 5
|
jb302@36
|
258
|
jb302@36
|
259 242 2 if (NNN == MMM) {
|
jb302@36
|
260 243 3 set_wide(TMP, get_wide(DPTR));
|
jb302@36
|
261 244 3 set_reg(NNN, mem[get_wide(TMP)]);
|
jb302@36
|
262 245 3 }
|
jb302@36
|
263 246 2 else {
|
jb302@36
|
264 247 3 set_reg(MMM, get_reg(NNN));
|
jb302@36
|
265 248 3 }
|
jb302@36
|
266 249 2 break;
|
jb302@36
|
267 250 2
|
jb302@36
|
268 251 2 default:
|
jb302@36
|
269 252 2 break;
|
jb302@36
|
270 253 2 }
|
jb302@36
|
271 254 1 }
|
jb302@36
|
272 255
|
jb302@36
|
273 256
|
jb302@36
|
274 257 /* 0x80 - ANL A, R0
|
jb302@36
|
275 258 * 0x81 - ANL A, R1
|
jb302@36
|
276 259 * 0x82 - ANL A, R2
|
jb302@36
|
277 260 * 0x83 - ANL A, R3
|
jb302@36
|
278 261 * 0x84 - ANL A, DPH
|
jb302@36
|
279 262 * 0x85 - ANL A, DPL
|
jb302@36
|
280 263 * 0x86 - ANL A, #data8
|
jb302@36
|
281 264 * 0x87 - ANL A, @DPTR */
|
jb302@36
|
282 265 void
|
jb302@36
|
283 266 ANL(void) {
|
jb302@36
|
284 267 1 if (NNN < 6) {
|
jb302@36
|
285 268 2 A = A & get_reg(NNN);
|
jb302@36
|
286 269 2 }
|
jb302@36
|
287 270 1 else {
|
jb302@36
|
288 271 2 switch (NNN) {
|
jb302@36
|
289 272 3
|
jb302@36
|
290 273 3 case 6:
|
jb302@36
|
291 274 3 A = A & fetch();
|
jb302@36
|
292 275 3 break;
|
jb302@36
|
293 276 3
|
jb302@36
|
294 277 3 case 7:
|
jb302@36
|
295 278 3 set_wide(TMP, get_wide(DPTR));
|
jb302@36
|
296 279 3 A = A & mem[TMP];
|
jb302@36
|
297 280 3 break;
|
jb302@36
|
298 281 3 }
|
jb302@36
|
299 282 2 }
|
jb302@36
|
300 283 1 set_zp(A);
|
jb302@36
|
301 284 1 }
|
jb302@36
|
302 285
|
jb302@36
|
303 286 /* 0x88 - ORL A, R0
|
jb302@36
|
304 287 * 0x89 - ORL A, R1
|
jb302@36
|
305 288 * 0x8A - ORL A, R2
|
jb302@36
|
306 289 * 0x8B - ORL A, R3
|
jb302@36
|
307 290 * 0x8C - ORL A, DPH
|
jb302@36
|
308 291 * 0x8D - ORL A, DPL
|
jb302@36
|
309 292 * 0x8E - ORL A, #data8
|
jb302@36
|
310 293 * 0x8F - ORL A, @DPTR */
|
jb302@36
|
311 294 void
|
jb302@36
|
312 295 ORL(void) {
|
jb302@36
|
313 296 1 if (NNN < 6) {
|
jb302@36
|
314 297 2 A = A | get_reg(NNN);
|
jb302@36
|
315 298 2 }
|
jb302@36
|
316 299 1 else {
|
jb302@36
|
317 300 2 switch (NNN) {
|
jb302@36
|
318 301 3
|
jb302@36
|
319 302 3 case 6:
|
jb302@36
|
320 303 3 A = A | fetch();
|
jb302@36
|
321 C51 COMPILER V9.02 ISET 04/17/2014 15:17:32 PAGE 6
|
jb302@36
|
322
|
jb302@36
|
323 304 3 break;
|
jb302@36
|
324 305 3
|
jb302@36
|
325 306 3 case 7:
|
jb302@36
|
326 307 3 set_wide(TMP, get_wide(DPTR));
|
jb302@36
|
327 308 3 A = A | mem[TMP];
|
jb302@36
|
328 309 3 break;
|
jb302@36
|
329 310 3 }
|
jb302@36
|
330 311 2 }
|
jb302@36
|
331 312 1 set_zp(A);
|
jb302@36
|
332 313 1 }
|
jb302@36
|
333 314
|
jb302@36
|
334 315 /* 0x90 - XRL A, R0
|
jb302@36
|
335 316 * 0x91 - XRL A, R1
|
jb302@36
|
336 317 * 0x92 - XRL A, R2
|
jb302@36
|
337 318 * 0x93 - XRL A, R3
|
jb302@36
|
338 319 * 0x94 - XRL A, DPH
|
jb302@36
|
339 320 * 0x95 - XRL A, DPL
|
jb302@36
|
340 321 * 0x96 - XRL A, #data8
|
jb302@36
|
341 322 * 0x97 - XRL A, @DPTR */
|
jb302@36
|
342 323 void
|
jb302@36
|
343 324 XRL(void) {
|
jb302@36
|
344 325 1 if (NNN < 6) {
|
jb302@36
|
345 326 2 A = A ^ get_reg(NNN);
|
jb302@36
|
346 327 2 }
|
jb302@36
|
347 328 1 else {
|
jb302@36
|
348 329 2 switch (NNN) {
|
jb302@36
|
349 330 3
|
jb302@36
|
350 331 3 case 6:
|
jb302@36
|
351 332 3 A = A ^ fetch();
|
jb302@36
|
352 333 3 break;
|
jb302@36
|
353 334 3
|
jb302@36
|
354 335 3 case 7:
|
jb302@36
|
355 336 3 set_wide(TMP, get_wide(DPTR));
|
jb302@36
|
356 337 3 A = A ^ mem[TMP];
|
jb302@36
|
357 338 3 break;
|
jb302@36
|
358 339 3 }
|
jb302@36
|
359 340 2 }
|
jb302@36
|
360 341 1 set_zp(A);
|
jb302@36
|
361 342 1 }
|
jb302@36
|
362 343
|
jb302@36
|
363 344 /* 0x98 - RL A */
|
jb302@36
|
364 345 void
|
jb302@36
|
365 346 RL(void) {
|
jb302@36
|
366 347 1 A = (A << 1) | (A >> 7);
|
jb302@36
|
367 348 1 }
|
jb302@36
|
368 349
|
jb302@36
|
369 350 /* 0x99 - RLC A */
|
jb302@36
|
370 351 void
|
jb302@36
|
371 352 RLC(void) {
|
jb302@36
|
372 353 1 tmpb = A;
|
jb302@36
|
373 354 1 A = (A << 1) | get_flag(C);
|
jb302@36
|
374 355 1 set_flag(C, tmpb >> 7);
|
jb302@36
|
375 356 1 }
|
jb302@36
|
376 357
|
jb302@36
|
377 358 /* 0x9A - RR A */
|
jb302@36
|
378 359 void
|
jb302@36
|
379 360 RR(void) {
|
jb302@36
|
380 361 1 A = (A >> 1) | (A << 7);
|
jb302@36
|
381 362 1 }
|
jb302@36
|
382 363
|
jb302@36
|
383 364 /* 0x9B - RRC A */
|
jb302@36
|
384 365 void
|
jb302@36
|
385 C51 COMPILER V9.02 ISET 04/17/2014 15:17:32 PAGE 7
|
jb302@36
|
386
|
jb302@36
|
387 366 RRC(void) {
|
jb302@36
|
388 367 1 tmpb = A;
|
jb302@36
|
389 368 1 A = (A >> 1) | (get_flag(C) << 7);
|
jb302@36
|
390 369 1 set_flag(C, tmpb & 0x01);
|
jb302@36
|
391 370 1 }
|
jb302@36
|
392 371
|
jb302@36
|
393 372 /* 0x9C - INC DPTR
|
jb302@36
|
394 373 * 0x9E - INC A */
|
jb302@36
|
395 374 void
|
jb302@36
|
396 375 INC(void) {
|
jb302@36
|
397 376 1 switch (IR) {
|
jb302@36
|
398 377 2
|
jb302@36
|
399 378 2 case 0x9C:
|
jb302@36
|
400 379 2 tmpw = get_wide(DPTR);
|
jb302@36
|
401 380 2 if ((tmpw + 1) > 0xFFFF) {
|
jb302@36
|
402 381 3 set_flag(OV, 1);
|
jb302@36
|
403 382 3 }
|
jb302@36
|
404 383 2 set_wide(DPTR, tmpw + 1);
|
jb302@36
|
405 384 2 set_zp(DPL);
|
jb302@36
|
406 385 2 set_zp(DPH);
|
jb302@36
|
407 386 2 break;
|
jb302@36
|
408 387 2
|
jb302@36
|
409 388 2 case 0x9E:
|
jb302@36
|
410 389 2 if ((A + 1) > 0xFF) {
|
jb302@36
|
411 390 3 set_flag(OV, 1);
|
jb302@36
|
412 391 3 }
|
jb302@36
|
413 392 2 A++;
|
jb302@36
|
414 393 2 set_zp(A);
|
jb302@36
|
415 394 2
|
jb302@36
|
416 395 2 }
|
jb302@36
|
417 396 1 }
|
jb302@36
|
418 397
|
jb302@36
|
419 398 /* 0x9D - DEC DPTR
|
jb302@36
|
420 399 * 0x9F - DEC A */
|
jb302@36
|
421 400 void
|
jb302@36
|
422 401 DEC(void) {
|
jb302@36
|
423 402 1 switch (IR) {
|
jb302@36
|
424 403 2
|
jb302@36
|
425 404 2 case 0x9D:
|
jb302@36
|
426 405 2 tmpw = get_wide(DPTR);
|
jb302@36
|
427 406 2 if ((tmpw - 1) < 0) {
|
jb302@36
|
428 407 3 set_flag(OV, 1);
|
jb302@36
|
429 408 3 }
|
jb302@36
|
430 409 2 set_wide(DPTR, tmpw - 1);
|
jb302@36
|
431 410 2 set_zp(DPL);
|
jb302@36
|
432 411 2 set_zp(DPH);
|
jb302@36
|
433 412 2
|
jb302@36
|
434 413 2 case 0x9F:
|
jb302@36
|
435 414 2 if ((A - 1) < 0) {
|
jb302@36
|
436 415 3 set_flag(OV, 1);
|
jb302@36
|
437 416 3 }
|
jb302@36
|
438 417 2 A--;
|
jb302@36
|
439 418 2 set_zp(A);
|
jb302@36
|
440 419 2 }
|
jb302@36
|
441 420 1 }
|
jb302@36
|
442 421
|
jb302@36
|
443 422 /* 0xA0 - ADD A, R0
|
jb302@36
|
444 423 * 0xA1 - ADD A, R1
|
jb302@36
|
445 424 * 0xA2 - ADD A, R2
|
jb302@36
|
446 425 * 0xA3 - ADD A, R3
|
jb302@36
|
447 426 * 0xA4 - ADD A, DPH
|
jb302@36
|
448 427 * 0xA5 - ADD A, DPL
|
jb302@36
|
449 C51 COMPILER V9.02 ISET 04/17/2014 15:17:32 PAGE 8
|
jb302@36
|
450
|
jb302@36
|
451 428 * 0xA6 - ADD A, #data8
|
jb302@36
|
452 429 * 0xA7 - ADD A, @DPTR */
|
jb302@36
|
453 430 void
|
jb302@36
|
454 431 ADD(void) {
|
jb302@36
|
455 432 1 if (NNN < 6) {
|
jb302@36
|
456 433 2 if ((A + get_reg(NNN)) > 0xFF) {
|
jb302@36
|
457 434 3 set_flag(OV, 1);
|
jb302@36
|
458 435 3 }
|
jb302@36
|
459 436 2 else {
|
jb302@36
|
460 437 3 set_flag(OV, 0);
|
jb302@36
|
461 438 3 }
|
jb302@36
|
462 439 2 A = A + get_reg(NNN);
|
jb302@36
|
463 440 2 set_zp(A);
|
jb302@36
|
464 441 2 }
|
jb302@36
|
465 442 1 else {
|
jb302@36
|
466 443 2 switch (NNN) {
|
jb302@36
|
467 444 3
|
jb302@36
|
468 445 3 case 6:
|
jb302@36
|
469 446 3 tmpb = fetch();
|
jb302@36
|
470 447 3 if ((A + tmpb) > 0xFF) {
|
jb302@36
|
471 448 4 set_flag(OV, 1);
|
jb302@36
|
472 449 4 }
|
jb302@36
|
473 450 3 else {
|
jb302@36
|
474 451 4 set_flag(OV, 0);
|
jb302@36
|
475 452 4 }
|
jb302@36
|
476 453 3 A = A + tmpb;
|
jb302@36
|
477 454 3 set_zp(A);
|
jb302@36
|
478 455 3 break;
|
jb302@36
|
479 456 3
|
jb302@36
|
480 457 3 case 7:
|
jb302@36
|
481 458 3 set_wide(TMP, get_wide(DPTR));
|
jb302@36
|
482 459 3 if ((A + mem[TMP]) > 0xFF) {
|
jb302@36
|
483 460 4 set_flag(OV, 1);
|
jb302@36
|
484 461 4 }
|
jb302@36
|
485 462 3 else {
|
jb302@36
|
486 463 4 set_flag(OV, 0);
|
jb302@36
|
487 464 4 }
|
jb302@36
|
488 465 3 A = A + mem[TMP];
|
jb302@36
|
489 466 3 set_zp(A);
|
jb302@36
|
490 467 3 break;
|
jb302@36
|
491 468 3 }
|
jb302@36
|
492 469 2 }
|
jb302@36
|
493 470 1
|
jb302@36
|
494 471 1 }
|
jb302@36
|
495 472
|
jb302@36
|
496 473 /* 0xA8 - ADDC A, R0
|
jb302@36
|
497 474 * 0xA9 - ADDC A, R1
|
jb302@36
|
498 475 * 0xAA - ADDC A, R2
|
jb302@36
|
499 476 * 0xAB - ADDC A, R3
|
jb302@36
|
500 477 * 0xAC - ADDC A, DPH
|
jb302@36
|
501 478 * 0xAD - ADDC A, DPL
|
jb302@36
|
502 479 * 0xAE - ADDC A, #data8
|
jb302@36
|
503 480 * 0xAF - ADDC A, @DPTR */
|
jb302@36
|
504 481 void
|
jb302@36
|
505 482 ADDC(void) {
|
jb302@36
|
506 483 1 if (NNN < 6) {
|
jb302@36
|
507 484 2 if ((A + get_reg(NNN) + get_flag(C)) > 0xFF) {
|
jb302@36
|
508 485 3 set_flag(C, 1);
|
jb302@36
|
509 486 3 }
|
jb302@36
|
510 487 2 else {
|
jb302@36
|
511 488 3 set_flag(C, 0);
|
jb302@36
|
512 489 3 }
|
jb302@36
|
513 C51 COMPILER V9.02 ISET 04/17/2014 15:17:32 PAGE 9
|
jb302@36
|
514
|
jb302@36
|
515 490 2 A = A + get_reg(NNN) + get_flag(C);
|
jb302@36
|
516 491 2 set_zp(A);
|
jb302@36
|
517 492 2 }
|
jb302@36
|
518 493 1 else {
|
jb302@36
|
519 494 2 switch (NNN) {
|
jb302@36
|
520 495 3
|
jb302@36
|
521 496 3 case 6:
|
jb302@36
|
522 497 3 tmpb = fetch();
|
jb302@36
|
523 498 3 if ((A + tmpb + get_flag(C)) > 0xFF) {
|
jb302@36
|
524 499 4 set_flag(C, 1);
|
jb302@36
|
525 500 4 }
|
jb302@36
|
526 501 3 else {
|
jb302@36
|
527 502 4 set_flag(C, 0);
|
jb302@36
|
528 503 4 }
|
jb302@36
|
529 504 3 A = A + tmpb + get_flag(C);
|
jb302@36
|
530 505 3 set_zp(A);
|
jb302@36
|
531 506 3 break;
|
jb302@36
|
532 507 3
|
jb302@36
|
533 508 3 case 7:
|
jb302@36
|
534 509 3 set_wide(TMP, get_wide(DPTR));
|
jb302@36
|
535 510 3 if ((A + mem[TMP] + get_flag(C)) > 0xFF) {
|
jb302@36
|
536 511 4 set_flag(C, 1);
|
jb302@36
|
537 512 4 }
|
jb302@36
|
538 513 3 else {
|
jb302@36
|
539 514 4 set_flag(C, 0);
|
jb302@36
|
540 515 4 }
|
jb302@36
|
541 516 3 A = A + mem[TMP] + get_flag(C);
|
jb302@36
|
542 517 3 set_zp(A);
|
jb302@36
|
543 518 3 break;
|
jb302@36
|
544 519 3 }
|
jb302@36
|
545 520 2 }
|
jb302@36
|
546 521 1
|
jb302@36
|
547 522 1
|
jb302@36
|
548 523 1 }
|
jb302@36
|
549 524
|
jb302@36
|
550 525 /* 0xB0 - SUB A, R0
|
jb302@36
|
551 526 * 0xB1 - SUB A, R1
|
jb302@36
|
552 527 * 0xB2 - SUB A, R2
|
jb302@36
|
553 528 * 0xB3 - SUB A, R3
|
jb302@36
|
554 529 * 0xB4 - SB A, DPH
|
jb302@36
|
555 530 * 0xB5 - SUB A, DPL
|
jb302@36
|
556 531 * 0xB6 - SUB A, #data8
|
jb302@36
|
557 532 * 0xB7 - SUB A, @DPTR */
|
jb302@36
|
558 533 void
|
jb302@36
|
559 534 SUB(void) {
|
jb302@36
|
560 535 1 if (NNN < 6) {
|
jb302@36
|
561 536 2 if ((A - get_reg(NNN)) < 0){
|
jb302@36
|
562 537 3 set_flag(S, 1);
|
jb302@36
|
563 538 3 }
|
jb302@36
|
564 539 2 else {
|
jb302@36
|
565 540 3 set_flag(S, 0);
|
jb302@36
|
566 541 3 }
|
jb302@36
|
567 542 2 A = A - get_reg(NNN);
|
jb302@36
|
568 543 2 set_zp(A);
|
jb302@36
|
569 544 2 }
|
jb302@36
|
570 545 1 else {
|
jb302@36
|
571 546 2 switch (NNN) {
|
jb302@36
|
572 547 3
|
jb302@36
|
573 548 3 case 6:
|
jb302@36
|
574 549 3 tmpb = fetch();
|
jb302@36
|
575 550 3 if ((A - tmpb) < 0) {
|
jb302@36
|
576 551 4 set_flag(S, 1);
|
jb302@36
|
577 C51 COMPILER V9.02 ISET 04/17/2014 15:17:32 PAGE 10
|
jb302@36
|
578
|
jb302@36
|
579 552 4 }
|
jb302@36
|
580 553 3 else {
|
jb302@36
|
581 554 4 set_flag(S, 0);
|
jb302@36
|
582 555 4 }
|
jb302@36
|
583 556 3 A = A - tmpb;
|
jb302@36
|
584 557 3 set_zp(A);
|
jb302@36
|
585 558 3 break;
|
jb302@36
|
586 559 3
|
jb302@36
|
587 560 3 case 7:
|
jb302@36
|
588 561 3 set_wide(TMP, get_wide(DPTR));
|
jb302@36
|
589 562 3 if ((A - mem[TMP]) < 0) {
|
jb302@36
|
590 563 4 set_flag(S, 1);
|
jb302@36
|
591 564 4 }
|
jb302@36
|
592 565 3 else {
|
jb302@36
|
593 566 4 set_flag(S, 0);
|
jb302@36
|
594 567 4 }
|
jb302@36
|
595 568 3 A = A - mem[TMP];
|
jb302@36
|
596 569 3 set_zp(A);
|
jb302@36
|
597 570 3 break;
|
jb302@36
|
598 571 3 }
|
jb302@36
|
599 572 2 }
|
jb302@36
|
600 573 1 }
|
jb302@36
|
601 574
|
jb302@36
|
602 575 /* 0xB8 - SUBB A, R0
|
jb302@36
|
603 576 * 0xB9 - SUBB A, R1
|
jb302@36
|
604 577 * 0xBA - SUBB A, R2
|
jb302@36
|
605 578 * 0xBB - SUBB A, R3
|
jb302@36
|
606 579 * 0xBC - SUBB A, DPH
|
jb302@36
|
607 580 * 0xBD - SUBB A, DPL
|
jb302@36
|
608 581 * 0xBE - SUBB A, #data8
|
jb302@36
|
609 582 * 0xBF - SUBB A, @DPTR */
|
jb302@36
|
610 583 void
|
jb302@36
|
611 584 SUBB(void) {
|
jb302@36
|
612 585 1 if (NNN < 6) {
|
jb302@36
|
613 586 2 if ((A - get_reg(NNN) - get_flag(C)) < 0){
|
jb302@36
|
614 587 3 set_flag(C, 1);
|
jb302@36
|
615 588 3 }
|
jb302@36
|
616 589 2 else {
|
jb302@36
|
617 590 3 set_flag(C, 0);
|
jb302@36
|
618 591 3 }
|
jb302@36
|
619 592 2 A = A - get_reg(NNN) -get_flag(C);
|
jb302@36
|
620 593 2 set_zp(A);
|
jb302@36
|
621 594 2 }
|
jb302@36
|
622 595 1 else {
|
jb302@36
|
623 596 2 switch (NNN) {
|
jb302@36
|
624 597 3
|
jb302@36
|
625 598 3 case 6:
|
jb302@36
|
626 599 3 tmpb = fetch();
|
jb302@36
|
627 600 3 if ((A - tmpb - get_flag(C)) < 0) {
|
jb302@36
|
628 601 4 set_flag(C, 1);
|
jb302@36
|
629 602 4 }
|
jb302@36
|
630 603 3 else {
|
jb302@36
|
631 604 4 set_flag(C, 0);
|
jb302@36
|
632 605 4 }
|
jb302@36
|
633 606 3 A = A - tmpb - get_flag(C);
|
jb302@36
|
634 607 3 set_zp(A);
|
jb302@36
|
635 608 3 break;
|
jb302@36
|
636 609 3
|
jb302@36
|
637 610 3 case 7:
|
jb302@36
|
638 611 3 set_wide(TMP, get_wide(DPTR));
|
jb302@36
|
639 612 3 if ((A - mem[TMP] - get_flag(C)) < 0) {
|
jb302@36
|
640 613 4 set_flag(C, 1);
|
jb302@36
|
641 C51 COMPILER V9.02 ISET 04/17/2014 15:17:32 PAGE 11
|
jb302@36
|
642
|
jb302@36
|
643 614 4 }
|
jb302@36
|
644 615 3 else {
|
jb302@36
|
645 616 4 set_flag(C, 0);
|
jb302@36
|
646 617 4 }
|
jb302@36
|
647 618 3 A = A - mem[TMP] - get_flag(C);
|
jb302@36
|
648 619 3 set_zp(A);
|
jb302@36
|
649 620 3 break;
|
jb302@36
|
650 621 3 }
|
jb302@36
|
651 622 2 }
|
jb302@36
|
652 623 1 }
|
jb302@36
|
653 624
|
jb302@36
|
654 625 void
|
jb302@36
|
655 626 PJMP(void) {
|
jb302@36
|
656 627 1 /* implement me */
|
jb302@36
|
657 628 1 }
|
jb302@36
|
658 629
|
jb302@36
|
659 630 void
|
jb302@36
|
660 631 PCALL(void) {
|
jb302@36
|
661 632 1 /* implement me */
|
jb302@36
|
662 633 1 }
|
jb302@36
|
663 634
|
jb302@36
|
664 635 /* 0xD0 - DJNZ R0, rel8
|
jb302@36
|
665 636 * 0xD1 - DJNZ R1, rel8
|
jb302@36
|
666 637 * 0xD2 - DJNZ R2, rel8
|
jb302@36
|
667 638 * 0xD3 - DJNZ R3, rel8 */
|
jb302@36
|
668 639 void
|
jb302@36
|
669 640 DJNZ(void) {
|
jb302@36
|
670 641 1 set_reg(NNN, get_reg(NNN) - 1);
|
jb302@36
|
671 642 1 if (get_reg(NNN) == 0) {
|
jb302@36
|
672 643 2 set_wide(PC, get_wide(PC) + (signed char)fetch() - 1);
|
jb302@36
|
673 644 2 }
|
jb302@36
|
674 645 1 else {
|
jb302@36
|
675 646 2 inc_pc(1);
|
jb302@36
|
676 647 2 }
|
jb302@36
|
677 648 1 }
|
jb302@36
|
678 649
|
jb302@36
|
679 650 /* 0xD4 - CJNE R0, #data, rel8
|
jb302@36
|
680 651 * 0xD5 - CJNE R1, #data, rel8
|
jb302@36
|
681 652 * 0xD6 - CJNE R2, #data, rel8
|
jb302@36
|
682 653 * 0xD7 - CJNE R3, #data, rel8
|
jb302@36
|
683 654 * 0xDF - CJNE A, #data8, rel8 */
|
jb302@36
|
684 655 void
|
jb302@36
|
685 656 CJNE(void) {
|
jb302@36
|
686 657 1 switch(IR) {
|
jb302@36
|
687 658 2
|
jb302@36
|
688 659 2 case 0xDF:
|
jb302@36
|
689 660 2 tmpb = fetch();
|
jb302@36
|
690 661 2 if (tmpb != A) {
|
jb302@36
|
691 662 3 set_wide(PC, get_wide(PC) + (signed char)fetch() - 1);
|
jb302@36
|
692 663 3 }
|
jb302@36
|
693 664 2 else {
|
jb302@36
|
694 665 3 inc_pc(1);
|
jb302@36
|
695 666 3 }
|
jb302@36
|
696 667 2 break;
|
jb302@36
|
697 668 2
|
jb302@36
|
698 669 2
|
jb302@36
|
699 670 2 default:
|
jb302@36
|
700 671 2 tmpb = fetch();
|
jb302@36
|
701 672 2 if (tmpb != get_reg(NNN - 4)) {
|
jb302@36
|
702 673 3 set_wide(PC, get_wide(PC) + (signed char)fetch() - 1);
|
jb302@36
|
703 674 3 }
|
jb302@36
|
704 675 2 else {
|
jb302@36
|
705 C51 COMPILER V9.02 ISET 04/17/2014 15:17:32 PAGE 12
|
jb302@36
|
706
|
jb302@36
|
707 676 3 inc_pc(1);
|
jb302@36
|
708 677 3 }
|
jb302@36
|
709 678 2 break;
|
jb302@36
|
710 679 2 }
|
jb302@36
|
711 680 1 }
|
jb302@36
|
712 681
|
jb302@36
|
713 682 /* 0xD8 - LJMP addr16 */
|
jb302@36
|
714 683 void
|
jb302@36
|
715 684 LJMP(void) {
|
jb302@36
|
716 685 1 set_wide(PC, fetch_wide());
|
jb302@36
|
717 686 1 }
|
jb302@36
|
718 687
|
jb302@36
|
719 688 /* 0xD9 - LCALL addr16 */
|
jb302@36
|
720 689 void
|
jb302@36
|
721 690 LCALL(void) {
|
jb302@36
|
722 691 1 /* push PC to stack */
|
jb302@36
|
723 692 1 mem[get_wide(SP)] = get_reg(PCL);
|
jb302@36
|
724 693 1 set_wide(SP, get_wide(SP) + 1);
|
jb302@36
|
725 694 1 mem[get_wide(SP)] = get_reg(PCH);
|
jb302@36
|
726 695 1 set_wide(SP, get_wide(SP) + 1);
|
jb302@36
|
727 696 1 /* jmp */
|
jb302@36
|
728 697 1 set_wide(PC, fetch_wide());
|
jb302@36
|
729 698 1 }
|
jb302@36
|
730 699
|
jb302@36
|
731 700 /* 0xDA - RET */
|
jb302@36
|
732 701 void
|
jb302@36
|
733 702 RET(void) {
|
jb302@36
|
734 703 1 /* get PC from stack */
|
jb302@36
|
735 704 1 set_wide(SP, get_wide(SP) - 1);
|
jb302@36
|
736 705 1 tmpb = mem[get_wide(SP)]; /* PCH */
|
jb302@36
|
737 706 1 set_wide(SP, get_wide(SP) - 1);
|
jb302@36
|
738 707 1 set_wide(PC, MWIDE(tmpb, mem[get_wide(SP)]));
|
jb302@36
|
739 708 1 }
|
jb302@36
|
740 709
|
jb302@36
|
741 710 void
|
jb302@36
|
742 711 RETI(void) {
|
jb302@36
|
743 712 1 /* implement me */
|
jb302@36
|
744 713 1 }
|
jb302@36
|
745 714
|
jb302@36
|
746 715 /* 0xDC - SJMP rel8 */
|
jb302@36
|
747 716 void
|
jb302@36
|
748 717 SJMP(void) {
|
jb302@36
|
749 718 1 /* -1 because the fetch() increments the PC */
|
jb302@36
|
750 719 1 set_wide(PC, get_wide(PC) + (signed char)fetch() -1);
|
jb302@36
|
751 720 1 }
|
jb302@36
|
752 721
|
jb302@36
|
753 722 /* 0xDD - JMP @A+DPTR
|
jb302@36
|
754 723 * 0xDE - JMP @DPTR */
|
jb302@36
|
755 724 void
|
jb302@36
|
756 725 JMP(void) {
|
jb302@36
|
757 726 1 switch(IR) {
|
jb302@36
|
758 727 2
|
jb302@36
|
759 728 2 case 0xDD:
|
jb302@36
|
760 729 2 set_wide(PC, A + get_wide(DPTR));
|
jb302@36
|
761 730 2 break;
|
jb302@36
|
762 731 2
|
jb302@36
|
763 732 2 case 0xDE:
|
jb302@36
|
764 733 2 set_wide(PC, get_wide(DPTR));
|
jb302@36
|
765 734 2 break;
|
jb302@36
|
766 735 2 }
|
jb302@36
|
767 736 1 }
|
jb302@36
|
768 737
|
jb302@36
|
769 C51 COMPILER V9.02 ISET 04/17/2014 15:17:32 PAGE 13
|
jb302@36
|
770
|
jb302@36
|
771 738 /* 0xE0 - JZ rel8 */
|
jb302@36
|
772 739 void
|
jb302@36
|
773 740 JZ(void) {
|
jb302@36
|
774 741 1 if (get_flag(Z) == 1) {
|
jb302@36
|
775 742 2 set_wide(PC, get_wide(PC) + (signed char)fetch() -1);
|
jb302@36
|
776 743 2 }
|
jb302@36
|
777 744 1 /* skip rel8 if jump not needed */
|
jb302@36
|
778 745 1 else {
|
jb302@36
|
779 746 2 inc_pc(1);
|
jb302@36
|
780 747 2 }
|
jb302@36
|
781 748 1 }
|
jb302@36
|
782 749
|
jb302@36
|
783 750 /* 0xE1 - JNZ rel8 */
|
jb302@36
|
784 751 void
|
jb302@36
|
785 752 JNZ(void) {
|
jb302@36
|
786 753 1 if (get_flag(Z) == 0) {
|
jb302@36
|
787 754 2 set_wide(PC, get_wide(PC) + (signed char)fetch() -1);
|
jb302@36
|
788 755 2 }
|
jb302@36
|
789 756 1 else {
|
jb302@36
|
790 757 2 inc_pc(1);
|
jb302@36
|
791 758 2 }
|
jb302@36
|
792 759 1 }
|
jb302@36
|
793 760
|
jb302@36
|
794 761 /* 0xE2 - JC rel8 */
|
jb302@36
|
795 762 void
|
jb302@36
|
796 763 JC(void) {
|
jb302@36
|
797 764 1 if (get_flag(C) == 1) {
|
jb302@36
|
798 765 2 set_wide(PC, get_wide(PC) + (signed char)fetch() -1);
|
jb302@36
|
799 766 2 }
|
jb302@36
|
800 767 1 else {
|
jb302@36
|
801 768 2 inc_pc(1);
|
jb302@36
|
802 769 2 }
|
jb302@36
|
803 770 1 }
|
jb302@36
|
804 771
|
jb302@36
|
805 772 /* 0xE3 - JNC rel8 */
|
jb302@36
|
806 773 void
|
jb302@36
|
807 774 JNC(void) {
|
jb302@36
|
808 775 1 if (get_flag(C) == 0) {
|
jb302@36
|
809 776 2 set_wide(PC, get_wide(PC) + (signed char)fetch() -1);
|
jb302@36
|
810 777 2 }
|
jb302@36
|
811 778 1 else {
|
jb302@36
|
812 779 2 inc_pc(1);
|
jb302@36
|
813 780 2 }
|
jb302@36
|
814 781 1 }
|
jb302@36
|
815 782
|
jb302@36
|
816 783 /* 0xE4 - JPO rel8 */
|
jb302@36
|
817 784 void
|
jb302@36
|
818 785 JPO(void) {
|
jb302@36
|
819 786 1 /* P = 1 when parity even */
|
jb302@36
|
820 787 1 if (get_flag(P) == 0) {
|
jb302@36
|
821 788 2 set_wide(PC, get_wide(PC) + (signed char)fetch() -1);
|
jb302@36
|
822 789 2 }
|
jb302@36
|
823 790 1 else {
|
jb302@36
|
824 791 2 inc_pc(1);
|
jb302@36
|
825 792 2 }
|
jb302@36
|
826 793 1
|
jb302@36
|
827 794 1 }
|
jb302@36
|
828 795
|
jb302@36
|
829 796 /* 0xE5 - JPE rel8 */
|
jb302@36
|
830 797 void
|
jb302@36
|
831 798 JPE(void) {
|
jb302@36
|
832 799 1 if (get_flag(P) == 1) {
|
jb302@36
|
833 C51 COMPILER V9.02 ISET 04/17/2014 15:17:32 PAGE 14
|
jb302@36
|
834
|
jb302@36
|
835 800 2 set_wide(PC, get_wide(PC) + (signed char)fetch() -1);
|
jb302@36
|
836 801 2 }
|
jb302@36
|
837 802 1 else {
|
jb302@36
|
838 803 2 inc_pc(1);
|
jb302@36
|
839 804 2 }
|
jb302@36
|
840 805 1 }
|
jb302@36
|
841 806
|
jb302@36
|
842 807 /* 0xE6 - JS rel8 */
|
jb302@36
|
843 808 void
|
jb302@36
|
844 809 JS(void) {
|
jb302@36
|
845 810 1 if (get_flag(S) == 1) {
|
jb302@36
|
846 811 2 set_wide(PC, get_wide(PC) + (signed char)fetch() -1);
|
jb302@36
|
847 812 2 }
|
jb302@36
|
848 813 1 else {
|
jb302@36
|
849 814 2 inc_pc(1);
|
jb302@36
|
850 815 2 }
|
jb302@36
|
851 816 1 }
|
jb302@36
|
852 817
|
jb302@36
|
853 818 /* 0xE7 - JNS rel8 */
|
jb302@36
|
854 819 void
|
jb302@36
|
855 820 JNS(void) {
|
jb302@36
|
856 821 1 if (get_flag(S) == 0) {
|
jb302@36
|
857 822 2 set_wide(PC, get_wide(PC) + (signed char)fetch() -1);
|
jb302@36
|
858 823 2 }
|
jb302@36
|
859 824 1 else {
|
jb302@36
|
860 825 2 inc_pc(1);
|
jb302@36
|
861 826 2 }
|
jb302@36
|
862 827 1 }
|
jb302@36
|
863 828
|
jb302@36
|
864 829 /* 0xE8 - PUSH R0
|
jb302@36
|
865 830 * 0xE9 - PUSH R1
|
jb302@36
|
866 831 * 0xEA - PUSH R2
|
jb302@36
|
867 832 * 0xEB - PUSH R3
|
jb302@36
|
868 833 * 0xEC - PUSH DPH
|
jb302@36
|
869 834 * 0xED - PUSH DPL
|
jb302@36
|
870 835 * 0xEE - PUSH A
|
jb302@36
|
871 836 * 0xEF - PUSH FLAGS */
|
jb302@36
|
872 837 void
|
jb302@36
|
873 838 PUSH(void) {
|
jb302@36
|
874 839 1 if (NNN < 6) {
|
jb302@36
|
875 840 2 mem[get_wide(SP)] = get_reg(NNN);
|
jb302@36
|
876 841 2 set_wide(SP, get_wide(SP) + 1);
|
jb302@36
|
877 842 2
|
jb302@36
|
878 843 2 }
|
jb302@36
|
879 844 1 else {
|
jb302@36
|
880 845 2 switch(IR) {
|
jb302@36
|
881 846 3
|
jb302@36
|
882 847 3 case 0xEE:
|
jb302@36
|
883 848 3 mem[get_wide(SP)] = A;
|
jb302@36
|
884 849 3 set_wide(SP, get_wide(SP) + 1);
|
jb302@36
|
885 850 3 break;
|
jb302@36
|
886 851 3
|
jb302@36
|
887 852 3 case 0xEF:
|
jb302@36
|
888 853 3 mem[get_wide(SP)] = flags;
|
jb302@36
|
889 854 3 set_wide(SP, get_wide(SP) + 1);
|
jb302@36
|
890 855 3 break;
|
jb302@36
|
891 856 3
|
jb302@36
|
892 857 3 default:
|
jb302@36
|
893 858 3 break;
|
jb302@36
|
894 859 3 }
|
jb302@36
|
895 860 2 }
|
jb302@36
|
896 861 1 }
|
jb302@36
|
897 C51 COMPILER V9.02 ISET 04/17/2014 15:17:32 PAGE 15
|
jb302@36
|
898
|
jb302@36
|
899 862
|
jb302@36
|
900 863 /* 0xF0 - POP R0
|
jb302@36
|
901 864 * 0xF1 - POP R1
|
jb302@36
|
902 865 * 0xF2 - POP R2
|
jb302@36
|
903 866 * 0xF3 - POP R3
|
jb302@36
|
904 867 * 0xF4 - POP DPH
|
jb302@36
|
905 868 * 0xF5 - POP DPL
|
jb302@36
|
906 869 * 0xF6 - POP A
|
jb302@36
|
907 870 * 0xF7 - POP FLAGS */
|
jb302@36
|
908 871 void
|
jb302@36
|
909 872 POP(void) {
|
jb302@36
|
910 873 1 if (NNN < 6) {
|
jb302@36
|
911 874 2 set_wide(SP, get_wide(SP) - 1);
|
jb302@36
|
912 875 2 set_reg(NNN, mem[get_wide(SP)]);
|
jb302@36
|
913 876 2 }
|
jb302@36
|
914 877 1 else {
|
jb302@36
|
915 878 2 switch(IR) {
|
jb302@36
|
916 879 3
|
jb302@36
|
917 880 3 case 0xF6:
|
jb302@36
|
918 881 3 set_wide(SP, get_wide(SP) - 1);
|
jb302@36
|
919 882 3 A = mem[get_wide(SP)];
|
jb302@36
|
920 883 3 break;
|
jb302@36
|
921 884 3
|
jb302@36
|
922 885 3 case 0xF7:
|
jb302@36
|
923 886 3 set_wide(SP, get_wide(SP) - 1);
|
jb302@36
|
924 887 3 flags = mem[get_wide(SP)];
|
jb302@36
|
925 888 3 break;
|
jb302@36
|
926 889 3
|
jb302@36
|
927 890 3 default:
|
jb302@36
|
928 891 3 break;
|
jb302@36
|
929 892 3 }
|
jb302@36
|
930 893 2 }
|
jb302@36
|
931 894 1 }
|
jb302@36
|
932 895
|
jb302@36
|
933 896
|
jb302@36
|
934 897 /* 0xF8 - MUL R0, R1 */
|
jb302@36
|
935 898 void
|
jb302@36
|
936 899 MUL(void) {
|
jb302@36
|
937 900 1 /* implement me */
|
jb302@36
|
938 901 1 }
|
jb302@36
|
939 902
|
jb302@36
|
940 903 /* 0xF9 - DIV R0, R1 */
|
jb302@36
|
941 904 void
|
jb302@36
|
942 905 DIV(void) {
|
jb302@36
|
943 906 1 /* implement me */
|
jb302@36
|
944 907 1 }
|
jb302@36
|
945 908
|
jb302@36
|
946 909 /* 0xFA - DA A */
|
jb302@36
|
947 910 void
|
jb302@36
|
948 911 DA(void) {
|
jb302@36
|
949 912 1 /* implement me */
|
jb302@36
|
950 913 1 }
|
jb302@36
|
951 914
|
jb302@36
|
952 915 /* 0xFC - IN port_addr */
|
jb302@36
|
953 916 void
|
jb302@36
|
954 917 IN(void) {
|
jb302@36
|
955 918 1 /* implement me */
|
jb302@36
|
956 919 1 }
|
jb302@36
|
957 920
|
jb302@36
|
958 921 /* 0xFD - OUT port_addr */
|
jb302@36
|
959 922 void
|
jb302@36
|
960 923 OUT(void) {
|
jb302@36
|
961 C51 COMPILER V9.02 ISET 04/17/2014 15:17:32 PAGE 16
|
jb302@36
|
962
|
jb302@36
|
963 924 1 /* implement me */
|
jb302@36
|
964 925 1 }
|
jb302@36
|
965 926
|
jb302@36
|
966 927 /* 0xFE INT vect8 */
|
jb302@36
|
967 928 void
|
jb302@36
|
968 929 INT(void) {
|
jb302@36
|
969 930 1 /* implement me */
|
jb302@36
|
970 931 1 }
|
jb302@36
|
971 932
|
jb302@36
|
972 933 /* 0xFF - HLT */
|
jb302@36
|
973 934 void
|
jb302@36
|
974 935 HLT(void) {
|
jb302@36
|
975 936 1 /* implement me */
|
jb302@36
|
976 937 1 }
|
jb302@36
|
977
|
jb302@36
|
978
|
jb302@36
|
979 MODULE INFORMATION: STATIC OVERLAYABLE
|
jb302@36
|
980 CODE SIZE = 2932 ----
|
jb302@36
|
981 CONSTANT SIZE = ---- ----
|
jb302@36
|
982 XDATA SIZE = ---- ----
|
jb302@36
|
983 PDATA SIZE = ---- ----
|
jb302@36
|
984 DATA SIZE = ---- ----
|
jb302@36
|
985 IDATA SIZE = ---- ----
|
jb302@36
|
986 BIT SIZE = ---- ----
|
jb302@36
|
987 EDATA SIZE = ---- ----
|
jb302@36
|
988 HDATA SIZE = ---- ----
|
jb302@36
|
989 XDATA CONST SIZE = ---- ----
|
jb302@36
|
990 FAR CONST SIZE = ---- ----
|
jb302@36
|
991 END OF MODULE INFORMATION.
|
jb302@36
|
992
|
jb302@36
|
993
|
jb302@36
|
994 C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
|