Line 53... |
Line 53... |
struct dev_memarea *dev_list;
|
struct dev_memarea *dev_list;
|
|
|
/* Temporary variable to increase speed. */
|
/* Temporary variable to increase speed. */
|
struct dev_memarea *cur_area;
|
struct dev_memarea *cur_area;
|
|
|
void dumpmemory(unsigned int from, unsigned int to, int disasm, int nl)
|
|
{
|
|
unsigned int i, j;
|
|
struct label_entry *tmp;
|
|
int breakpoint = 0;
|
|
int ilen = disasm ? 4 : 16;
|
|
|
|
for(i = from; i < to; i += ilen) {
|
|
printf("%.8x: ", i);
|
|
for (j = 0; j < ilen;) {
|
|
int data = -1;
|
|
if (!disasm) {
|
|
tmp = NULL;
|
|
if (verify_memoryarea(i+j)) {
|
|
struct label_entry *entry;
|
|
entry = get_label(i + j);
|
|
if (entry)
|
|
printf("(%s)", entry->name);
|
|
printf("%02x ", data = evalsim_mem8(i+j));
|
|
} else printf("XX ");
|
|
j++;
|
|
} else {
|
|
int breakpoint;
|
|
unsigned int _insn = read_mem(i, &breakpoint);
|
|
int index = insn_decode (_insn);
|
|
int len = insn_len (index);
|
|
|
|
tmp = NULL;
|
|
if (verify_memoryarea(i+j)) {
|
|
struct label_entry *entry;
|
|
entry = get_label(i + j);
|
|
if (entry)
|
|
printf("(%s)", entry->name);
|
|
|
|
printf(": %08x ", (unsigned long)_insn);
|
|
if (index >= 0) {
|
|
disassemble_insn (_insn);
|
|
printf(" %s", disassembled);
|
|
} else
|
|
printf("<invalid>");
|
|
} else printf("XXXXXXXX");
|
|
j += len;
|
|
}
|
|
}
|
|
if (nl)
|
|
printf ("\n");
|
|
}
|
|
}
|
|
|
|
|
|
/* It returns physical address. */
|
/* It returns physical address. */
|
unsigned long translate_vrt_to_phy_add(unsigned long virtaddr)
|
unsigned long translate_vrt_to_phy_add(unsigned long virtaddr)
|
{
|
{
|
if (config.ic.tagtype == NONE)
|
if (config.ic.tagtype == NONE)
|
return virtaddr;
|
return virtaddr;
|
Line 277... |
Line 227... |
}
|
}
|
|
|
/* Returns 32-bit values from mem array. Big endian version. */
|
/* Returns 32-bit values from mem array. Big endian version. */
|
unsigned long read_mem(unsigned long memaddr,int* breakpoint)
|
unsigned long read_mem(unsigned long memaddr,int* breakpoint)
|
{
|
{
|
|
|
unsigned long temp;
|
unsigned long temp;
|
struct dev_memarea *dev;
|
struct dev_memarea *dev;
|
|
|
slp_checkaccess(memaddr, SLP_MEMREAD);
|
slp_checkaccess(memaddr, SLP_MEMREAD);
|
if (DEBUG_ENABLED)
|
if (DEBUG_ENABLED)
|
Line 538... |
Line 487... |
printf("EXCEPTION: write out of memory (8-bit access to %.8lx)\n", memaddr);
|
printf("EXCEPTION: write out of memory (8-bit access to %.8lx)\n", memaddr);
|
cont_run = 0;
|
cont_run = 0;
|
}
|
}
|
}
|
}
|
|
|
|
void dumpmemory(unsigned int from, unsigned int to, int disasm, int nl)
|
|
{
|
|
unsigned int i, j;
|
|
struct label_entry *tmp;
|
|
int breakpoint = 0;
|
|
int ilen = disasm ? 4 : 16;
|
|
|
|
for(i = from; i < to; i += ilen) {
|
|
printf("%.8x: ", i);
|
|
for (j = 0; j < ilen;) {
|
|
int data = -1;
|
|
if (!disasm) {
|
|
tmp = NULL;
|
|
if (verify_memoryarea(i+j)) {
|
|
struct label_entry *entry;
|
|
entry = get_label(i + j);
|
|
if (entry)
|
|
printf("(%s)", entry->name);
|
|
printf("%02x ", data = evalsim_mem8(i+j));
|
|
} else printf("XX ");
|
|
j++;
|
|
} else {
|
|
int breakpoint;
|
|
unsigned int _insn = read_mem(i, &breakpoint);
|
|
int index = insn_decode (_insn);
|
|
int len = insn_len (index);
|
|
|
|
tmp = NULL;
|
|
if (verify_memoryarea(i+j)) {
|
|
struct label_entry *entry;
|
|
entry = get_label(i + j);
|
|
if (entry)
|
|
printf("(%s)", entry->name);
|
|
|
|
printf(": %08x ", (unsigned long)_insn);
|
|
if (index >= 0) {
|
|
disassemble_insn (_insn);
|
|
printf(" %s", disassembled);
|
|
} else
|
|
printf("<invalid>");
|
|
} else printf("XXXXXXXX");
|
|
j += len;
|
|
}
|
|
}
|
|
if (nl)
|
|
printf ("\n");
|
|
}
|
|
}
|
|
|
|
|
unsigned long simmem_read_byte(unsigned long addr) {
|
unsigned long simmem_read_byte(unsigned long addr) {
|
return simmem[cur_area->misc + (addr & cur_area->size_mask)].data;
|
return simmem[cur_area->misc + (addr & cur_area->size_mask)].data;
|
}
|
}
|
|
|
void simmem_write_byte(unsigned long addr, unsigned long value) {
|
void simmem_write_byte(unsigned long addr, unsigned long value) {
|