OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [tags/] [nog_patch_42/] [or1ksim/] [cpu/] [common/] [abstract.c] - Diff between revs 349 and 361

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 349 Rev 361
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) {

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.