⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 obsolete.cc

📁 sdcc是为51等小型嵌入式cpu设计的c语言编译器支持数种不同类型的cpu
💻 CC
📖 第 1 页 / 共 2 页
字号:
/* * Memory location handled specially by a hw element *//*cl_memloc::cl_memloc(t_addr addr):  cl_base(){  address= addr;  hws= new cl_list(2, 2);  hws->init();}*//*cl_memloc::~cl_memloc(void){  hws->disconn_all();  delete hws;}*//*ulongcl_memloc::read(class cl_mem *mem){  uchar ret= 0;  class cl_hw *hw;  if (!hws ||      hws->count == 0)    return(ret);  if ((hw= (class cl_hw *)(hws->at(0))))    ret= hw->read(mem, address);  return(ret);}*//*voidcl_memloc::write(class cl_mem *mem, t_addr addr, t_mem *val){  class cl_hw *hw;  int i;  if (!hws)    return;  for (i= 0; i < hws->count; i++)    {      hw= (class cl_hw *)hws->at(0);      hw->write(mem, addr, val);    }}*//* Sorted collection of memory locations *//*cl_memloc_coll::cl_memloc_coll(void):  cl_sorted_list(2, 2){  Duplicates= DD_FALSE;}*//*void *cl_memloc_coll::key_of(void *item){  return(&(((class cl_memloc *)item)->address));}*//*intcl_memloc_coll::compare(void *key1, void *key2){  if (*(long*)key1 > *(long*)key2)    return(1);  else    if (*(long*)key1 < *(long*)key2)      return(-1);    else      return(0);}*//*class cl_memloc *cl_memloc_coll::get_loc(t_addr address){  t_index i;  if (search(&address, i))    return((class cl_memloc*)(at(i)));  return(0);}*//* * Memory ****************************************************************************** *//* * Bitmap *//*cl_bitmap::cl_bitmap(t_addr asize):  cl_base(){  map= (uchar*)malloc(size= asize/(8*SIZEOF_CHAR));  memset(map, 0, size);}cl_bitmap::~cl_bitmap(void){  free(map);}voidcl_bitmap::set(t_addr pos){  int i;  if ((i= pos/(8*SIZEOF_CHAR)) < size)    map[i]|= (1 << (pos & ((8*SIZEOF_CHAR)-1)));}voidcl_bitmap::clear(t_addr pos){  int i;  if ((i= pos/(8*SIZEOF_CHAR)) < size)    map[i]&= ~(1 << (pos & ((8*SIZEOF_CHAR)-1)));}boolcl_bitmap::get(t_addr pos){  return(map[pos/(8*SIZEOF_CHAR)] & (1 << (pos & ((8*SIZEOF_CHAR)-1))));}boolcl_bitmap::empty(void){  int i;  for (i= 0; i < size && map[i] == 0; i++) ;  return(i == size);}*//* * Special memory for code (ROM) *//*cl_rom::cl_rom(t_addr asize, int awidth, class cl_uc *auc):  cl_mem(MEM_ROM, get_id_string(mem_classes, MEM_ROM), asize, awidth, auc){  bp_map= new cl_bitmap(asize);  inst_map= new cl_bitmap(asize);}cl_rom::~cl_rom(void){  delete bp_map;  delete inst_map;}*/cl_mem::cl_mem(enum mem_class atype, char *aclass_name,	       t_addr asize, int awidth, class cl_uc *auc):  cl_guiobj(){  int i;    uc= auc;  type= atype;  class_name= aclass_name;  width= awidth;  size= asize;  mem= 0;  for (i= width, mask= 0; i; i--)    mask= (mask<<1) | 1;  if (width == 0 ||      size == 0)    mem= 0;  else if (width <= 8)    mem= (TYPE_UBYTE *)malloc(size);  else if (width <= 16)    mem= (TYPE_UWORD *)malloc(size*sizeof(TYPE_WORD));  else    mem= (TYPE_UDWORD *)malloc(size*sizeof(TYPE_DWORD));  //read_locs= new cl_memloc_coll();  //write_locs= new cl_memloc_coll();  dump_finished= 0;  addr_format= data_format= 0;}cl_mem::~cl_mem(void){  if (mem)    free(mem);  if (addr_format)    free(addr_format);  if (data_format)    free(data_format);  //delete read_locs;  //delete write_locs;}intcl_mem::init(void){  t_addr i;  addr_format= (char *)malloc(10);  sprintf(addr_format, "0x%%0%dx",	  size-1<=0xf?1:	  (size-1<=0xff?2:	   (size-1<=0xfff?3:	    (size-1<=0xffff?4:	     (size-1<=0xfffff?5:	      (size-1<=0xffffff?6:12))))));  data_format= (char *)malloc(10);  sprintf(data_format, "%%0%dx", width/4+((width%4)?1:0));  for (i= 0; i < size; i++)    set(i, (type==MEM_ROM)?(-1):0);  return(0);}char *cl_mem::id_string(void){  char *s= get_id_string(mem_ids, type);  return(s?s:(char*)"NONE");}t_memcl_mem::read(t_addr addr){  //class cl_memloc *loc;  if (addr >= size)    {      //FIXME      fprintf(stderr, "Address 0x%06"_A_"x is over 0x%06"_A_"x\n", addr, size);      return(0);    }  /*if ((loc= read_locs->get_loc(addr)))    return(loc->read(this));*/  if (width <= 8)    return((((TYPE_UBYTE*)mem)[addr])&mask);  else if (width <= 16)    return((((TYPE_UWORD*)mem)[addr])&mask);  else    return((((TYPE_UDWORD*)mem)[addr])&mask);}t_memcl_mem::get(t_addr addr){  if (addr >= size)    return(0);  if (width <= 8)    return((((TYPE_UBYTE*)mem)[addr])&mask);  else if (width <= 16)    return((((TYPE_UWORD*)mem)[addr])&mask);  else    return((((TYPE_UDWORD*)mem)[addr])&mask);}/* * Modify memory location *//* Write calls callbacks of HW elements */t_memcl_mem::write(t_addr addr, t_mem val){  /*  class cl_memloc *loc;  if (addr >= size)    return;  if ((loc= write_locs->get_loc(addr)))    loc->write(this, addr, val);  if (width <= 8)    ((TYPE_UBYTE*)mem)[addr]= (*val)&mask;  else if (width <= 16)    ((TYPE_UWORD*)mem)[addr]= (*val)&mask;  else  ((TYPE_UDWORD*)mem)[addr]= (*val)&mask;*/  fprintf(stderr, "FIXME cl_mem::write(0x%06"_A_"x, 0x%04"_M_"x)\n",	  addr, val);  return(0);}/* Set doesn't call callbacks */voidcl_mem::set(t_addr addr, t_mem val){  if (addr >= size)    return;  if (width <= 8)    ((TYPE_UBYTE*)mem)[addr]= val&mask;  else if (width <= 16)    ((TYPE_UWORD*)mem)[addr]= val&mask;  else    ((TYPE_UDWORD*)mem)[addr]= val&mask;}t_memcl_mem::add(t_addr addr, long what){  if (addr >= size)    return(0);  if (width <= 8)    {      ((TYPE_UBYTE*)mem)[addr]= ((TYPE_UBYTE*)mem)[addr] + what;      return(((TYPE_UBYTE*)mem)[addr]);    }  else if (width <= 16)    {      ((TYPE_UWORD*)mem)[addr]= ((TYPE_UWORD*)mem)[addr] + what;      return(((TYPE_UWORD*)mem)[addr]);    }  else    {      ((TYPE_UDWORD*)mem)[addr]= ((TYPE_UDWORD*)mem)[addr] + what;      return(((TYPE_UDWORD*)mem)[addr]);    }}t_addrcl_mem::dump(t_addr start, t_addr stop, int bpl, class cl_console *con){  int i;  while ((start <= stop) &&	 (start < size))    {      con->dd_printf(addr_format, start); con->dd_printf(" ");      for (i= 0;	   (i < bpl) &&	     (start+i < size) &&	     (start+i <= stop);	   i++)	{	  con->dd_printf(data_format, /*read*/get(start+i)); con->dd_printf(" ");	}      while (i < bpl)	{	  int j;	  j= width/4 + ((width%4)?1:0) + 1;	  while (j)	    {	      con->dd_printf(" ");	      j--;	    }	  i++;	}      for (i= 0; (i < bpl) &&	     (start+i < size) &&	     (start+i <= stop);	   i++)	{	  long c= get(start+i);	  con->dd_printf("%c", isprint(255&c)?(255&c):'.');	  if (width > 8)	    con->dd_printf("%c", isprint(255&(c>>8))?(255&(c>>8)):'.');	  if (width > 16)	    con->dd_printf("%c", isprint(255&(c>>16))?(255&(c>>16)):'.');	  if (width > 24)	    con->dd_printf("%c", isprint(255&(c>>24))?(255&(c>>24)):'.');	}      con->dd_printf("\n");      dump_finished= start+i;      start+= bpl;    }  return(dump_finished);}t_addrcl_mem::dump(class cl_console *con){  return(dump(dump_finished, dump_finished+10*8-1, 8, con));}/* *//*cl_mapped_cell::cl_mapped_cell(class cl_cell *realcell){  real_cell= realcell;}cl_mapped_cell::~cl_mapped_cell(void){}t_memcl_mapped_cell::read(void){  return(real_cell->read());}t_memcl_mapped_cell::read(enum hw_cath skip){  return(real_cell->read(skip));}t_memcl_mapped_cell::get(void){  return(real_cell->get());}t_memcl_mapped_cell::write(t_mem val){  return(real_cell->write(val));}t_memcl_mapped_cell::set(t_mem val){  return(real_cell->set(val));}t_memcl_mapped_cell::add(long what){  return(real_cell->add(what));}t_memcl_mapped_cell::wadd(long what){  return(real_cell->wadd(what));}voidcl_mapped_cell::set_bit1(t_mem bits){  return(real_cell->set_bit1(bits));}voidcl_mapped_cell::set_bit0(t_mem bits){  return(real_cell->set_bit0(bits));}class cl_cell *cl_mapped_cell::add_hw(class cl_hw *hw, int *ith){  return(real_cell->add_hw(hw, ith));}class cl_hw *cl_mapped_cell::get_hw(int ith){  return(real_cell->get_hw(ith));}class cl_event_handler *cl_mapped_cell::get_event_handler(void){  return(real_cell->get_event_handler());}*//* */cl_m::cl_m(enum mem_class atype, char *aclass_name, t_addr asize, int awidth,	   class cl_uc *auc):  cl_memory(aclass_name, asize, awidth)  //cl_mem(atype, aclass_name, 0, awidth, auc){  t_addr a;  //size= asize;  width= awidth;  set_name(aclass_name);  uc= auc;  type= atype;  array= (class cl_cell **)calloc(size, sizeof(class cl_cell *));  for (a= 0; a < size; a++)    array[a]= new cl_normal_cell(width);  bus_mask= 0;  t_addr i;  for (i= 1; i < size; i<<=1)    bus_mask= (bus_mask<<1)|1;  dummy= new cl_normal_cell(width);  //mk_cell(size, 0);}cl_m::~cl_m(void){  t_addr a;  for (a= 0; a < size; a++)    delete array[a];  free(array);  delete dummy;}intcl_m::init(void){  t_addr i;  cl_memory::init();  for (i= 0; i < size; i++)    set(i, (type==MEM_ROM)?(-1):0);  return(0);}char *cl_m::id_string(void){  char *s= get_id_string(mem_ids, type);  return(s?s:(char*)"NONE");}/*voidcl_m::mk_cell(t_addr addr, class cl_cell *cell){  if (!cell)    cell= new cl_cell(width);  class cl_cell *p;  if (addr >= size)    p= dummy;  else    p= array[addr];  if (p == 0)    {      p= (class cl_cell *)calloc(1, sizeof(*cell));    }  else    {      p->destroy();      p= (class cl_cell *)realloc(p, sizeof(cell));    }  memcpy(p, cell, sizeof(*cell));  cell->destroy();  delete cell;}*/t_memcl_m::read(t_addr addr){  //addr&= bus_mask;  if (addr >= size)    {      err_inv_addr(addr);      return(dummy->read());    }  return(array[addr]->read());}t_memcl_m::read(t_addr addr, enum hw_cath skip){  //addr&= bus_mask;  if (addr >= size)    {      err_inv_addr(addr);      return(dummy->read(skip));    }  return(array[addr]->read(skip));}t_memcl_m::get(t_addr addr){  addr&= bus_mask;  if (addr >= size)    {      err_inv_addr(addr);      return(dummy->get());    }  return(array[addr]->get());}t_memcl_m::write(t_addr addr, t_mem val){  //addr&= bus_mask;  if (addr >= size)    {      err_inv_addr(addr);      return(dummy->write(val));    }  return(array[addr]->write(val));}voidcl_m::set(t_addr addr, t_mem val){  if (addr >= size)    {      err_inv_addr(addr);      //addr&= bus_mask;      dummy->set(val);      return;    }  //addr&= bus_mask;  array[addr]->set(val);}class cl_cell *cl_m::get_cell(t_addr addr){  //addr&= bus_mask;  if (addr >= size)    {      err_inv_addr(addr);      return(dummy);    }  return(array[addr]);}/* Set or clear bits, without callbacks */voidcl_m::set_bit1(t_addr addr, t_mem bits){  class cl_cell *cell;  addr&= bus_mask;  if (addr >= size)    {      err_inv_addr(addr);      cell= dummy;    }  else    cell= array[addr];  bits&= cell->get_mask();  cell->set(cell->get() | bits);}voidcl_m::write_bit1(t_addr addr, t_mem bits){  class cl_cell *cell;  addr&= bus_mask;  if (addr >= size)    {      err_inv_addr(addr);      cell= dummy;    }  else    cell= array[addr];  bits&= cell->get_mask();  cell->write(cell->get() | bits);}voidcl_m::set_bit0(t_addr addr, t_mem bits){  class cl_cell *cell;  addr&= bus_mask;  if (addr >= size)    {      err_inv_addr(addr);      cell= dummy;    }  else    cell= array[addr];  bits&= cell->get_mask();  cell->set(cell->get() & ~bits);}voidcl_m::write_bit0(t_addr addr, t_mem bits){  class cl_cell *cell;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -