jb302@36
|
1 C51 COMPILER V9.02 MAIN 04/17/2014 15:17:33 PAGE 1
|
jb302@36
|
2
|
jb302@36
|
3
|
jb302@36
|
4 C51 COMPILER V9.02, COMPILATION OF MODULE MAIN
|
jb302@36
|
5 OBJECT MODULE PLACED IN main.obj
|
jb302@36
|
6 COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE src\main.c OMF2 BROWSE DEBUG PRINT(.\main.lst) OBJECT(main.obj)
|
jb302@36
|
7
|
jb302@36
|
8 line level source
|
jb302@36
|
9
|
jb302@36
|
10 1 #include <stdio.h>
|
jb302@36
|
11 2 #include <reg52.h>
|
jb302@36
|
12 3
|
jb302@36
|
13 4 #define MAIN
|
jb302@36
|
14 5 #include "mem.h"
|
jb302@36
|
15 6 #include "iset.h"
|
jb302@36
|
16 7
|
jb302@36
|
17 8 /* fill instruction table
|
jb302@36
|
18 9 * MCS-51 - this needs to be stored in code memory */
|
jb302@36
|
19 10
|
jb302@36
|
20 11 FUNCTION_TABLE const code iset = {
|
jb302@36
|
21 12 NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP,
|
jb302@36
|
22 13 SET, CLR, SET, CLR, SET, CLR, CPL, CPL,
|
jb302@36
|
23 14 XCSD, SFA, LAF, MOV, MOV, MOV, MOV, MOV,
|
jb302@36
|
24 15 MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV,
|
jb302@36
|
25 16 MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV,
|
jb302@36
|
26 17 MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV,
|
jb302@36
|
27 18 MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV,
|
jb302@36
|
28 19 MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV,
|
jb302@36
|
29 20 MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV,
|
jb302@36
|
30 21 MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV,
|
jb302@36
|
31 22 MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV,
|
jb302@36
|
32 23 MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV,
|
jb302@36
|
33 24 MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV,
|
jb302@36
|
34 25 MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV,
|
jb302@36
|
35 26 MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV,
|
jb302@36
|
36 27 MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV,
|
jb302@36
|
37 28 ANL, ANL, ANL, ANL, ANL, ANL, ANL, ANL,
|
jb302@36
|
38 29 ORL, ORL, ORL, ORL, ORL, ORL, ORL, ORL,
|
jb302@36
|
39 30 XRL, XRL, XRL, XRL, XRL, XRL, XRL, XRL,
|
jb302@36
|
40 31 RL, RLC, RR, RRC, INC, DEC, INC, DEC,
|
jb302@36
|
41 32 ADD, ADD, ADD, ADD, ADD, ADD, ADD, ADD,
|
jb302@36
|
42 33 ADDC, ADDC, ADDC, ADDC, ADDC, ADDC, ADDC, ADDC,
|
jb302@36
|
43 34 SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB,
|
jb302@36
|
44 35 SUBB, SUBB, SUBB, SUBB, SUBB, SUBB, SUBB, SUBB,
|
jb302@36
|
45 36 PJMP, PJMP, PJMP, PJMP, PJMP, PJMP, PJMP, PJMP,
|
jb302@36
|
46 37 PCALL, PCALL, PCALL, PCALL, PCALL, PCALL, PCALL, PCALL,
|
jb302@36
|
47 38 DJNZ, DJNZ, DJNZ, DJNZ, CJNE, CJNE, CJNE, CJNE,
|
jb302@36
|
48 39 LJMP, LCALL, RET, RETI, SJMP, JMP, JMP, CJNE,
|
jb302@36
|
49 40 JZ, JNZ, JC, JNC, JPO, JPE, JS, JNS,
|
jb302@36
|
50 41 PUSH, PUSH, PUSH, PUSH, PUSH, PUSH, PUSH, PUSH,
|
jb302@36
|
51 42 POP, POP, POP, POP, POP, POP, POP, POP,
|
jb302@36
|
52 43 MUL, DIV, DA, NOP, IN, OUT, INT, HLT
|
jb302@36
|
53 44 };
|
jb302@36
|
54 45
|
jb302@36
|
55 46 BYTE pause; /* becomes 1 when we hit a break point in run mode */
|
jb302@36
|
56 47 BYTE free_run; /* free run if not 0 */
|
jb302@36
|
57 48 BYTE pause; /* pause flag */
|
jb302@36
|
58 49 WIDE addrc; /* address counter */
|
jb302@36
|
59 50 BYTE args[4]; /* dbg args */
|
jb302@36
|
60 51
|
jb302@36
|
61 52 WIDE bp[8] = { 0xFFFF,
|
jb302@36
|
62 53 0xFFFF,
|
jb302@36
|
63 54 0xFFFF,
|
jb302@36
|
64 55 0xFFFF,
|
jb302@36
|
65 C51 COMPILER V9.02 MAIN 04/17/2014 15:17:33 PAGE 2
|
jb302@36
|
66
|
jb302@36
|
67 56 0xFFFF,
|
jb302@36
|
68 57 0xFFFF,
|
jb302@36
|
69 58 0xFFFF,
|
jb302@36
|
70 59 0xFFFF
|
jb302@36
|
71 60 };
|
jb302@36
|
72 61
|
jb302@36
|
73 62
|
jb302@36
|
74 63 void
|
jb302@36
|
75 64 snd(BYTE c) {
|
jb302@36
|
76 65 1 putchar(c);
|
jb302@36
|
77 66 1 }
|
jb302@36
|
78 67
|
jb302@36
|
79 68 BYTE
|
jb302@36
|
80 69 rcv(void) {
|
jb302@36
|
81 70 1 return getchar();
|
jb302@36
|
82 71 1 }
|
jb302@36
|
83 72
|
jb302@36
|
84 73 void
|
jb302@36
|
85 74 step(void) {
|
jb302@36
|
86 75 1 IR = fetch();
|
jb302@36
|
87 76 1 iset.ops[IR]();
|
jb302@36
|
88 77 1 }
|
jb302@36
|
89 78
|
jb302@36
|
90 79 void
|
jb302@36
|
91 80 run(void) {
|
jb302@36
|
92 81 1 while (pause != 1) {
|
jb302@36
|
93 82 2 step();
|
jb302@36
|
94 83 2 for (addrc = 0; addrc < 8; addrc++) {
|
jb302@36
|
95 84 3 if (bp[addrc] == get_wide(PC)) {
|
jb302@36
|
96 85 4 pause = 1;
|
jb302@36
|
97 86 4 }
|
jb302@36
|
98 87 3 }
|
jb302@36
|
99 88 2 }
|
jb302@36
|
100 89 1 }
|
jb302@36
|
101 90
|
jb302@36
|
102 91 void controller() {
|
jb302@36
|
103 92 1 if (free_run == 0) {
|
jb302@36
|
104 93 2 switch (rcv()) {
|
jb302@36
|
105 94 3
|
jb302@36
|
106 95 3 /* step */
|
jb302@36
|
107 96 3 case 0x00:
|
jb302@36
|
108 97 3 step();
|
jb302@36
|
109 98 3 break;
|
jb302@36
|
110 99 3
|
jb302@36
|
111 100 3 /* run for length steps*/
|
jb302@36
|
112 101 3 case 0x01:
|
jb302@36
|
113 102 3 run();
|
jb302@36
|
114 103 3 break;
|
jb302@36
|
115 104 3
|
jb302@36
|
116 105 3 /* set reg */
|
jb302@36
|
117 106 3 case 0x02:
|
jb302@36
|
118 107 3 args[0] = rcv(); /* reg */
|
jb302@36
|
119 108 3 args[1] = rcv(); /* val */
|
jb302@36
|
120 109 3 regs[args[0]] = args[1];
|
jb302@36
|
121 110 3 break;
|
jb302@36
|
122 111 3
|
jb302@36
|
123 112 3 /* get reg */
|
jb302@36
|
124 113 3 case 0x03:
|
jb302@36
|
125 114 3 args[0] = rcv(); /* reg */
|
jb302@36
|
126 115 3 snd(regs[args[0]]);
|
jb302@36
|
127 116 3 break;
|
jb302@36
|
128 117 3
|
jb302@36
|
129 C51 COMPILER V9.02 MAIN 04/17/2014 15:17:33 PAGE 3
|
jb302@36
|
130
|
jb302@36
|
131 118 3 /* set flag */
|
jb302@36
|
132 119 3 case 0x04:
|
jb302@36
|
133 120 3 args[0] = rcv(); /* flag */
|
jb302@36
|
134 121 3 args[1] = rcv(); /* on? */
|
jb302@36
|
135 122 3 set_flag(args[0], args[1]);
|
jb302@36
|
136 123 3 break;
|
jb302@36
|
137 124 3
|
jb302@36
|
138 125 3 /* get flag */
|
jb302@36
|
139 126 3 case 0x05:
|
jb302@36
|
140 127 3 args[0] = rcv(); /* flag */
|
jb302@36
|
141 128 3 snd(get_flag(args[0]));
|
jb302@36
|
142 129 3 break;
|
jb302@36
|
143 130 3
|
jb302@36
|
144 131 3 /* write mem block */
|
jb302@36
|
145 132 3 case 0x06:
|
jb302@36
|
146 133 3 args[0] = rcv(); /* addr high */
|
jb302@36
|
147 134 3 args[1] = rcv(); /* addr low */
|
jb302@36
|
148 135 3 args[2] = rcv(); /* length high */
|
jb302@36
|
149 136 3 args[3] = rcv(); /* length low */
|
jb302@36
|
150 137 3 tmpw = MWIDE(args[0], args[1]);
|
jb302@36
|
151 138 3 for (addrc = tmpw; addrc < tmpw + MWIDE(args[2], args[3]); addrc++) {
|
jb302@36
|
152 139 4 if (addrc >= 0xFFFF) {
|
jb302@36
|
153 140 5 break;
|
jb302@36
|
154 141 5 }
|
jb302@36
|
155 142 4 mem[addrc] = rcv();
|
jb302@36
|
156 143 4 }
|
jb302@36
|
157 144 3 break;
|
jb302@36
|
158 145 3
|
jb302@36
|
159 146 3 /* read mem block */
|
jb302@36
|
160 147 3 case 0x07:
|
jb302@36
|
161 148 3 args[0] = rcv(); /* addr high */
|
jb302@36
|
162 149 3 args[1] = rcv(); /* addr low */
|
jb302@36
|
163 150 3 args[2] = rcv(); /* length high */
|
jb302@36
|
164 151 3 args[3] = rcv(); /* length low */
|
jb302@36
|
165 152 3 tmpw = MWIDE(args[0], args[1]);
|
jb302@36
|
166 153 3 for (addrc = tmpw; addrc < tmpw + MWIDE(args[2], args[3]); addrc++) {
|
jb302@36
|
167 154 4 if (addrc >= 0xFFFF) {
|
jb302@36
|
168 155 5 break;
|
jb302@36
|
169 156 5 }
|
jb302@36
|
170 157 4 snd(mem[addrc]);
|
jb302@36
|
171 158 4 }
|
jb302@36
|
172 159 3 break;
|
jb302@36
|
173 160 3
|
jb302@36
|
174 161 3 /* get A */
|
jb302@36
|
175 162 3 case 0x09:
|
jb302@36
|
176 163 3 snd(A);
|
jb302@36
|
177 164 3 break;
|
jb302@36
|
178 165 3
|
jb302@36
|
179 166 3 /* get flags */
|
jb302@36
|
180 167 3 case 0x0A:
|
jb302@36
|
181 168 3 snd(flags);
|
jb302@36
|
182 169 3 break;
|
jb302@36
|
183 170 3
|
jb302@36
|
184 171 3 /* get instruction register */
|
jb302@36
|
185 172 3 case 0x0B:
|
jb302@36
|
186 173 3 snd(IR);
|
jb302@36
|
187 174 3 break;
|
jb302@36
|
188 175 3
|
jb302@36
|
189 176 3 case 0x0C:
|
jb302@36
|
190 177 3 args[0] = rcv(); /* length high */
|
jb302@36
|
191 178 3 args[1] = rcv(); /* length low */
|
jb302@36
|
192 179 3 tmpw = get_wide(PC);
|
jb302@36
|
193 C51 COMPILER V9.02 MAIN 04/17/2014 15:17:33 PAGE 4
|
jb302@36
|
194
|
jb302@36
|
195 180 3 for (addrc = tmpw ; addrc < tmpw + MWIDE(args[0], args[1]) ; addrc++) {
|
jb302@36
|
196 181 4 if (addrc == 0xFFFF) {
|
jb302@36
|
197 182 5 break;
|
jb302@36
|
198 183 5 }
|
jb302@36
|
199 184 4 step();
|
jb302@36
|
200 185 4 }
|
jb302@36
|
201 186 3 break;
|
jb302@36
|
202 187 3
|
jb302@36
|
203 188 3 case 0x0D:
|
jb302@36
|
204 189 3 free_run = 1;
|
jb302@36
|
205 190 3 break;
|
jb302@36
|
206 191 3
|
jb302@36
|
207 192 3 /* set break point */
|
jb302@36
|
208 193 3 case 0x0E:
|
jb302@36
|
209 194 3 args[0] = rcv(); /* bp index */
|
jb302@36
|
210 195 3 args[1] = rcv(); /* address high */
|
jb302@36
|
211 196 3 args[2] = rcv(); /* address low */
|
jb302@36
|
212 197 3 if (args[0] > 7) {
|
jb302@36
|
213 198 4 break;
|
jb302@36
|
214 199 4 }
|
jb302@36
|
215 200 3 bp[args[0]] = MWIDE(args[1], args[2]);
|
jb302@36
|
216 201 3 break;
|
jb302@36
|
217 202 3
|
jb302@36
|
218 203 3 /* test cmd */
|
jb302@36
|
219 204 3 case 0x54:
|
jb302@36
|
220 205 3 snd('A');
|
jb302@36
|
221 206 3 break;
|
jb302@36
|
222 207 3 }
|
jb302@36
|
223 208 2 }
|
jb302@36
|
224 209 1 else {
|
jb302@36
|
225 210 2 step();
|
jb302@36
|
226 211 2 }
|
jb302@36
|
227 212 1 }
|
jb302@36
|
228 213
|
jb302@36
|
229 214 void
|
jb302@36
|
230 215 main(void) {
|
jb302@36
|
231 216 1 /* serial set up
|
jb302@36
|
232 217 1 * SCON - mode 1, 8-bit UART, enable rcvr
|
jb302@36
|
233 218 1 * TMOD - timer 1, mode 2, 8-bit reload
|
jb302@36
|
234 219 1 * TH1 - reload value for 1200 baud @ 12MHz
|
jb302@36
|
235 220 1 * TR1 - timer 1 run
|
jb302@36
|
236 221 1 * TI - set TI to send first char of UART */
|
jb302@36
|
237 222 1 /* dont go into free run on restart */
|
jb302@36
|
238 223 1 free_run = 0;
|
jb302@36
|
239 224 1 SCON = 0x50;
|
jb302@36
|
240 225 1 TMOD |= 0x20;
|
jb302@36
|
241 226 1 TH1 = 0xE8;
|
jb302@36
|
242 227 1 TR1 = 1;
|
jb302@36
|
243 228 1 TI = 1;
|
jb302@36
|
244 229 1 for (;;) {
|
jb302@36
|
245 230 2 controller();
|
jb302@36
|
246 231 2 }
|
jb302@36
|
247 232 1 }
|
jb302@36
|
248 233
|
jb302@36
|
249
|
jb302@36
|
250
|
jb302@36
|
251 MODULE INFORMATION: STATIC OVERLAYABLE
|
jb302@36
|
252 CODE SIZE = 600 ----
|
jb302@36
|
253 CONSTANT SIZE = 768 ----
|
jb302@36
|
254 XDATA SIZE = 32767 ----
|
jb302@36
|
255 PDATA SIZE = ---- ----
|
jb302@36
|
256 DATA SIZE = 46 ----
|
jb302@36
|
257 C51 COMPILER V9.02 MAIN 04/17/2014 15:17:33 PAGE 5
|
jb302@36
|
258
|
jb302@36
|
259 IDATA SIZE = ---- ----
|
jb302@36
|
260 BIT SIZE = ---- ----
|
jb302@36
|
261 EDATA SIZE = ---- ----
|
jb302@36
|
262 HDATA SIZE = ---- ----
|
jb302@36
|
263 XDATA CONST SIZE = ---- ----
|
jb302@36
|
264 FAR CONST SIZE = ---- ----
|
jb302@36
|
265 END OF MODULE INFORMATION.
|
jb302@36
|
266
|
jb302@36
|
267
|
jb302@36
|
268 C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
|