+cl_uc::remove_all_breaks(void)
+{
+ while (fbrk->count)
+ {
+ class cl_brk *brk= (class cl_brk *)(fbrk->at(0));
+ fbrk->del_bp(brk->addr);
+ }
+ while (ebrk->count)
+ ebrk->free_at(ebrk->count-1);
+}
+
+int
+cl_uc::make_new_brknr(void)
+{
+ if (brk_counter == 0)
+ return(brk_counter= 1);
+ if (fbrk->count == 0 &&
+ ebrk->count == 0)
+ return(brk_counter= 1);
+ return(++brk_counter);
+}
+
+class cl_ev_brk *
+cl_uc::mk_ebrk(enum brk_perm perm, class cl_mem *mem,
+ char op, t_addr addr, int hit)
+{
+ class cl_ev_brk *b;
+ op= toupper(op);
+
+ switch (mem->type)
+ {
+ case MEM_ROM:
+ if (op == 'R')
+ b= new cl_rc_brk(make_new_brknr(), addr, perm, hit);
+ else
+ return(0);
+ break;
+ case MEM_IRAM:
+ if (op == 'R')
+ b= new cl_ri_brk(make_new_brknr(), addr, perm, hit);
+ else if (op == 'W')
+ b= new cl_wi_brk(make_new_brknr(), addr, perm, hit);
+ else
+ return(0);
+ break;
+ case MEM_XRAM:
+ if (op == 'R')
+ b= new cl_rx_brk(make_new_brknr(), addr, perm, hit);
+ else if (op == 'W')
+ b= new cl_wx_brk(make_new_brknr(), addr, perm, hit);
+ else
+ return(0);
+ break;
+ case MEM_SFR:
+ if (op == 'R')
+ b= new cl_rs_brk(make_new_brknr(), addr, perm, hit);
+ else if (op == 'W')
+ b= new cl_ws_brk(make_new_brknr(), addr, perm, hit);
+ else
+ return(0);
+ break;
+ default:
+ return(0);
+ }
+ b->init();
+ return(b);
+}