* sim/ucsim/cmd.src/info.cc, sim/ucsim/cmd.src/bp.cc,
[fw/sdcc] / sim / ucsim / cmd.src / bp.cc
index 7318c6c8bd15186afa03f57a2d5f5e1912498ebf..202eb17d8abd70e6e99b832f1eaceaad49032784 100644 (file)
@@ -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);
 }