X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=sim%2Fucsim%2Fcmd.src%2Fbp.cc;h=202eb17d8abd70e6e99b832f1eaceaad49032784;hb=fca88f56fdc29aeb56aa4b9ff7195c9a69adf034;hp=7318c6c8bd15186afa03f57a2d5f5e1912498ebf;hpb=f27cbdc6513b26748661452e50ed3af99fac16a2;p=fw%2Fsdcc diff --git a/sim/ucsim/cmd.src/bp.cc b/sim/ucsim/cmd.src/bp.cc index 7318c6c8..202eb17d 100644 --- a/sim/ucsim/cmd.src/bp.cc +++ b/sim/ucsim/cmd.src/bp.cc @@ -2,7 +2,7 @@ * Simulator of microcontrollers (cmd.src/bp.cc) * * Copyright (C) 1999,99 Drotos Daniel, Talker Bt. - * + * * To contact author send email to drdani@mazsola.iit.uni-miskolc.hu * */ @@ -43,86 +43,89 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA * BREAK command */ -int -cl_break_cmd::do_work(class cl_sim *sim, - class cl_cmdline *cmdline, class cl_console *con) +//int +//cl_break_cmd::do_work(class cl_sim *sim, +// class cl_cmdline *cmdline, class cl_console_base *con) +COMMAND_DO_WORK_UC(cl_break_cmd) { t_addr addr= 0; int hit= 1; char op; - class cl_mem *mem; + class cl_address_space *mem; class cl_cmd_arg *params[4]= { cmdline->param(0), - cmdline->param(1), - cmdline->param(2), - cmdline->param(3) }; + cmdline->param(1), + cmdline->param(2), + cmdline->param(3) }; - if (cmdline->syntax_match(sim, ADDRESS)) { + if (cmdline->syntax_match(uc, ADDRESS)) { addr= params[0]->value.address; hit= 1; - do_fetch(sim, addr, hit, con); + do_fetch(uc, addr, hit, con); } - else if (cmdline->syntax_match(sim, ADDRESS NUMBER)) { + else if (cmdline->syntax_match(uc, ADDRESS NUMBER)) { addr= params[0]->value.address; hit= params[1]->value.number; - do_fetch(sim, addr, hit, con); + do_fetch(uc, addr, hit, con); } - else if (cmdline->syntax_match(sim, MEMORY STRING ADDRESS)) { - mem= params[0]->value.memory; + else if (cmdline->syntax_match(uc, MEMORY STRING ADDRESS)) { + mem= params[0]->value.memory.address_space; op= *(params[1]->get_svalue()); addr= params[2]->value.address; hit= 1; - do_event(sim, mem, op, addr, hit, con); + do_event(uc, mem, op, addr, hit, con); } - else if (cmdline->syntax_match(sim, MEMORY STRING ADDRESS NUMBER)) { - mem= params[0]->value.memory; + else if (cmdline->syntax_match(uc, MEMORY STRING ADDRESS NUMBER)) { + mem= params[0]->value.memory.address_space; op= *(params[1]->get_svalue()); addr= params[2]->value.address; hit= params[3]->value.number; - do_event(sim, mem, op, addr, hit, con); + do_event(uc, mem, op, addr, hit, con); } else { - con->printf("%s\n", short_help?short_help:"Error: wrong syntax\n"); + con->dd_printf("%s\n", short_help?short_help:"Error: wrong syntax\n"); return(DD_FALSE); } return(DD_FALSE); } void -cl_break_cmd::do_fetch(class cl_sim *sim, - t_addr addr, int hit, class cl_console *con) +cl_break_cmd::do_fetch(class cl_uc *uc, + t_addr addr, int hit, class cl_console_base *con) { if (hit > 99999) { - con->printf("Hit value %d is too big.\n", hit); + con->dd_printf("Hit value %d is too big.\n", hit); return; } - if (sim->uc->fbrk->bp_at(addr)) - con->printf("Breakpoint at 0x%06x is already set.\n", addr); + if (uc->fbrk->bp_at(addr)) + con->dd_printf("Breakpoint at 0x%06x is already set.\n", addr); else { - class cl_brk *b= new cl_fetch_brk(sim->uc->make_new_brknr(), - addr, perm, hit); + class cl_brk *b= new cl_fetch_brk(uc->address_space(MEM_ROM_ID), + uc->make_new_brknr(), + addr, perm, hit); b->init(); - sim->uc->fbrk->add_bp(b); - char *s= sim->uc->disass(addr, NULL); - con->printf("Breakpoint %d at 0x%06x: %s\n", b->nr, addr, s); - free(s); + uc->fbrk->add_bp(b); + const char *s= uc->disass(addr, NULL); + con->dd_printf("Breakpoint %d at 0x%06x: %s\n", b->nr, addr, s); + free((char *)s); } } void -cl_break_cmd::do_event(class cl_sim *sim, - class cl_mem *mem, char op, t_addr addr, int hit, - class cl_console *con) +cl_break_cmd::do_event(class cl_uc *uc, + class cl_address_space *mem, + char op, t_addr addr, int hit, + class cl_console_base *con) { class cl_ev_brk *b= NULL; - b= sim->uc->mk_ebrk(perm, mem, op, addr, hit); + b= uc->mk_ebrk(perm, mem, op, addr, hit); if (b) - sim->uc->ebrk->add_bp(b); + uc->ebrk->add_bp(b); else - con->printf("Couldn't make event breakpoint\n"); + con->dd_printf("Couldn't make event breakpoint\n"); } @@ -130,21 +133,22 @@ cl_break_cmd::do_event(class cl_sim *sim, * CLEAR address */ -int -cl_clear_cmd::do_work(class cl_sim *sim, - class cl_cmdline *cmdline, class cl_console *con) +//int +//cl_clear_cmd::do_work(class cl_sim *sim, +// class cl_cmdline *cmdline, class cl_console_base *con) +COMMAND_DO_WORK_UC(cl_clear_cmd) { int idx; - class cl_brk *brk= sim->uc->fbrk->get_bp(sim->uc->PC, &idx); + class cl_brk *brk= uc->fbrk->get_bp(uc->PC, &idx); if (cmdline->param(0) == 0) { if (!brk) - { - con->printf("No breakpoint at this address.\n"); - return(0); - } - sim->uc->fbrk->del_bp(sim->uc->PC); + { + con->dd_printf("No breakpoint at this address.\n"); + return(0); + } + uc->fbrk->del_bp(uc->PC); return(0); } @@ -153,13 +157,13 @@ cl_clear_cmd::do_work(class cl_sim *sim, while ((param= cmdline->param(i++))) { t_addr addr; - if (!param->as_address()) - return(DD_FALSE); + if (!param->as_address(uc)) + return(DD_FALSE); addr= param->value.address; - if (sim->uc->fbrk->bp_at(addr) == 0) - sim->cmd->printf("No breakpoint at 0x%06x\n", addr); + if (uc->fbrk->bp_at(addr) == 0) + con->dd_printf("No breakpoint at 0x%06x\n", addr); else - sim->uc->fbrk->del_bp(addr); + uc->fbrk->del_bp(addr); } return(DD_FALSE); @@ -170,25 +174,29 @@ cl_clear_cmd::do_work(class cl_sim *sim, * DELETE nr nr ... */ -int -cl_delete_cmd::do_work(class cl_sim *sim, - class cl_cmdline *cmdline, class cl_console *con) +//int +//cl_delete_cmd::do_work(class cl_sim *sim, +// class cl_cmdline *cmdline, class cl_console_base *con) +COMMAND_DO_WORK_UC(cl_delete_cmd) { if (cmdline->param(0) == 0) { // delete all - sim->uc->remove_all_breaks(); + uc->remove_all_breaks(); } else { int i= 0; class cl_cmd_arg *param; while ((param= cmdline->param(i++))) - { - long num; - if (param->get_ivalue(&num)) - sim->uc->rm_brk(num); - } + { + long num; + if (param->get_ivalue(&num)) + { + if (!uc->rm_brk(num)) + con->dd_printf("Error\n"); + } + } } return(DD_FALSE); }