1 | /*
|
---|
2 | * TOPPERS/JSP Kernel
|
---|
3 | * Toyohashi Open Platform for Embedded Real-Time Systems/
|
---|
4 | * Just Standard Profile Kernel
|
---|
5 | *
|
---|
6 | * Copyright (C) 2000-2002 by Embedded and Real-Time Systems Laboratory
|
---|
7 | * Toyohashi Univ. of Technology, JAPAN
|
---|
8 | * Copyright (C) 2003-2004 by Ryosuke Takeuchi
|
---|
9 | * Platform Development Center RIOCH COMPANY,LTD. JAPAN
|
---|
10 | * Copyright (C) 2010 by Naoki Saito
|
---|
11 | * Nagoya Municipal Industrial Research Institute, JAPAN
|
---|
12 | *
|
---|
13 | * ä¸è¨è使¨©è
|
---|
14 | ã¯ï¼Free Software Foundation ã«ãã£ã¦å
|
---|
15 | ¬è¡¨ããã¦ãã
|
---|
16 | * GNU General Public License ã® Version 2 ã«è¨è¿°ããã¦ããæ¡ä»¶ãï¼ä»¥
|
---|
17 | * ä¸ã®(1)ã(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§
|
---|
18 | * ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹å¤ã»åé
|
---|
19 | å¸ï¼ä»¥ä¸ï¼
|
---|
20 | * å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
|
---|
21 | * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
|
---|
22 | * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
|
---|
23 | * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼
|
---|
24 | * (2) æ¬ã½ããã¦ã§ã¢ãåå©ç¨å¯è½ãªãã¤ããªã³ã¼ãï¼ãªãã±ã¼ã¿ãã«ãªã
|
---|
25 | * ã¸ã§ã¯ããã¡ã¤ã«ãã©ã¤ãã©ãªãªã©ï¼ã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼å©ç¨
|
---|
26 | * ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è
|
---|
27 | ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è使¨©è¡¨ç¤ºï¼
|
---|
28 | * ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
|
---|
29 | * (3) æ¬ã½ããã¦ã§ã¢ãåå©ç¨ä¸å¯è½ãªãã¤ããªã³ã¼ãã®å½¢ã¾ãã¯æ©å¨ã«çµ
|
---|
30 | * ã¿è¾¼ãã å½¢ã§å©ç¨ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºãããã¨ï¼
|
---|
31 | * (a) å©ç¨ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è
|
---|
32 | ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½
|
---|
33 | * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
|
---|
34 | * (b) å©ç¨ã®å½¢æ
|
---|
35 | ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼ä¸è¨è使¨©è
|
---|
36 | ã«å ±åãã
|
---|
37 | * ãã¨ï¼
|
---|
38 | * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
|
---|
39 | * 害ãããï¼ä¸è¨è使¨©è
|
---|
40 | ãå
|
---|
41 | 責ãããã¨ï¼
|
---|
42 | *
|
---|
43 | * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨è使¨©è
|
---|
44 | ã¯ï¼
|
---|
45 | * æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ã
|
---|
46 | * ãªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çããã
|
---|
47 | * ããªãæå®³ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
|
---|
48 | *
|
---|
49 | * @(#) $Id: m16cvec.cpp,v 1.3 2004/09/03 17:33:49 honda Exp $
|
---|
50 | */
|
---|
51 | // m16cvec.c : ã³ã³ã½ã¼ã« ã¢ããªã±ã¼ã·ã§ã³ç¨ã®ã¨ã³ã㪠ãã¤ã³ãã®å®ç¾©
|
---|
52 | //
|
---|
53 | //------------------------------------------------------------------------------
|
---|
54 | // 夿´å±¥æ´
|
---|
55 | //version yyyy/mm/dd æ¦è¦
|
---|
56 | //---------- -------------------------------------------------------------------
|
---|
57 | // 01.00 2004/01/02 åç
|
---|
58 | // 01.01 2004/08/06 FIX VECTOR ãåºå®å¤ã§æã£ãã®ããã©ã¡ã¿ã«ã¦å¤æ´å¯è½ã¨ãã
|
---|
59 | // EXCINIB ã®é
|
---|
60 | åãï¼ã®å ´åã®åé¡ä¿®æ£ã
|
---|
61 | // M30262F8FGã®çææãå²ãè¾¼ã¿ãã¯ã¿ã1è¡å¤ãä¸å
|
---|
62 | ·åä¿®æ£ã
|
---|
63 | // M30620FCAFPã®JSP1.3ç¨ãã¯ã¿çæã³ã¼ããæ¡ä»¶ã³ã³ãã¤ã«åã
|
---|
64 | // 02.01 2010/12/28 Cè¨èªãã¡ã¤ã«ã¨ããï¼
|
---|
65 | // bool åãæ±ããã stdbool.h ãã¤ã³ã¯ã«ã¼ãããï¼
|
---|
66 | //-----------------------------------------------------------------------------
|
---|
67 |
|
---|
68 | //#include "stdafx.h"
|
---|
69 | #include <stdio.h>
|
---|
70 | #include <stdlib.h>
|
---|
71 | #include <string.h>
|
---|
72 | #include <stdbool.h>
|
---|
73 |
|
---|
74 | #define MAX_INCLUDE 8
|
---|
75 | #define MAX_INT 64
|
---|
76 | #define MAX_EXC 9
|
---|
77 | #define MAX_VEC MAX_INT
|
---|
78 | #define BUF_SIZE 512
|
---|
79 | #define STR_SIZE 128
|
---|
80 |
|
---|
81 | #define INT_STATE 0
|
---|
82 | #define EXC_STATE 1
|
---|
83 | #define NORMAL_STATE 2
|
---|
84 |
|
---|
85 | struct VEC {
|
---|
86 | int no;
|
---|
87 | char no_name[STR_SIZE];
|
---|
88 | char no_label[STR_SIZE];
|
---|
89 | };
|
---|
90 |
|
---|
91 | static char const version[] = "01.01";
|
---|
92 | static char const default_input_file[] = "kernel_cfg.i";
|
---|
93 | static char const default_output_file[] = "m16cvec.inc";
|
---|
94 | static char const default_unused_int[] = "unused_interrupt";
|
---|
95 | static char const in_portid[] = "serial_in_portid";
|
---|
96 | static char const out_portid[] = "serial_out_portid";
|
---|
97 | static char const in_handler[] = "serial_in_handler_xyzx";
|
---|
98 | static char const out_handler[] = "serial_out_handler_xyzx";
|
---|
99 | static char const comment[] = ";************************************************";
|
---|
100 | static char const int_vec[] = ";* interrupt vectors *";
|
---|
101 | static char const exc_vec[] = ";* exception vectors *";
|
---|
102 | static char const func01[] = "\t.section bss_NE,DATA,ALIGN";
|
---|
103 | static char const func02[] = "\t.blkw\t1";
|
---|
104 | static char const func03[] = "\t.section program, code, align";
|
---|
105 | static char const lf[] = "\n";
|
---|
106 | static char const default_fvector[] = "0fffdch";
|
---|
107 |
|
---|
108 | static int board_mode = 0;
|
---|
109 | static char input_file[STR_SIZE];
|
---|
110 | static char output_file[STR_SIZE];
|
---|
111 | static char include_file[MAX_INCLUDE][STR_SIZE];
|
---|
112 | static int num_include = 0;
|
---|
113 | static int num_vec[2] = {0, 0};
|
---|
114 | static int max_int = 47;
|
---|
115 | static int num_nodec = 0;
|
---|
116 | static int vec_state = NORMAL_STATE;
|
---|
117 | static struct VEC vec_table[2][MAX_VEC];
|
---|
118 | static char unused_vec[2][STR_SIZE];
|
---|
119 |
|
---|
120 | static void set_M30620FCAFP(FILE* pfo, int no, int m);
|
---|
121 | static void set_M30262F8FG(FILE* pfo, int no, int m);
|
---|
122 | static void set_global(FILE* pfo, char const * t);
|
---|
123 | static void set_comment(FILE* pfo, char const * t);
|
---|
124 | static void set_org(FILE* pfo, char const * t);
|
---|
125 | static void set_vector(FILE* pfo, int kind, int no);
|
---|
126 | static void set_vector2(FILE* pfo, int kind, int no);
|
---|
127 | static bool test_string(char** s, char const * t);
|
---|
128 | static bool skip_space(char** s);
|
---|
129 | static bool skip_char(char** s, char const c);
|
---|
130 | static char fvector[STR_SIZE];
|
---|
131 |
|
---|
132 | int main(int argc, char* argv[])
|
---|
133 | {
|
---|
134 | FILE* pfi;
|
---|
135 | FILE* pfo;
|
---|
136 | FILE* pfw;
|
---|
137 | char buf[BUF_SIZE];
|
---|
138 | struct VEC *v;
|
---|
139 | int i, j, k;
|
---|
140 | bool cnv, dec;
|
---|
141 | char* s;
|
---|
142 | char* p;
|
---|
143 | char* q;
|
---|
144 | char c;
|
---|
145 |
|
---|
146 | strcpy(input_file, default_input_file);
|
---|
147 | strcpy(output_file, default_output_file);
|
---|
148 | strcpy(unused_vec[0], default_unused_int);
|
---|
149 | strcpy(unused_vec[1], default_unused_int);
|
---|
150 | strcpy(fvector,default_fvector);
|
---|
151 |
|
---|
152 | for(i = 1 ; i < argc ; i++){
|
---|
153 | s = argv[i];
|
---|
154 | if(*s++ == '-'){
|
---|
155 | c = *s++;
|
---|
156 | skip_space(&s);
|
---|
157 | switch(c){
|
---|
158 | case 'I': // ã¤ã³ã¯ã«ã¼ããã¡ã¤ã«ã®è¨å®
|
---|
159 | case 'i':
|
---|
160 | if(num_include < MAX_INCLUDE){
|
---|
161 | strcpy(include_file[num_include], s);
|
---|
162 | num_include++;
|
---|
163 | }
|
---|
164 | break;
|
---|
165 | case 'F': // ãã£ãã¯ã¹ãã¯ã¿ã®å®ç¾©
|
---|
166 | case 'f':
|
---|
167 | strcpy(fvector, s);
|
---|
168 | break;
|
---|
169 | case 'O': // ã¢ã¦ãããããã¡ã¤ã«ã®è¨å®
|
---|
170 | case 'o':
|
---|
171 | strcpy(output_file, s);
|
---|
172 | break;
|
---|
173 | case 'R': // ã¤ã³ããããã¡ã¤ã«ã®è¨å®
|
---|
174 | case 'r':
|
---|
175 | strcpy(input_file, s);
|
---|
176 | break;
|
---|
177 | case 'M': // ãã¼ãã¢ã¼ã
|
---|
178 | case 'm':
|
---|
179 | board_mode = atoi(s);
|
---|
180 | break;
|
---|
181 | default:
|
---|
182 | printf("m16cvec -R<input_file> -O<output_file> -I<include_file> -M<mode> -F<fixvector>\n");
|
---|
183 | break;
|
---|
184 | }
|
---|
185 | }
|
---|
186 | }
|
---|
187 | printf("version = %s\n", version);
|
---|
188 | printf("input file = %s\n", input_file);
|
---|
189 | printf("output file = %s\n", output_file);
|
---|
190 | printf("Fix Vector = %s\n", fvector);
|
---|
191 | printf("board mode = %d : ", board_mode);
|
---|
192 | if(board_mode == 1)
|
---|
193 | printf("M30262F8FG(OAKS16 MINI)\n");
|
---|
194 | else
|
---|
195 | printf("M30620FCAFP(OAKS16)\n");
|
---|
196 | if((pfi = fopen(input_file, "r")) == NULL){
|
---|
197 | fprintf(stderr, "can't open input file !");
|
---|
198 | exit(1);
|
---|
199 | }
|
---|
200 | if((pfo = fopen(output_file, "w")) == NULL){
|
---|
201 | fclose(pfi);
|
---|
202 | fprintf(stderr, "can't open output file !");
|
---|
203 | exit(1);
|
---|
204 | }
|
---|
205 | for(i = 0 ; i < num_include ; i++){
|
---|
206 | printf("include file = %s\n", include_file[i]);
|
---|
207 | }
|
---|
208 | for(;;){
|
---|
209 | if((fgets(buf, BUF_SIZE, pfi)) == NULL)
|
---|
210 | break;
|
---|
211 | s = buf;
|
---|
212 | switch(vec_state){
|
---|
213 | case INT_STATE:
|
---|
214 | case EXC_STATE:
|
---|
215 | if(test_string(&s, ";"))
|
---|
216 | vec_state = NORMAL_STATE;
|
---|
217 | else if(test_string(&s, "{")){
|
---|
218 | v = &vec_table[vec_state][num_vec[vec_state]];
|
---|
219 | p = &v->no_name[0];
|
---|
220 | if(skip_space(&s))
|
---|
221 | continue;
|
---|
222 | dec = true;
|
---|
223 | while(*s != ','){
|
---|
224 | if(*s == 0)
|
---|
225 | continue;
|
---|
226 | if(*s == '(' || *s == ')' || *s <= ' '){
|
---|
227 | s++;
|
---|
228 | continue;
|
---|
229 | }
|
---|
230 | if(*s < '0' || *s > '9')
|
---|
231 | dec = false;
|
---|
232 | *p++ = *s++;
|
---|
233 | }
|
---|
234 | s++;
|
---|
235 | *p++ = 0;
|
---|
236 | if(dec)
|
---|
237 | v->no = atoi(v->no_name);
|
---|
238 | else{
|
---|
239 | v->no = -1;
|
---|
240 | num_nodec++;
|
---|
241 | }
|
---|
242 | p = &v->no_label[0];
|
---|
243 | if(skip_char(&s, ','))
|
---|
244 | continue;
|
---|
245 | test_string(&s, "INT_ENTRY(");
|
---|
246 | test_string(&s, "EXC_ENTRY(");
|
---|
247 | test_string(&s, "CFG_INT_ENTRY(");
|
---|
248 | test_string(&s, "CFG_EXC_ENTRY(");
|
---|
249 | test_string(&s, "(FP)");
|
---|
250 | if(skip_space(&s))
|
---|
251 | continue;
|
---|
252 | while(*s != ')' && *s != ',' && *s > ' '){
|
---|
253 | *p++ = *s++;
|
---|
254 | }
|
---|
255 | *p++ = 0;
|
---|
256 | num_vec[vec_state]++;
|
---|
257 | }
|
---|
258 | else
|
---|
259 | continue;
|
---|
260 | break;
|
---|
261 | default:
|
---|
262 | if(!test_string(&s, "const"))
|
---|
263 | continue;
|
---|
264 | if(test_string(&s, "INHINIB"))
|
---|
265 | vec_state = INT_STATE;
|
---|
266 | else if(test_string(&s, "EXCINIB"))
|
---|
267 | vec_state = EXC_STATE;
|
---|
268 | break;
|
---|
269 | }
|
---|
270 | }
|
---|
271 | do{
|
---|
272 | cnv = false;
|
---|
273 | for(i = 0 ; i < num_include ; i++){
|
---|
274 | if((pfw = fopen(include_file[i], "r")) != NULL){
|
---|
275 | for(;;){
|
---|
276 | if((fgets(buf, BUF_SIZE, pfw)) == NULL)
|
---|
277 | break;
|
---|
278 | s = buf;
|
---|
279 | if(!test_string(&s, "#define"))
|
---|
280 | continue;
|
---|
281 | if(skip_space(&s))
|
---|
282 | continue;
|
---|
283 | for(k = 0 ; k < 2 ; k++){
|
---|
284 | for(j = 0 ; j < num_vec[k] ; j++){
|
---|
285 | v = &vec_table[k][j];
|
---|
286 | if(v->no < 0){
|
---|
287 | p = s;
|
---|
288 | dec = true;
|
---|
289 | if(test_string(&p, v->no_name)){
|
---|
290 | q = &v->no_name[0];
|
---|
291 | if(!skip_space(&p)){
|
---|
292 | while(*p > ' '){
|
---|
293 | if(*p == '(' || *p == ')'){
|
---|
294 | p++;
|
---|
295 | continue;
|
---|
296 | }
|
---|
297 | if(*p < '0' || *p > '9')
|
---|
298 | dec = false;
|
---|
299 | *q++ = *p++;
|
---|
300 | }
|
---|
301 | }
|
---|
302 | *q++ = 0;
|
---|
303 | }
|
---|
304 | else
|
---|
305 | dec = false;
|
---|
306 | if(dec){
|
---|
307 | v->no = atoi(v->no_name);
|
---|
308 | num_nodec--;
|
---|
309 | }
|
---|
310 | }
|
---|
311 | }
|
---|
312 | }
|
---|
313 | }
|
---|
314 | fclose(pfw);
|
---|
315 | }
|
---|
316 | else
|
---|
317 | printf("open error %s !!\n", include_file[i]);
|
---|
318 | }
|
---|
319 | }while(cnv);
|
---|
320 |
|
---|
321 | for(i = 0 ; i < num_vec[EXC_STATE] ; i++){
|
---|
322 | v = &vec_table[EXC_STATE][i];
|
---|
323 | if(v->no >= 32 && v->no < MAX_INT){
|
---|
324 | vec_table[INT_STATE][num_vec[INT_STATE]] = vec_table[EXC_STATE][i];
|
---|
325 | num_vec[INT_STATE]++;
|
---|
326 | for(j = i ; j < (num_vec[EXC_STATE]-1) ; j++)
|
---|
327 | vec_table[EXC_STATE][j] = vec_table[EXC_STATE][j+1];
|
---|
328 | num_vec[EXC_STATE]--;
|
---|
329 | }
|
---|
330 | }
|
---|
331 | for(j = 0 ; j < num_vec[INT_STATE] ; j++){
|
---|
332 | v = &vec_table[INT_STATE][j];
|
---|
333 | if(v->no >= MAX_INT)
|
---|
334 | strcpy(unused_vec[INT_STATE], v->no_label);
|
---|
335 | else if(max_int < v->no)
|
---|
336 | max_int = v->no;
|
---|
337 | printf("int %d:%d,%s,%s\n", j, v->no, v->no_name, v->no_label);
|
---|
338 | }
|
---|
339 | for(j = 0 ; j < num_vec[EXC_STATE] ; j++){
|
---|
340 | v = &vec_table[EXC_STATE][j];
|
---|
341 | if((v->no >= MAX_EXC && v->no < 32) || v->no >= MAX_INT)
|
---|
342 | strcpy(unused_vec[EXC_STATE], v->no_label);
|
---|
343 | printf("exc %d:%d,%s,%s\n", j, v->no, v->no_name, v->no_label);
|
---|
344 | }
|
---|
345 | if(num_nodec > 0)
|
---|
346 | printf("%dã®ã¨ã¯ã»ãã·ã§ã³çªå·ãç¹å®ã§ãã¾ããï¼\n", num_nodec);
|
---|
347 | else{
|
---|
348 | fputs(lf, pfo);
|
---|
349 | for(i = 0 ; i < 2 ; i++){
|
---|
350 | for(j = 0 ; j < num_vec[i] ; j++)
|
---|
351 | set_global(pfo, vec_table[i][j].no_label);
|
---|
352 | }
|
---|
353 | if(!strcmp(default_unused_int, unused_vec[0]))
|
---|
354 | set_global(pfo, unused_vec[0]);
|
---|
355 | else if(!strcmp(default_unused_int, unused_vec[1]))
|
---|
356 | set_global(pfo, unused_vec[1]);
|
---|
357 |
|
---|
358 | switch(board_mode){
|
---|
359 | case 1: // M30262F8FG(OAKS16 MINI)
|
---|
360 | set_M30262F8FG(pfo, board_mode, max_int);
|
---|
361 | break;
|
---|
362 | default: // M30620FCAFP(OAKS16)
|
---|
363 | set_M30620FCAFP(pfo, board_mode, max_int);
|
---|
364 | break;
|
---|
365 | }
|
---|
366 |
|
---|
367 | set_comment(pfo, exc_vec);
|
---|
368 | fputs("\t.section\tfvector", pfo);
|
---|
369 | fputs(lf, pfo);
|
---|
370 | set_org(pfo, fvector);
|
---|
371 |
|
---|
372 | for(i = 0 ; i < (MAX_EXC-1) ; i++)
|
---|
373 | set_vector(pfo, EXC_STATE, i);
|
---|
374 | fputs("\t.lword\t_hardware_start\t\t\t; RESET", pfo);
|
---|
375 | fputs(lf, pfo);
|
---|
376 | }
|
---|
377 | fclose(pfi);
|
---|
378 | fclose(pfo);
|
---|
379 | return 0;
|
---|
380 | }
|
---|
381 |
|
---|
382 | /*
|
---|
383 | * set_M30620FCAFP(OAKS16)ç¨ã®ãã¯ãã«ãè¨å®ãã
|
---|
384 | */
|
---|
385 | static void set_M30620FCAFP(FILE* pfo, int no, int m)
|
---|
386 | {
|
---|
387 | #ifdef OAKS16_JSP13
|
---|
388 | struct VEC *v;
|
---|
389 | int x;
|
---|
390 | #endif /* OAKS16_JSP13 */
|
---|
391 | int i;
|
---|
392 |
|
---|
393 | #ifdef OAKS16_JSP13
|
---|
394 | if(no == 2){
|
---|
395 | set_global(pfo, in_portid);
|
---|
396 | set_global(pfo, out_portid);
|
---|
397 | fputs(lf, pfo);
|
---|
398 | fputs(func01, pfo);
|
---|
399 | fputs(lf, pfo);
|
---|
400 | fputs("_", pfo);
|
---|
401 | fputs(in_portid, pfo);
|
---|
402 | fputs(":", pfo);
|
---|
403 | fputs(lf, pfo);
|
---|
404 | fputs(func02, pfo);
|
---|
405 | fputs(lf, pfo);
|
---|
406 | fputs("_", pfo);
|
---|
407 | fputs(out_portid, pfo);
|
---|
408 | fputs(":", pfo);
|
---|
409 | fputs(lf, pfo);
|
---|
410 | fputs(func02, pfo);
|
---|
411 | fputs(lf, pfo);
|
---|
412 | fputs(lf, pfo);
|
---|
413 | v = &vec_table[0][0];
|
---|
414 | for(i = x = 0 ; i < num_vec[0] ; i++, v++){
|
---|
415 | if(v->no >= 17 && v->no < 21){
|
---|
416 | x = 1;
|
---|
417 | break;
|
---|
418 | }
|
---|
419 | }
|
---|
420 | if(x){
|
---|
421 | fputs(func03, pfo);
|
---|
422 | fputs(lf, pfo);
|
---|
423 | v = &vec_table[0][0];
|
---|
424 | for(i = x = 0 ; i < num_vec[0] ; i++, v++){
|
---|
425 | if(v->no == 17 || v->no == 19){
|
---|
426 | fputs(out_handler, pfo);
|
---|
427 | fputs("1:", pfo);
|
---|
428 | fputs(lf, pfo);
|
---|
429 | fputs("\tmov.w\t#1, _", pfo);
|
---|
430 | fputs(out_portid, pfo);
|
---|
431 | fputs(lf, pfo);
|
---|
432 | fputs("\tjmp\t_", pfo);
|
---|
433 | fputs(v->no_label, pfo);
|
---|
434 | fputs(lf, pfo);
|
---|
435 | fputs(out_handler, pfo);
|
---|
436 | fputs("2:", pfo);
|
---|
437 | fputs(lf, pfo);
|
---|
438 | fputs("\tmov.w\t#2, _", pfo);
|
---|
439 | fputs(out_portid, pfo);
|
---|
440 | fputs(lf, pfo);
|
---|
441 | fputs("\tjmp\t_", pfo);
|
---|
442 | fputs(v->no_label, pfo);
|
---|
443 | fputs(lf, pfo);
|
---|
444 | break;
|
---|
445 | }
|
---|
446 | }
|
---|
447 | v = &vec_table[0][0];
|
---|
448 | for(i = x = 0 ; i < num_vec[0] ; i++, v++){
|
---|
449 | if(v->no == 18 || v->no == 20){
|
---|
450 | fputs(in_handler, pfo);
|
---|
451 | fputs("1:", pfo);
|
---|
452 | fputs(lf, pfo);
|
---|
453 | fputs("\tmov.w\t#1, _", pfo);
|
---|
454 | fputs(in_portid, pfo);
|
---|
455 | fputs(lf, pfo);
|
---|
456 | fputs("\tjmp\t_", pfo);
|
---|
457 | fputs(v->no_label, pfo);
|
---|
458 | fputs(lf, pfo);
|
---|
459 | fputs(in_handler, pfo);
|
---|
460 | fputs("2:", pfo);
|
---|
461 | fputs(lf, pfo);
|
---|
462 | fputs("\tmov.w\t#2, _", pfo);
|
---|
463 | fputs(in_portid, pfo);
|
---|
464 | fputs(lf, pfo);
|
---|
465 | fputs("\tjmp\t_", pfo);
|
---|
466 | fputs(v->no_label, pfo);
|
---|
467 | fputs(lf, pfo);
|
---|
468 | break;
|
---|
469 | }
|
---|
470 | }
|
---|
471 | }
|
---|
472 | }
|
---|
473 | #endif /* OAKS16_JSP13 */
|
---|
474 |
|
---|
475 | set_comment(pfo, int_vec);
|
---|
476 | fputs("\t.section\tvvector", pfo);
|
---|
477 | fputs(lf, pfo);
|
---|
478 | set_org(pfo, "VECTOR_ADR");
|
---|
479 | for(i = 0 ; i < MAX_INT ; i++){
|
---|
480 | if(no == 2){
|
---|
481 | if(i >= 17 && i < 21)
|
---|
482 | set_vector2(pfo, INT_STATE, i);
|
---|
483 | else
|
---|
484 | set_vector(pfo, INT_STATE, i);
|
---|
485 | }
|
---|
486 | else
|
---|
487 | set_vector(pfo, INT_STATE, i);
|
---|
488 | }
|
---|
489 | }
|
---|
490 |
|
---|
491 | /*
|
---|
492 | * M30262F8FG(OAKS16 MINI)ã®ãã¯ãã«ãè¨å®ãã
|
---|
493 | */
|
---|
494 | static void set_M30262F8FG(FILE* pfo, int no, int m)
|
---|
495 | {
|
---|
496 | int i;
|
---|
497 |
|
---|
498 | set_comment(pfo, int_vec);
|
---|
499 | fputs("\t.section\tvector", pfo);
|
---|
500 | fputs(lf, pfo);
|
---|
501 | set_org(pfo, "VECTOR_ADR");
|
---|
502 | fputs(";", pfo);
|
---|
503 | fputs(lf, pfo);
|
---|
504 | set_vector(pfo, INT_STATE, 0);
|
---|
505 | set_org(pfo, "(VECTOR_ADR+44)");
|
---|
506 | fputs(lf, pfo);
|
---|
507 | for(i = 11 ; i < 15 ; i++)
|
---|
508 | set_vector(pfo, INT_STATE, i);
|
---|
509 | set_org(pfo, "(VECTOR_ADR+68)");
|
---|
510 | fputs(lf, pfo);
|
---|
511 | if(m < MAX_INT)
|
---|
512 | m = MAX_INT;
|
---|
513 | for(i = 17 ; i < m ; i++)
|
---|
514 | set_vector(pfo, INT_STATE, i);
|
---|
515 | }
|
---|
516 |
|
---|
517 | /*
|
---|
518 | * ã°ãã¼ãã«å®£è¨ãè¨å®ãã
|
---|
519 | */
|
---|
520 | static void set_global(FILE* pfo, char const * t)
|
---|
521 | {
|
---|
522 | fputs("\t.glb\t_", pfo);
|
---|
523 | fputs(t, pfo);
|
---|
524 | fputs(lf, pfo);
|
---|
525 | }
|
---|
526 |
|
---|
527 | /*
|
---|
528 | * ã³ã¡ã³ããè¨å®ãã
|
---|
529 | */
|
---|
530 | static void set_comment(FILE* pfo, char const * t)
|
---|
531 | {
|
---|
532 | fputs(";", pfo);
|
---|
533 | fputs(lf, pfo);
|
---|
534 | fputs(comment, pfo);
|
---|
535 | fputs(lf, pfo);
|
---|
536 | fputs(int_vec, pfo);
|
---|
537 | fputs(lf, pfo);
|
---|
538 | fputs(comment, pfo);
|
---|
539 | fputs(lf, pfo);
|
---|
540 | fputs(";", pfo);
|
---|
541 | fputs(lf, pfo);
|
---|
542 | }
|
---|
543 |
|
---|
544 | /*
|
---|
545 | * ãªãªã¸ã³ãè¨å®ãã
|
---|
546 | */
|
---|
547 | static void set_org(FILE* pfo, char const * t)
|
---|
548 | {
|
---|
549 | fputs("\t.org\t", pfo);
|
---|
550 | fputs(t, pfo);
|
---|
551 | fputs(lf, pfo);
|
---|
552 | }
|
---|
553 |
|
---|
554 | /*
|
---|
555 | * ãã¯ãã«ãè¨å®ãã
|
---|
556 | */
|
---|
557 | static void set_vector(FILE* pfo, int kind, int no)
|
---|
558 | {
|
---|
559 | struct VEC* v = &vec_table[kind][0];
|
---|
560 | char s[6];
|
---|
561 | int i;
|
---|
562 |
|
---|
563 | fputs("\t.lword\t_", pfo);
|
---|
564 | s[0] = '\t';
|
---|
565 | s[1] = ';';
|
---|
566 | s[2] = ' ';
|
---|
567 | s[3] = (no/10)+'0';
|
---|
568 | s[4] = (no%10)+'0';
|
---|
569 | s[5] = 0;
|
---|
570 | for(i = 0 ; i < num_vec[kind] ; i++, v++){
|
---|
571 | if(v->no == no){
|
---|
572 | fputs(v->no_label, pfo);
|
---|
573 | fputs(s, pfo);
|
---|
574 | fputs(lf, pfo);
|
---|
575 | return;
|
---|
576 | }
|
---|
577 | }
|
---|
578 | fputs(unused_vec[kind], pfo);
|
---|
579 | fputs(s, pfo);
|
---|
580 | fputs(lf, pfo);
|
---|
581 | }
|
---|
582 |
|
---|
583 | /*
|
---|
584 | * ãã¯ãã«ãè¨å®ãã(ç¹å¥ç)
|
---|
585 | */
|
---|
586 | static void set_vector2(FILE* pfo, int kind, int no)
|
---|
587 | {
|
---|
588 | struct VEC* v = &vec_table[kind][0];
|
---|
589 | char s[8];
|
---|
590 | int i;
|
---|
591 |
|
---|
592 | s[1] = '\t';
|
---|
593 | s[2] = ';';
|
---|
594 | s[3] = ' ';
|
---|
595 | s[4] = (no/10)+'0';
|
---|
596 | s[5] = (no%10)+'0';
|
---|
597 | s[6] = 0;
|
---|
598 | for(i = 0 ; i < num_vec[kind] ; i++, v++){
|
---|
599 | switch(no){
|
---|
600 | case 17:
|
---|
601 | s[0] = '1';
|
---|
602 | if(v->no == 17 || v->no == 19){
|
---|
603 | fputs("\t.lword\t", pfo);
|
---|
604 | fputs(out_handler, pfo);
|
---|
605 | fputs(s, pfo);
|
---|
606 | fputs(lf, pfo);
|
---|
607 | return;
|
---|
608 | }
|
---|
609 | break;
|
---|
610 | case 18:
|
---|
611 | s[0] = '1';
|
---|
612 | if(v->no == 18 || v->no == 20){
|
---|
613 | fputs("\t.lword\t", pfo);
|
---|
614 | fputs(in_handler, pfo);
|
---|
615 | fputs(s, pfo);
|
---|
616 | fputs(lf, pfo);
|
---|
617 | return;
|
---|
618 | }
|
---|
619 | break;
|
---|
620 | case 19:
|
---|
621 | s[0] = '2';
|
---|
622 | if(v->no == 17 || v->no == 19){
|
---|
623 | fputs("\t.lword\t", pfo);
|
---|
624 | fputs(out_handler, pfo);
|
---|
625 | fputs(s, pfo);
|
---|
626 | fputs(lf, pfo);
|
---|
627 | return;
|
---|
628 | }
|
---|
629 | break;
|
---|
630 | case 20:
|
---|
631 | s[0] = '2';
|
---|
632 | if(v->no == 18 || v->no == 20){
|
---|
633 | fputs("\t.lword\t", pfo);
|
---|
634 | fputs(in_handler, pfo);
|
---|
635 | fputs(s, pfo);
|
---|
636 | fputs(lf, pfo);
|
---|
637 | return;
|
---|
638 | }
|
---|
639 | break;
|
---|
640 | default:
|
---|
641 | break;
|
---|
642 | }
|
---|
643 | }
|
---|
644 | fputs("\t.lword\t_", pfo);
|
---|
645 | fputs(unused_vec[kind], pfo);
|
---|
646 | fputs(s, pfo);
|
---|
647 | fputs(lf, pfo);
|
---|
648 | }
|
---|
649 |
|
---|
650 | /*
|
---|
651 | * æååãæ¯è¼ãã¦åä¸ãªãã°TURE
|
---|
652 | */
|
---|
653 | static bool test_string(char** s, char const *t)
|
---|
654 | {
|
---|
655 | char* p;
|
---|
656 | char c;
|
---|
657 |
|
---|
658 | p = *s;
|
---|
659 | while(*p <= ' '){
|
---|
660 | if(*p == 0)
|
---|
661 | return false;
|
---|
662 | p++;
|
---|
663 | }
|
---|
664 | while((c = *p++) != 0){
|
---|
665 | if(c != *t++)
|
---|
666 | break;
|
---|
667 | if(*t == 0){
|
---|
668 | *s = p;
|
---|
669 | return true;
|
---|
670 | }
|
---|
671 | }
|
---|
672 | return false;
|
---|
673 | }
|
---|
674 |
|
---|
675 | /*
|
---|
676 | * æå®ã®ãã£ã©ã¯ã¿ã¾ã§ã¹ããã
|
---|
677 | */
|
---|
678 | static bool skip_char(char** s, char const c)
|
---|
679 | {
|
---|
680 | char* p;
|
---|
681 |
|
---|
682 | p = *s;
|
---|
683 | while(*p != c){
|
---|
684 | if(*p == 0)
|
---|
685 | break;
|
---|
686 | p++;
|
---|
687 | }
|
---|
688 | if(*p){
|
---|
689 | p++;
|
---|
690 | *s = p;
|
---|
691 | return false;
|
---|
692 | }
|
---|
693 | else{
|
---|
694 | *s = p;
|
---|
695 | return true;
|
---|
696 | }
|
---|
697 | }
|
---|
698 |
|
---|
699 | /*
|
---|
700 | * ã¹ãã¼ã¹ã¾ãã¯ã¿ããã¹ããããã
|
---|
701 | */
|
---|
702 | static bool skip_space(char** s)
|
---|
703 | {
|
---|
704 | char* p;
|
---|
705 |
|
---|
706 | p = *s;
|
---|
707 | while(*p <= ' '){
|
---|
708 | if(*p == 0)
|
---|
709 | break;
|
---|
710 | p++;
|
---|
711 | }
|
---|
712 | *s = p;
|
---|
713 | if(*p)
|
---|
714 | return false;
|
---|
715 | else
|
---|
716 | return true;
|
---|
717 | }
|
---|