enum{
SETTING, DUMP, END
};
-static int command_mask(const int region, const long address, const long offset, long size, long *data)
+static int command_mask(const int region, const long address, const long offset, long size, struct flash_order *f)
{
+ const char *str_region = STR_REGION_CPU;
+ if(region == MEMORY_AREA_PPU){
+ str_region = STR_REGION_PPU;
+ }
switch(region){
case MEMORY_AREA_CPU_ROM:
switch(offset){
case 0x8000: case 0xa000: case 0xc000:
break;
default:
- printf("%s %s_COMMAND area offset error\n", LOGICAL_ERROR_PREFIX, STR_REGION_CPU);
+ printf("%s %s_COMMAND area offset error\n", LOGICAL_ERROR_PREFIX, str_region);
return NG;
}
switch(size){
case 0x2000: case 0x4000: case 0x8000:
break;
default:
- printf("%s %s_COMMAND area mask error\n", LOGICAL_ERROR_PREFIX, STR_REGION_CPU);
+ printf("%s %s_COMMAND area mask error\n", LOGICAL_ERROR_PREFIX, str_region);
return NG;
}
break;
case 0x1000: case 0x1400: case 0x1800: case 0x1c00:
break;
default:
- printf("%s %s_COMMAND area offset error\n", LOGICAL_ERROR_PREFIX, STR_REGION_CPU);
+ printf("%s %s_COMMAND area offset error\n", LOGICAL_ERROR_PREFIX, str_region);
return NG;
}
switch(size){
case 0x0400: case 0x0800: case 0x1000: case 0x2000:
break;
default:
- printf("%s %s_COMMAND area mask error\n", LOGICAL_ERROR_PREFIX, STR_REGION_CPU);
+ printf("%s %s_COMMAND area mask error\n", LOGICAL_ERROR_PREFIX, str_region);
return NG;
}
break;
default:
assert(0); //unknown memory area
}
+
+ const long mask = size - 1;
+ const long data = (address & mask) | offset;
switch(address){
- case 0:
- case 0x2aaa: case 0x5555:
- case 0x02aa: case 0x0555:
+ case 0:
+ f->command_0000 = data;
+ break;
+ case 0x2aaa: case 0x02aa:
+ f->command_2aaa = data;
+ break;
+ case 0x5555: case 0x0555:
+ f->command_5555 = data;
break;
default:
- assert(0); //unknown command address
+ printf("%s %s_COMMAND unknown commnand address\n", LOGICAL_ERROR_PREFIX, str_region);
+ return NG;
}
- long mask = size - 1;
- *data = (address & mask) | offset;
return OK;
}
//memory size ¤Ï̤³ÎÄêÍ×ÁǤ¬Â¿¤¤¤Î¤Ç check ¤òÈ´¤¯
r->cpu_ram.size = s->value[0];
break;
- case SCRIPT_OPCODE_CPU_COMMAND_0000:
- if(command_mask(MEMORY_AREA_CPU_ROM, 0, s->value[0], s->value[1], &(r->cpu_flash.command_0000)) == NG){
- error += 1;
- }
- break;
- case SCRIPT_OPCODE_CPU_COMMAND_2AAA:
- if(command_mask(MEMORY_AREA_CPU_ROM, 0x2aaa, s->value[0], s->value[1], &(r->cpu_flash.command_2aaa)) == NG){
- error += 1;
- }
- break;
- case SCRIPT_OPCODE_CPU_COMMAND_5555:
- if(command_mask(MEMORY_AREA_CPU_ROM, 0x5555, s->value[0], s->value[1], &(r->cpu_flash.command_5555)) == NG){
+ case SCRIPT_OPCODE_CPU_COMMAND:
+ if(command_mask(MEMORY_AREA_CPU_ROM, s->value[0], s->value[1], s->value[2], &(r->cpu_flash)) == NG){
error += 1;
}
break;
}
}
break;
- case SCRIPT_OPCODE_PPU_COMMAND_0000:
- if(command_mask(MEMORY_AREA_PPU, 0, s->value[0], s->value[1], &(r->ppu_flash.command_0000)) == NG){
- error += 1;
- }
- break;
- case SCRIPT_OPCODE_PPU_COMMAND_2AAA:
- if(command_mask(MEMORY_AREA_PPU, 0x2aaa, s->value[0], s->value[1], &(r->ppu_flash.command_2aaa)) == NG){
- error += 1;
- }
- break;
- case SCRIPT_OPCODE_PPU_COMMAND_5555:
- if(command_mask(MEMORY_AREA_PPU, 0x5555, s->value[0], s->value[1], &(r->ppu_flash.command_5555)) == NG){
+ case SCRIPT_OPCODE_PPU_COMMAND:
+ if(command_mask(MEMORY_AREA_PPU, s->value[0], s->value[1], s->value[2], &(r->ppu_flash)) == NG){
error += 1;
}
break;
SCRIPT_OPCODE_MIRROR,
SCRIPT_OPCODE_CPU_ROMSIZE,
SCRIPT_OPCODE_CPU_RAMSIZE,
- SCRIPT_OPCODE_CPU_COMMAND_0000,
- SCRIPT_OPCODE_CPU_COMMAND_2AAA,
- SCRIPT_OPCODE_CPU_COMMAND_5555,
- SCRIPT_OPCODE_PPU_COMMAND_0000,
- SCRIPT_OPCODE_PPU_COMMAND_2AAA,
- SCRIPT_OPCODE_PPU_COMMAND_5555,
+ SCRIPT_OPCODE_CPU_COMMAND,
+ SCRIPT_OPCODE_PPU_COMMAND,
SCRIPT_OPCODE_PPU_ROMSIZE,
SCRIPT_OPCODE_DUMP_START,
SCRIPT_OPCODE_CPU_READ,
SCRIPT_OPCODE_PPU_PROGRAM,
SCRIPT_OPCODE_STEP_START,
SCRIPT_OPCODE_STEP_END,
- SCRIPT_OPCODE_WAIT,
+// SCRIPT_OPCODE_WAIT,
SCRIPT_OPCODE_DUMP_END,
SCRIPT_OPCODE_COMMENT,
SCRIPT_OPCODE_NUM
SYNTAX_ARGVTYPE_VARIABLE, SYNTAX_ARGVTYPE_VALUE,
SYNTAX_ARGVTYPE_VALUE, SYNTAX_ARGVTYPE_VALUE
};
+static const int ARGV_TYPE_ADDRESS_COMMAND[SYNTAX_ARGV_TYPE_NUM] = {
+ SYNTAX_ARGVTYPE_VALUE, SYNTAX_ARGVTYPE_VALUE,
+ SYNTAX_ARGVTYPE_VALUE, SYNTAX_ARGVTYPE_NULL
+};
static const struct script_syntax SCRIPT_SYNTAX[] = {
{
name: "MAPPER",
argc: 1, compare: SYNTAX_COMPARE_EQ,
argv_type: ARGV_TYPE_VALUE_ONLY
},{
- name: "CPU_COMMAND_0000",
- script_opcode: SCRIPT_OPCODE_CPU_COMMAND_0000,
- permittion: PERMITTION_ROM_PROGRAM,
- argc:2, compare: SYNTAX_COMPARE_EQ,
- argv_type: ARGV_TYPE_ADDRESS_LENGTH
- },{
- name: "CPU_COMMAND_2AAA",
- script_opcode: SCRIPT_OPCODE_CPU_COMMAND_2AAA,
- permittion: PERMITTION_ROM_PROGRAM,
- argc:2, compare: SYNTAX_COMPARE_EQ,
- argv_type: ARGV_TYPE_ADDRESS_LENGTH
- },{
- name: "CPU_COMMAND_5555",
- script_opcode: SCRIPT_OPCODE_CPU_COMMAND_5555,
+ name: "CPU_COMMAND",
+ script_opcode: SCRIPT_OPCODE_CPU_COMMAND,
permittion: PERMITTION_ROM_PROGRAM,
- argc:2, compare: SYNTAX_COMPARE_EQ,
- argv_type: ARGV_TYPE_ADDRESS_LENGTH
+ argc:3, compare: SYNTAX_COMPARE_EQ,
+ argv_type: ARGV_TYPE_ADDRESS_COMMAND
},{
- name: "PPU_COMMAND_0000",
- script_opcode: SCRIPT_OPCODE_PPU_COMMAND_0000,
+ name: "PPU_COMMAND",
+ script_opcode: SCRIPT_OPCODE_PPU_COMMAND,
permittion: PERMITTION_ROM_PROGRAM,
- argc:2, compare: SYNTAX_COMPARE_EQ,
- argv_type: ARGV_TYPE_ADDRESS_LENGTH
- },{
- name: "PPU_COMMAND_2AAA",
- script_opcode: SCRIPT_OPCODE_PPU_COMMAND_2AAA,
- permittion: PERMITTION_ROM_PROGRAM,
- argc:2, compare: SYNTAX_COMPARE_EQ,
- argv_type: ARGV_TYPE_ADDRESS_LENGTH
- },{
- name: "PPU_COMMAND_5555",
- script_opcode: SCRIPT_OPCODE_PPU_COMMAND_5555,
- permittion: PERMITTION_ROM_PROGRAM,
- argc:2, compare: SYNTAX_COMPARE_EQ,
- argv_type: ARGV_TYPE_ADDRESS_LENGTH
+ argc:3, compare: SYNTAX_COMPARE_EQ,
+ argv_type: ARGV_TYPE_ADDRESS_COMMAND
},{
name: "DUMP_START",
script_opcode: SCRIPT_OPCODE_DUMP_START,
permittion: PERMITTION_ALL,
argc: 0, compare: SYNTAX_COMPARE_EQ,
argv_type: ARGV_TYPE_NULL
- },{
+ },
+#if 0
+ {
name: "WAIT",
script_opcode: SCRIPT_OPCODE_WAIT,
permittion: PERMITTION_ROM_PROGRAM,
argc: 1, compare: SYNTAX_COMPARE_EQ,
argv_type: ARGV_TYPE_VALUE_ONLY
- },{
+ },
+#endif
+ {
name: "DUMP_END",
script_opcode: SCRIPT_OPCODE_DUMP_END,
permittion: PERMITTION_ALL,