OSDN Git Service

step を3段まで可、syntax error で行番号表示、CPU_PROGRAM を随時設定変更できるように変更
authornaruko <naruko@24ea1065-a21e-4ca1-99c9-f5125deb0858>
Sun, 11 Jan 2009 18:46:04 +0000 (18:46 +0000)
committernaruko <naruko@24ea1065-a21e-4ca1-99c9-f5125deb0858>
Sun, 11 Jan 2009 18:46:04 +0000 (18:46 +0000)
git-svn-id: svn+ssh://svn.osdn.net/svnroot/unagi@252 24ea1065-a21e-4ca1-99c9-f5125deb0858

client/trunk/Makefile
client/trunk/script.c
client/trunk/script.h
client/trunk/syntax.h

index 9472097..d18f183 100644 (file)
@@ -5,7 +5,7 @@ ARCHIVE_FILE = \
        debug/debug.mak profile/profile.mak release/release.mak \
        unagi.rc unagi.ico
 ARCHIVE_GZ = unagi_client.0.5.3.tar.gz
-ARCHIVE_ZIP = unagi_053.zip
+ARCHIVE_ZIP = unagi053.zip
 TARGET_DIR = debug
 TARGET_MAK = debug.mak
 ifeq ($(PROFILE),1)
index 277a857..7a11ad7 100644 (file)
@@ -58,7 +58,7 @@ struct variable_manage{
 };
 
 enum{
-       STEP_MAX = 2,
+       STEP_MAX = 3,
        VARIABLE_MAX = STEP_MAX
 };
 
@@ -242,7 +242,7 @@ static int syntax_check_phase(char **word, int word_num, struct script *s, const
                        
                        s->opcode = syntax->script_opcode;
                        if((mode & syntax->permittion) == 0){
-                               printf("%s opcode %s not allowed on current mode\n", SYNTAX_ERROR_PREFIX, syntax->name);
+                               printf("%d:%s opcode %s not allowed on current mode\n", s->line, SYNTAX_ERROR_PREFIX, syntax->name);
                                return 1;
                        };
                        {
@@ -256,18 +256,18 @@ static int syntax_check_phase(char **word, int word_num, struct script *s, const
                                        break;
                                }
                                if(!compare){
-                                       printf("%s parameter number not much %s\n", SYNTAX_ERROR_PREFIX, word[0]);
+                                       printf("%d:%s parameter number not much %s\n", s->line, SYNTAX_ERROR_PREFIX, word[0]);
                                        return 1;
                                }
                        }
                        for(j = 0; j < syntax->argc; j++){
                                switch(syntax->argv_type[j]){
                                case SYNTAX_ARGVTYPE_NULL:
-                                       printf("%s ARGV_NULL select\n", SYNTAX_ERROR_PREFIX);
+                                       printf("%d:%s ARGV_NULL select\n", s->line, SYNTAX_ERROR_PREFIX);
                                        return 1;
                                case SYNTAX_ARGVTYPE_VALUE:
                                        if(value_get(word[j + 1], &(s->value[j])) == NG){
-                                               printf("%s value error %s %s\n", SYNTAX_ERROR_PREFIX, word[0], word[j+1]);
+                                               printf("%d:%s value error %s %s\n", s->line, SYNTAX_ERROR_PREFIX, word[0], word[j+1]);
                                                return 1;
                                        }
                                        break;
@@ -286,7 +286,7 @@ static int syntax_check_phase(char **word, int word_num, struct script *s, const
                                                s->value[j] = MIRROR_PROGRAMABLE;
                                                break;
                                        default:
-                                               printf("%s unknown scroll mirroring type %s\n", SYNTAX_ERROR_PREFIX, word[j+1]);
+                                               printf("%d:%s unknown scroll mirroring type %s\n", s->line, SYNTAX_ERROR_PREFIX, word[j+1]);
                                                return 1;
                                        }
                                        break;
@@ -294,7 +294,7 @@ static int syntax_check_phase(char **word, int word_num, struct script *s, const
                                        s->value[j] = VALUE_EXPRESSION;
                                        //Ì¿Îá̾¤Îñ¸ì¤Èñ¸ì¿ô¤ò½ü³°¤·¤ÆÅϤ¹
                                        if(syntax_check_expression(&word[j+1], word_num - 2, &s->expression) == NG){
-                                               printf("%s expression error\n", SYNTAX_ERROR_PREFIX);
+                                               printf("%d:%s expression error\n", s->line, SYNTAX_ERROR_PREFIX);
                                                return 1;
                                        }
                                        //²ÄÊѤ˰ú¿ô¤ò¼è¤ë¤Î¤Ç¤³¤³¤Ç½ª¤ï¤ê
@@ -305,7 +305,7 @@ static int syntax_check_phase(char **word, int word_num, struct script *s, const
                                                s->value[j] = VALUE_VARIABLE;
                                                s->variable = v;
                                        }else{
-                                               printf("%s variable must use [A-Za-z] %s\n", SYNTAX_ERROR_PREFIX, word[j+1]);
+                                               printf("%d:%s variable must use [A-Za-z] %s\n", s->line, SYNTAX_ERROR_PREFIX, word[j+1]);
                                                return 1;
                                        }
                                        }break;
@@ -333,6 +333,7 @@ static int syntax_check(char **text, int text_num, struct script *s, int mode)
        for(i = 0; i < text_num; i++){
                char *word[TEXT_MAXWORD];
                const int n = word_load(text[i], word);
+               s->line = i + 1;
                if(word[0][0] == '#'){
                        s->opcode = SCRIPT_OPCODE_COMMENT;
                }else{
@@ -489,7 +490,7 @@ static int logical_check(const struct script *s, const struct st_config *c, stru
        while(s->opcode != SCRIPT_OPCODE_DUMP_END){
                //printf("opcode exec %s\n", SCRIPT_SYNTAX[s->opcode].name);
                if((setting == DUMP) && (s->opcode < SCRIPT_OPCODE_DUMP_START)){
-                       printf("%s config script include DUMPSTART area\n", LOGICAL_ERROR_PREFIX);
+                       printf("%s config script include DUMP_START area\n", LOGICAL_ERROR_PREFIX);
                        error += 1;
                }
 
@@ -656,7 +657,7 @@ static int logical_check(const struct script *s, const struct st_config *c, stru
                        assert(r->cpu_rom.attribute == MEMORY_ATTR_READ);
                        assert(r->ppu_rom.attribute == MEMORY_ATTR_READ);
                        //length filter.
-                       if(!is_range(length, 0x80, 0x2000)){
+                       if(!is_range(length, 0x80, 0x4000)){
                                logical_print_illgallength(STR_REGION_CPU, length);
                                error += 1;
                        }
index 9f538d5..43a8582 100644 (file)
@@ -16,6 +16,7 @@ struct st_expression{
 
 struct script{
        int opcode;
+       int line;
        long value[4];
        struct st_expression expression;
        char variable;
index 8297b94..b00eb5a 100644 (file)
@@ -25,14 +25,14 @@ enum{
        SCRIPT_OPCODE_MIRROR,
        SCRIPT_OPCODE_CPU_ROMSIZE,
        SCRIPT_OPCODE_CPU_RAMSIZE,
-       SCRIPT_OPCODE_CPU_COMMAND,
-       SCRIPT_OPCODE_PPU_COMMAND,
        SCRIPT_OPCODE_PPU_ROMSIZE,
        SCRIPT_OPCODE_DUMP_START,
+       SCRIPT_OPCODE_CPU_COMMAND,
        SCRIPT_OPCODE_CPU_READ,
        SCRIPT_OPCODE_CPU_WRITE,
        SCRIPT_OPCODE_CPU_RAMRW,
        SCRIPT_OPCODE_CPU_PROGRAM,
+       SCRIPT_OPCODE_PPU_COMMAND,
        SCRIPT_OPCODE_PPU_RAMFIND,
        SCRIPT_OPCODE_PPU_SRAMTEST,
        SCRIPT_OPCODE_PPU_READ,