X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=sim%2Fucsim%2Fcmd.src%2Fcmduc.cc;h=cb3aa557b994dfbcbadb0fe1ce833dbeff0f3ffb;hb=f27da39dbcab5678aca6d8462f1cc37a643f37e9;hp=3623bd7a539d98d2ec1937ae89a3427bdd4f9354;hpb=7fe573ea83f6e0762dc73bc493f15fa2a8f6273d;p=fw%2Fsdcc diff --git a/sim/ucsim/cmd.src/cmduc.cc b/sim/ucsim/cmd.src/cmduc.cc index 3623bd7a..cb3aa557 100644 --- a/sim/ucsim/cmd.src/cmduc.cc +++ b/sim/ucsim/cmd.src/cmduc.cc @@ -135,8 +135,12 @@ COMMAND_DO_WORK_UC(cl_pc_cmd) con->dd_printf("Error: wrong parameter\n"); return(DD_FALSE); } - if (addr >= uc->get_mem_size(MEM_ROM)) - addr= 0; + class cl_address_space *rom= uc->address_space(MEM_ROM_ID); + if (rom) + { + if (addr > rom->highest_valid_address()) + addr= rom->highest_valid_address(); + } if (!uc->inst_at(addr)) con->dd_printf("Warning: maybe not instruction at 0x%06x\n", addr); uc->PC= addr; @@ -171,7 +175,7 @@ COMMAND_DO_WORK_UC(cl_reset_cmd) // class cl_cmdline *cmdline, class cl_console *con) COMMAND_DO_WORK_UC(cl_dump_cmd) { - class cl_mem *mem= 0; + class cl_memory *mem= 0; long bpl= 8; t_addr start= 0, end; class cl_cmd_arg *params[4]= { cmdline->param(0), @@ -205,32 +209,41 @@ COMMAND_DO_WORK_UC(cl_dump_cmd) if (params[0]) con->dd_printf("%s\n", short_help?short_help:"Error: wrong syntax\n"); } - else if (cmdline->syntax_match(uc, MEMORY)) + else { - mem= params[0]->value.memory; - mem->dump(con); + if (!params[0] || + !params[0]->as_memory(uc)) + { + con->dd_printf("No memory specified. Use \"info memory\" for available memories\n"); + return(DD_FALSE); + } + if (cmdline->syntax_match(uc, MEMORY)) + { + mem= params[0]->value.memory.memory; + mem->dump(con); + } + else if (cmdline->syntax_match(uc, MEMORY ADDRESS)) { + mem = params[0]->value.memory.memory; + start= params[1]->value.address; + end = start+10*8-1; + mem->dump(start, end, bpl, con); + } + else if (cmdline->syntax_match(uc, MEMORY ADDRESS ADDRESS)) { + mem = params[0]->value.memory.memory; + start= params[1]->value.address; + end = params[2]->value.address; + mem->dump(start, end, bpl, con); + } + else if (cmdline->syntax_match(uc, MEMORY ADDRESS ADDRESS NUMBER)) { + mem = params[0]->value.memory.memory; + start= params[1]->value.address; + end = params[2]->value.address; + bpl = params[3]->value.number; + mem->dump(start, end, bpl, con); + } + else + con->dd_printf("%s\n", short_help?short_help:"Error: wrong syntax\n"); } - else if (cmdline->syntax_match(uc, MEMORY ADDRESS)) { - mem = params[0]->value.memory; - start= params[1]->value.address; - end = start+10*8-1; - mem->dump(start, end, bpl, con); - } - else if (cmdline->syntax_match(uc, MEMORY ADDRESS ADDRESS)) { - mem = params[0]->value.memory; - start= params[1]->value.address; - end = params[2]->value.address; - mem->dump(start, end, bpl, con); - } - else if (cmdline->syntax_match(uc, MEMORY ADDRESS ADDRESS NUMBER)) { - mem = params[0]->value.memory; - start= params[1]->value.address; - end = params[2]->value.address; - bpl = params[3]->value.number; - mem->dump(start, end, bpl, con); - } - else - con->dd_printf("%s\n", short_help?short_help:"Error: wrong syntax\n"); return(DD_FALSE);; } @@ -246,7 +259,7 @@ COMMAND_DO_WORK_UC(cl_dump_cmd) // class cl_cmdline *cmdline, class cl_console *con) COMMAND_DO_WORK_UC(cl_di_cmd) { - cmdline->insert_param(0, new cl_cmd_sym_arg("i")); + cmdline->insert_param(0, new cl_cmd_sym_arg("iram")); cl_dump_cmd::do_work(uc, cmdline, con); return(0); } @@ -262,7 +275,7 @@ COMMAND_DO_WORK_UC(cl_di_cmd) // class cl_cmdline *cmdline, class cl_console *con) COMMAND_DO_WORK_UC(cl_dx_cmd) { - cmdline->insert_param(0, new cl_cmd_sym_arg("x")); + cmdline->insert_param(0, new cl_cmd_sym_arg("xram")); cl_dump_cmd::do_work(uc, cmdline, con); return(0); } @@ -278,7 +291,7 @@ COMMAND_DO_WORK_UC(cl_dx_cmd) // class cl_cmdline *cmdline, class cl_console *con) COMMAND_DO_WORK_UC(cl_dch_cmd) { - cmdline->insert_param(0, new cl_cmd_sym_arg("r")); + cmdline->insert_param(0, new cl_cmd_sym_arg("rom")); cl_dump_cmd::do_work(uc, cmdline, con); return(0); } @@ -294,7 +307,7 @@ COMMAND_DO_WORK_UC(cl_dch_cmd) // class cl_cmdline *cmdline, class cl_console *con) COMMAND_DO_WORK_UC(cl_ds_cmd) { - cmdline->insert_param(0, new cl_cmd_sym_arg("s")); + cmdline->insert_param(0, new cl_cmd_sym_arg("sfr")); cl_dump_cmd::do_work(uc, cmdline, con); return(0); } @@ -313,7 +326,7 @@ COMMAND_DO_WORK_UC(cl_dc_cmd) t_addr start= last, end= last+20; class cl_cmd_arg *params[2]= { cmdline->param(0), cmdline->param(1) }; - class cl_mem *rom= uc->mem(MEM_ROM); + class cl_address_space *rom= uc->address_space(MEM_ROM_ID); if (!rom) return(DD_FALSE); @@ -327,14 +340,14 @@ COMMAND_DO_WORK_UC(cl_dc_cmd) start= params[0]->value.address; end= params[1]->value.address; } - if (start >= rom->size) + if (start > rom->highest_valid_address()) { - con->dd_printf("Error: start address is wrong\n"); + con->dd_printf("Error: start address is too high\n"); return(DD_FALSE); } - if (end >= rom->size) + if (end > rom->highest_valid_address()) { - con->dd_printf("Error: end address is wrong\n"); + con->dd_printf("Error: end address is too high\n"); return(DD_FALSE); } @@ -394,10 +407,10 @@ COMMAND_DO_WORK_UC(cl_disassemble_cmd) if (!uc->there_is_inst()) return(DD_FALSE); realstart= start; - class cl_mem *rom= uc->mem(MEM_ROM); + class cl_address_space *rom= uc->address_space(MEM_ROM_ID); if (!rom) return(DD_FALSE); - while (realstart < rom->size && + while (realstart <= rom->highest_valid_address() && !uc->inst_at(realstart)) realstart= realstart+1; if (offset) @@ -405,9 +418,9 @@ COMMAND_DO_WORK_UC(cl_disassemble_cmd) dir= (offset < 0)?-1:+1; while (offset) { - realstart= (realstart+dir) % rom->size; + realstart= rom->inc_address(realstart, dir); while (!uc->inst_at(realstart)) - realstart= (realstart+dir) % rom->size; + realstart= rom->inc_address(realstart, dir); offset+= -dir; } } @@ -415,9 +428,9 @@ COMMAND_DO_WORK_UC(cl_disassemble_cmd) while (lines) { uc->print_disass(realstart, con); - realstart= (realstart+1) % rom->size; + realstart= rom->inc_address(realstart, +1) + rom->start_address; while (!uc->inst_at(realstart)) - realstart= (realstart+1) % rom->size; + realstart= rom->inc_address(realstart, +1) + rom->start_address; lines--; } @@ -437,7 +450,7 @@ COMMAND_DO_WORK_UC(cl_disassemble_cmd) // class cl_cmdline *cmdline, class cl_console *con) COMMAND_DO_WORK_UC(cl_fill_cmd) { - class cl_mem *mem= 0; + class cl_memory *mem= 0; t_mem what= 0; t_addr start= 0, end; class cl_cmd_arg *params[4]= { cmdline->param(0), @@ -446,7 +459,7 @@ COMMAND_DO_WORK_UC(cl_fill_cmd) cmdline->param(3) }; if (cmdline->syntax_match(uc, MEMORY ADDRESS ADDRESS NUMBER)) { - mem = params[0]->value.memory; + mem = params[0]->value.memory.memory; start= params[1]->value.address; end = params[2]->value.address; what = params[3]->value.number; @@ -475,12 +488,12 @@ cl_where_cmd::do_real_work(class cl_uc *uc, class cl_cmdline *cmdline, class cl_console *con, bool case_sensitive) { - class cl_mem *mem= 0; + class cl_memory *mem= 0; class cl_cmd_arg *params[2]= { cmdline->param(0), cmdline->param(1) }; if (cmdline->syntax_match(uc, MEMORY DATALIST)) { - mem= params[0]->value.memory; + mem= params[0]->value.memory.memory; t_mem *array= params[1]->value.data_list.array; int len= params[1]->value.data_list.len; if (!len)