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

Subversion Repositories or1k

[/] [or1k/] [tags/] [nog_patch_47/] [or1ksim/] [cpu/] [common/] [abstract.c] - Diff between revs 992 and 997

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

Rev 992 Rev 997
Line 268... Line 268...
  cur_vadd = memaddr;
  cur_vadd = memaddr;
  if (config.debug.enabled)
  if (config.debug.enabled)
    *breakpoint += CheckDebugUnit(DebugLoadAddress,memaddr); /* 28/05/01 CZ */
    *breakpoint += CheckDebugUnit(DebugLoadAddress,memaddr); /* 28/05/01 CZ */
  temp = evalsim_mem32(memaddr);
  temp = evalsim_mem32(memaddr);
  if (!cur_area) {
  if (!cur_area) {
    printf("EXCEPTION: read out of memory (16-bit access to %.8lx)\n", memaddr);
    PRINTF("EXCEPTION: read out of memory (16-bit access to %.8lx)\n", memaddr);
    except_handle(EXCEPT_BUSERR, cur_vadd);
    except_handle(EXCEPT_BUSERR, cur_vadd);
    temp = 0;
    temp = 0;
  }
  }
 
 
  if (!pending.valid && cur_area->log)
  if (!pending.valid && cur_area->log)
Line 309... Line 309...
  if (config.dc.enabled)
  if (config.dc.enabled)
    temp = dc_simulate_read(memaddr, 4);
    temp = dc_simulate_read(memaddr, 4);
  else {
  else {
    temp = evalsim_mem32(memaddr);
    temp = evalsim_mem32(memaddr);
    if (!cur_area) {
    if (!cur_area) {
      printf("EXCEPTION: read out of memory (32-bit access to %.8lx)\n", memaddr);
      PRINTF("EXCEPTION: read out of memory (32-bit access to %.8lx)\n", memaddr);
      except_handle(EXCEPT_BUSERR, cur_vadd);
      except_handle(EXCEPT_BUSERR, cur_vadd);
      temp = 0;
      temp = 0;
    }
    }
  }
  }
 
 
Line 337... Line 337...
  if (config.ic.enabled)
  if (config.ic.enabled)
    temp = ic_simulate_fetch(memaddr);
    temp = ic_simulate_fetch(memaddr);
  else {
  else {
    temp = evalsim_mem32(memaddr);
    temp = evalsim_mem32(memaddr);
    if (!cur_area) {
    if (!cur_area) {
      printf("EXCEPTION: read out of memory (32-bit access to %.8lx)\n", memaddr);
      PRINTF("EXCEPTION: read out of memory (32-bit access to %.8lx)\n", memaddr);
      except_handle(EXCEPT_BUSERR, cur_vadd);
      except_handle(EXCEPT_BUSERR, cur_vadd);
      temp = 0;
      temp = 0;
    }
    }
  }
  }
 
 
Line 376... Line 376...
  if (config.dc.enabled)
  if (config.dc.enabled)
    temp = (unsigned short)dc_simulate_read(memaddr, 2);
    temp = (unsigned short)dc_simulate_read(memaddr, 2);
  else {
  else {
    temp = evalsim_mem16(memaddr);
    temp = evalsim_mem16(memaddr);
    if (!cur_area) {
    if (!cur_area) {
      printf("EXCEPTION: read out of memory (16-bit access to %.8lx)\n", memaddr);
      PRINTF("EXCEPTION: read out of memory (16-bit access to %.8lx)\n", memaddr);
      except_handle(EXCEPT_BUSERR, cur_vadd);
      except_handle(EXCEPT_BUSERR, cur_vadd);
      temp = 0;
      temp = 0;
    }
    }
  }
  }
 
 
Line 410... Line 410...
  if (config.dc.enabled)
  if (config.dc.enabled)
    temp = (unsigned char)dc_simulate_read(memaddr, 1);
    temp = (unsigned char)dc_simulate_read(memaddr, 1);
  else {
  else {
    temp = evalsim_mem8(memaddr);
    temp = evalsim_mem8(memaddr);
    if (!cur_area) {
    if (!cur_area) {
      printf("EXCEPTION: read out of memory (8-bit access to %.8lx)\n", memaddr);
      PRINTF("EXCEPTION: read out of memory (8-bit access to %.8lx)\n", memaddr);
      except_handle(EXCEPT_BUSERR, cur_vadd);
      except_handle(EXCEPT_BUSERR, cur_vadd);
      temp = 0;
      temp = 0;
    }
    }
  }
  }
 
 
Line 445... Line 445...
      cur_area->writefunc(memaddr + 2, value & 0xFFFF);
      cur_area->writefunc(memaddr + 2, value & 0xFFFF);
      runtime.sim.mem_cycles += cur_area->delayw * 2;
      runtime.sim.mem_cycles += cur_area->delayw * 2;
      break;
      break;
    }
    }
  } else {
  } else {
    printf("EXCEPTION: write out of memory (32-bit access to %.8lx)\n", memaddr);
    PRINTF("EXCEPTION: write out of memory (32-bit access to %.8lx)\n", memaddr);
    except_handle(EXCEPT_BUSERR, cur_vadd);
    except_handle(EXCEPT_BUSERR, cur_vadd);
  }
  }
}
}
 
 
void setsim_mem16(unsigned long memaddr, unsigned short value)
void setsim_mem16(unsigned long memaddr, unsigned short value)
Line 472... Line 472...
      temp |= (unsigned long)(value & 0xffff) << ((memaddr & 2) ? 0 : 16);
      temp |= (unsigned long)(value & 0xffff) << ((memaddr & 2) ? 0 : 16);
      setsim_mem32 (memaddr & ~3ul, temp);
      setsim_mem32 (memaddr & ~3ul, temp);
      break;
      break;
    }
    }
  } else {
  } else {
    printf("EXCEPTION: write out of memory (16-bit access to %.8lx)\n", memaddr);
    PRINTF("EXCEPTION: write out of memory (16-bit access to %.8lx)\n", memaddr);
    except_handle(EXCEPT_BUSERR, cur_vadd);
    except_handle(EXCEPT_BUSERR, cur_vadd);
  }
  }
}
}
 
 
void setsim_mem8(unsigned long memaddr, unsigned char value)
void setsim_mem8(unsigned long memaddr, unsigned char value)
Line 500... Line 500...
      temp |= (unsigned long)(value & 0xff) << (8 * (3 - (memaddr & 3)));
      temp |= (unsigned long)(value & 0xff) << (8 * (3 - (memaddr & 3)));
      setsim_mem32 (memaddr & ~3ul, temp);
      setsim_mem32 (memaddr & ~3ul, temp);
      break;
      break;
    }
    }
  } else {
  } else {
    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);
    except_handle(EXCEPT_BUSERR, cur_vadd);
    except_handle(EXCEPT_BUSERR, cur_vadd);
  }
  }
}
}
 
 
/* Set mem, 32-bit. Big endian version. */
/* Set mem, 32-bit. Big endian version. */
Line 594... Line 594...
  struct label_entry *tmp;
  struct label_entry *tmp;
  int breakpoint = 0;
  int breakpoint = 0;
  int ilen = disasm ? 4 : 16;
  int ilen = disasm ? 4 : 16;
 
 
  for(i = from; i < to; i += ilen) {
  for(i = from; i < to; i += ilen) {
    printf("%.8x: ", i);
    PRINTF("%.8x: ", i);
    for (j = 0; j < ilen;) {
    for (j = 0; j < ilen;) {
      int data = -1;
      int data = -1;
      if (!disasm) {
      if (!disasm) {
        tmp = NULL;
        tmp = NULL;
        if (verify_memoryarea(i+j)) {
        if (verify_memoryarea(i+j)) {
          struct label_entry *entry;
          struct label_entry *entry;
          entry = get_label(i + j);
          entry = get_label(i + j);
          if (entry)
          if (entry)
            printf("(%s)", entry->name);
            PRINTF("(%s)", entry->name);
          printf("%02x ", data = evalsim_mem8(i+j));
          PRINTF("%02x ", data = evalsim_mem8(i+j));
        } else printf("XX ");
        } else PRINTF("XX ");
        j++;
        j++;
      } else {
      } else {
        int breakpoint;
        int breakpoint;
        unsigned int _insn = read_mem(i, &breakpoint);
        unsigned int _insn = read_mem(i, &breakpoint);
        int index = insn_decode (_insn);
        int index = insn_decode (_insn);
Line 618... Line 618...
        tmp = NULL;
        tmp = NULL;
        if (verify_memoryarea(i+j)) {
        if (verify_memoryarea(i+j)) {
          struct label_entry *entry;
          struct label_entry *entry;
          entry = get_label(i + j);
          entry = get_label(i + j);
          if (entry)
          if (entry)
            printf("(%s)", entry->name);
            PRINTF("(%s)", entry->name);
 
 
          printf(": %08x ", (unsigned long)_insn);
          PRINTF(": %08x ", (unsigned long)_insn);
          if (index >= 0) {
          if (index >= 0) {
            disassemble_insn (_insn);
            disassemble_insn (_insn);
            printf(" %s", disassembled);
            PRINTF(" %s", disassembled);
          } else
          } else
            printf("<invalid>");
            PRINTF("<invalid>");
        } else printf("XXXXXXXX");
        } else PRINTF("XXXXXXXX");
        j += len;
        j += len;
      }
      }
    }
    }
    if (nl)
    if (nl)
      printf ("\n");
      PRINTF ("\n");
  }
  }
}
}
 
 
unsigned long simmem_read_word(unsigned long addr) {
unsigned long simmem_read_word(unsigned long addr) {
  return simmem32[(cur_area->misc + (addr & cur_area->size_mask)) >> 2];
  return simmem32[(cur_area->misc + (addr & cur_area->size_mask)) >> 2];
Line 686... Line 686...
          fprintf (stderr, "WARNING: Cannot open '%s'.\n", config.memory.table[i].log);
          fprintf (stderr, "WARNING: Cannot open '%s'.\n", config.memory.table[i].log);
      } else
      } else
        cur_area->log = NULL;
        cur_area->log = NULL;
      memory_needed += cur_area->size;
      memory_needed += cur_area->size;
    }
    }
    printf ("\n");
    PRINTF ("\n");
  } else {
  } else {
    if (config.sim.verbose)
    if (config.sim.verbose)
      fprintf (stderr, "WARNING: Memory not defined, assuming standard configuration.\n");
      fprintf (stderr, "WARNING: Memory not defined, assuming standard configuration.\n");
    register_memoryarea(DEFAULT_MEMORY_START, DEFAULT_MEMORY_LEN, 4, 0, &simmem_read_word, &simmem_write_word);
    register_memoryarea(DEFAULT_MEMORY_START, DEFAULT_MEMORY_LEN, 4, 0, &simmem_read_word, &simmem_write_word);
    cur_area->misc = memory_needed;
    cur_area->misc = memory_needed;
Line 750... Line 750...
{
{
  struct dev_memarea *ptmp;
  struct dev_memarea *ptmp;
 
 
  /* Check list of registered devices. */
  /* Check list of registered devices. */
  for(ptmp = dev_list; ptmp; ptmp = ptmp->next) {
  for(ptmp = dev_list; ptmp; ptmp = ptmp->next) {
    printf ("addr & %08x == %08x to %08x, size %08x, gran %iB\n",
    PRINTF ("addr & %08x == %08x to %08x, size %08x, gran %iB\n",
      ptmp->addr_mask, ptmp->addr_compare, ptmp->addr_compare | bit_mask (ptmp->size),
      ptmp->addr_mask, ptmp->addr_compare, ptmp->addr_compare | bit_mask (ptmp->size),
      ptmp->size, ptmp->granularity);
      ptmp->size, ptmp->granularity);
    printf ("\t");
    PRINTF ("\t");
    if (ptmp->delayr >= 0)
    if (ptmp->delayr >= 0)
      printf ("read delay = %i cycles, ", ptmp->delayr);
      PRINTF ("read delay = %i cycles, ", ptmp->delayr);
    else
    else
      printf ("reads not possible, ");
      PRINTF ("reads not possible, ");
 
 
    if (ptmp->delayw >= 0)
    if (ptmp->delayw >= 0)
      printf ("write delay = %i cycles", ptmp->delayw);
      PRINTF ("write delay = %i cycles", ptmp->delayw);
    else
    else
      printf ("writes not possible");
      PRINTF ("writes not possible");
 
 
    if (ptmp->log)
    if (ptmp->log)
      printf (", (logged)\n");
      PRINTF (", (logged)\n");
    else
    else
      printf ("\n");
      PRINTF ("\n");
  }
  }
}
}
 
 
/* Outputs time in pretty form to dest string */
/* Outputs time in pretty form to dest string */
 
 

powered by: WebSVN 2.1.0

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