X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=sim%2Fucsim%2Fsim.src%2Farg.cc;h=e38ae65dc95938344b2af88a0eff9fd1e16c5486;hb=0418f658ab70836d8dfec91839945d3b6eb45cb7;hp=fe2e6811c21aaaa4e62797c2bee2c372d35cd0c9;hpb=6ba6105dc5975c3b0cc0d1ce53f47a1ddf4be9cf;p=fw%2Fsdcc diff --git a/sim/ucsim/sim.src/arg.cc b/sim/ucsim/sim.src/arg.cc index fe2e6811..e38ae65d 100644 --- a/sim/ucsim/sim.src/arg.cc +++ b/sim/ucsim/sim.src/arg.cc @@ -151,8 +151,19 @@ cl_cmd_arg::as_data(void) bool cl_cmd_arg::as_memory(class cl_uc *uc) { - value.memory= uc->mem(s_value); - return(value.memory != 0); + value.memory.memory= uc->memory(s_value); + value.memory.address_space= 0; + value.memory.memchip= 0; + if (value.memory.memory) + { + if (value.memory.memory->is_chip()) + value.memory.memchip= + dynamic_cast(value.memory.memory); + if (value.memory.memory->is_address_space()) + value.memory.address_space= + dynamic_cast(value.memory.memory); + } + return(value.memory.memory != 0); } bool @@ -206,7 +217,7 @@ cl_cmd_int_arg::get_address(class cl_uc *uc, t_addr *addr) bool cl_cmd_int_arg::get_bit_address(class cl_uc *uc, // input - class cl_mem **mem, // outputs + class cl_address_space **mem, // outputs t_addr *mem_addr, t_mem *bit_mask) { @@ -214,7 +225,10 @@ cl_cmd_int_arg::get_bit_address(class cl_uc *uc, // input if (!get_address(uc, &bit_addr)) return(DD_FALSE); - return(uc->extract_bit_address(bit_addr, mem, mem_addr, bit_mask)); + + if (mem) + *mem= uc->bit2mem(bit_addr, mem_addr, bit_mask); + return(mem && *mem); } bool @@ -262,17 +276,18 @@ cl_cmd_sym_arg::get_address(class cl_uc *uc, t_addr *addr) bool cl_cmd_sym_arg::get_bit_address(class cl_uc *uc, // input - class cl_mem **mem, // outputs + class cl_address_space **mem, // outputs t_addr *mem_addr, t_mem *bit_mask) { struct name_entry *ne; - if ((ne= get_name_entry(uc->bit_tbl(), - get_svalue(), - uc)) == NULL) + ne= get_name_entry(uc->bit_tbl(), get_svalue(), uc); + if (ne == NULL) return(DD_FALSE); - return(uc->extract_bit_address(ne->addr, mem, mem_addr, bit_mask)); + if (mem) + *mem= uc->bit2mem(ne->addr, mem_addr, bit_mask); + return(mem && *mem); } bool @@ -310,7 +325,8 @@ cl_cmd_sym_arg::as_hw(class cl_uc *uc) cl_cmd_str_arg::cl_cmd_str_arg(/*class cl_uc *iuc,*/ char *str): cl_cmd_arg(/*iuc,*/ str) -{} +{ +} /* Bit */ @@ -341,12 +357,16 @@ cl_cmd_bit_arg::get_address(class cl_uc *uc, t_addr *addr) bool cl_cmd_bit_arg::get_bit_address(class cl_uc *uc, // input - class cl_mem **mem, // outputs + class cl_address_space **mem, // outputs t_addr *mem_addr, t_mem *bit_mask) { if (mem) - *mem= uc->mem(MEM_SFR); + { + *mem= uc->address_space(MEM_SFR_ID); + if (!*mem) + return(DD_FALSE); + } if (mem_addr) { if (!sfr || @@ -374,14 +394,14 @@ cl_cmd_array_arg::cl_cmd_array_arg(/*class cl_uc *iuc,*/ class cl_cmd_arg *aindex): cl_cmd_arg(/*iuc,*/ (long)0) { - name = aname; + name_arg= aname; index= aindex; } cl_cmd_array_arg::~cl_cmd_array_arg(void) { - if (name) - delete name; + if (name_arg) + delete name_arg; if (index) delete index; } @@ -392,9 +412,9 @@ cl_cmd_array_arg::as_hw(class cl_uc *uc) char *n; t_addr a; - if (name == 0 || + if (name_arg == 0 || index == 0 || - (n= name->get_svalue()) == NULL || + (n= name_arg->get_svalue()) == NULL || !index->get_address(uc, &a)) return(DD_FALSE); @@ -407,7 +427,7 @@ cl_cmd_array_arg::as_hw(class cl_uc *uc) * Program arguments *---------------------------------------------------------------------------- */ - +/* cl_prg_arg::cl_prg_arg(char sn, char *ln, long lv): cl_arg(lv) { @@ -441,15 +461,15 @@ cl_prg_arg::~cl_prg_arg(void) if (long_name) free(long_name); } - +*/ /* * List of arguments *---------------------------------------------------------------------------- */ - +/* int -cl_arguments::arg_avail(char name) +cl_arguments::arg_avail(char nam) { class cl_prg_arg *a; int i; @@ -457,14 +477,14 @@ cl_arguments::arg_avail(char name) for (i= 0; i < count; i++) { a= (class cl_prg_arg *)(at(i)); - if (a->short_name == name) + if (a->short_name == nam) return(1); } return(0); } int -cl_arguments::arg_avail(char *name) +cl_arguments::arg_avail(char *nam) { class cl_prg_arg *a; int i; @@ -473,7 +493,7 @@ cl_arguments::arg_avail(char *name) { a= (class cl_prg_arg *)(at(i)); if (a->long_name && - strcmp(a->long_name, name) == 0) + strcmp(a->long_name, nam) == 0) return(1); } return(0); @@ -550,6 +570,6 @@ cl_arguments::get_parg(char sname, char *lname) } return(0); } - +*/ /* End of arg.cc */