[26] | 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 | }
|
---|