OSDN Git Service

PPU_ROMSIZE override & STEP_START constant 'P' add
authornaruko <naruko@24ea1065-a21e-4ca1-99c9-f5125deb0858>
Wed, 14 Jan 2009 21:52:23 +0000 (21:52 +0000)
committernaruko <naruko@24ea1065-a21e-4ca1-99c9-f5125deb0858>
Wed, 14 Jan 2009 21:52:23 +0000 (21:52 +0000)
git-svn-id: svn+ssh://svn.osdn.net/svnroot/unagi@264 24ea1065-a21e-4ca1-99c9-f5125deb0858

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

index aac977b..2f93362 100644 (file)
@@ -286,7 +286,8 @@ int nesfile_load(const char *errorprefix, const char *file, struct romimage *r)
                //PPU
                ppusize = ((long) buf[5]) * CHARCTER_ROM_MIN;
                offset += ppusize;
-               if(ppusize != 0){
+               r->ppu_rom.size = ppusize;
+               if(0 && ppusize != 0){
                        if(nesfile_size_check(errorprefix, &r->ppu_rom, ppusize) == NG){
                                free(buf);
                                return NG;
index 739afc7..48d9fb1 100644 (file)
@@ -548,8 +548,9 @@ enum{
 static int logical_check(const struct script *s, const struct st_config *c, struct romimage *r)
 {
        //override (CPU|PPU)_ROMSIZE pointer. ÊÑ¿ô¤¬Áý¤¨¤ë...
-       const struct script *script_cpu_romsize_data[SCRIPT_MEMORYSIZE];//      const struct script *script_ppu_romsize_data;
+       const struct script *script_cpu_romsize_data[SCRIPT_MEMORYSIZE];        const struct script *script_ppu_romsize_data[SCRIPT_MEMORYSIZE];
        int script_cpu_romsize_count = 0;
+       int script_ppu_romsize_count = 0;
        
        long cpu_romsize = 0, cpu_ramsize = 0, ppu_romsize = 0;
        int imagesize = 0; //for write or program mode
@@ -593,7 +594,10 @@ static int logical_check(const struct script *s, const struct st_config *c, stru
                                        error++;
                                }
                                if(r->ppu_rom.size != 0){
-                                       step_const_ppuarea = 0;
+                                       step_const_ppuarea = logical_romsize_override(r->ppu_rom.size, script_ppu_romsize_data, script_ppu_romsize_count);
+                                       if(step_const_ppuarea == STEP_CONST_UNDEF){
+                                               error++;
+                                       }
                                }
                                imagesize = -1;
                                break;
@@ -646,7 +650,17 @@ static int logical_check(const struct script *s, const struct st_config *c, stru
                        break;
                case SCRIPT_OPCODE_PPU_ROMSIZE:{
                        const long size = s->value[0];
-                       r->ppu_rom.size = size;
+                       if(c->mode == MODE_ROM_PROGRAM){
+                               if(script_ppu_romsize_count >= SCRIPT_MEMORYSIZE){
+                                       printf("%d:%s %s override count over\n", s->line, LOGICAL_ERROR_PREFIX, OPSTR_PPU_ROMSIZE);
+                                       error += 1;
+                               }else{
+                                       script_ppu_romsize_data[script_ppu_romsize_count] = s;
+                                       script_ppu_romsize_count++;
+                               }
+                       }else{
+                               r->ppu_rom.size = size;
+                       }
                        if(memorysize_check(size, MEMORY_AREA_PPU)){
                                printf("%s %s length error\n", LOGICAL_ERROR_PREFIX, OPSTR_PPU_ROMSIZE);
                                error += 1;
index bbed57b..5e276fe 100644 (file)
@@ -114,8 +114,8 @@ static const struct script_syntax SCRIPT_SYNTAX[] = {
                name: OPSTR_PPU_ROMSIZE,
                script_opcode: SCRIPT_OPCODE_PPU_ROMSIZE,
                permittion: PERMITTION_ROM_DUMP | PERMITTION_ROM_PROGRAM,
-               argc: 1, compare: SYNTAX_COMPARE_EQ,
-               argv_type: ARGV_TYPE_VALUE_ONLY
+               argc: 1, compare: SYNTAX_COMPARE_GT,
+               argv_type: ARGV_TYPE_ADDRESS_LENGTH
        },{
                name: "CPU_COMMAND",
                script_opcode: SCRIPT_OPCODE_CPU_COMMAND,