Line 45... |
Line 45... |
|
|
/* Used to signal whether during loading of programs a translation fault occured. */
|
/* Used to signal whether during loading of programs a translation fault occured. */
|
static unsigned long transl_error;
|
static unsigned long transl_error;
|
|
|
|
|
int nonempty(char *line)
|
|
{
|
|
int i;
|
|
|
|
for(i = 0; i < strlen(line); i++)
|
|
if (!isspace(line[i]))
|
|
return(1);
|
|
return(0);
|
|
}
|
|
|
|
int nondigit(char *line)
|
|
{
|
|
int i;
|
|
|
|
for(i = 0; i < strlen(line); i++)
|
|
if (!isdigit(line[i]))
|
|
return(1);
|
|
return(0);
|
|
}
|
|
|
|
char *strtoken(char *in, char *out, int which)
|
char *strtoken(char *in, char *out, int which)
|
{
|
{
|
char *super;
|
char *super;
|
char *sub;
|
char *sub;
|
char *newline;
|
char *newline;
|
Line 130... |
Line 110... |
printf("can't translate\n", laddr);
|
printf("can't translate\n", laddr);
|
exit(1);
|
exit(1);
|
return -1;
|
return -1;
|
}
|
}
|
|
|
void adddatastr(char *str,int* breakpoint)
|
|
{
|
|
if (str)
|
|
str++;
|
|
else
|
|
return;
|
|
|
|
for(; *str && *str != '\"'; str++, translate(freemem++,breakpoint))
|
|
if (*str == '\\')
|
|
switch (*++str) {
|
|
case 'n': setsim_mem8(translate(freemem,breakpoint), '\n');
|
|
break;
|
|
case 't': setsim_mem8(translate(freemem,breakpoint), '\t');
|
|
break;
|
|
case 'r': setsim_mem8(translate(freemem,breakpoint), '\r');
|
|
break;
|
|
case '0': setsim_mem8(translate(freemem,breakpoint), '\0');
|
|
break;
|
|
default: break;
|
|
}
|
|
else
|
|
setsim_mem8(translate(freemem,breakpoint), *str);
|
|
}
|
|
|
|
/* Modified by CZ 26/05/01 */
|
|
/* Added code for new mode operation */
|
|
void adddataword(char *item,int* breakpoint)
|
|
{
|
|
unsigned long num;
|
|
|
|
if (isdigit(*item))
|
|
num = strtoul(item, NULL, 0);
|
|
else
|
|
num = eval_label(item);
|
|
|
|
debug("adddataword: [0x%x] <= %x\n", translate(freemem,breakpoint), num);
|
|
setsim_mem32(translate(freemem,breakpoint), num);
|
|
|
|
if(config.filename) /* When external debugger loads data, it should not change freemem */
|
|
freemem += 4;
|
|
}
|
|
|
|
void adddatahalf(char *item,int* breakpoint)
|
|
{
|
|
unsigned long num;
|
|
|
|
if (isdigit(*item))
|
|
num = strtoul(item, NULL, 0);
|
|
else
|
|
num = eval_label(item);
|
|
|
|
setsim_mem16(translate(freemem,breakpoint), num);
|
|
|
|
freemem += 2;
|
|
}
|
|
|
|
void adddatabyte(char *item,int* breakpoint)
|
|
{
|
|
unsigned long num;
|
|
|
|
if (isdigit(*item))
|
|
num = strtoul(item, NULL, 0);
|
|
else
|
|
num = eval_label(item);
|
|
|
|
setsim_mem8(translate(freemem,breakpoint),num);
|
|
|
|
freemem++;
|
|
}
|
|
|
|
void adddataspace(char *num)
|
|
{
|
|
freemem += atol(num);
|
|
}
|
|
|
|
void addlabel(char *label, unsigned long freemem,int* breakpoint)
|
void addlabel(char *label, unsigned long freemem,int* breakpoint)
|
{
|
{
|
struct label_entry **tmp;
|
struct label_entry **tmp;
|
struct mem_entry *entry;
|
struct mem_entry *entry;
|
debug("Adding label %s at 0x%x\n", label, translate(freemem,breakpoint));
|
debug("Adding label %s at 0x%x\n", label, translate(freemem,breakpoint));
|