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 574 and 587

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

Rev 574 Rev 587
Line 267... Line 267...
      temp = cur_area->readfunc(memaddr) << 16;
      temp = cur_area->readfunc(memaddr) << 16;
      temp |= cur_area->readfunc(memaddr + 2);
      temp |= cur_area->readfunc(memaddr + 2);
      mem_cycles += cur_area->delayr * 2;
      mem_cycles += cur_area->delayr * 2;
      break;
      break;
    }
    }
    if (cur_area->log)
 
      fprintf (cur_area->log, "[%08x] -> read %08x\n", memaddr, temp);
 
  } else {
  } else {
    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 300... Line 298...
        temp &= 0xffff;
        temp &= 0xffff;
      else
      else
        temp >>= 16;
        temp >>= 16;
      break;
      break;
    }
    }
    if (cur_area->log)
 
      fprintf (cur_area->log, "[%08x] -> read %08x\n", memaddr, temp);
 
  } else {
  } else {
    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 333... Line 329...
      temp = evalsim_mem32 (memaddr & ~3ul);
      temp = evalsim_mem32 (memaddr & ~3ul);
      temp >>= 8 * (3 - (memaddr & 3));
      temp >>= 8 * (3 - (memaddr & 3));
      temp &= 0xff;
      temp &= 0xff;
      break;
      break;
    }
    }
    if (cur_area->log)
 
      fprintf (cur_area->log, "[%08x] -> read %08x\n", memaddr, temp);
 
  } else {
  } else {
    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 353... Line 347...
 
 
  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->log)
 
    fprintf (cur_area->log, "[%08x] -> read %08x\n", memaddr, temp);
  if (config.debug.enabled)
  if (config.debug.enabled)
    *breakpoint += CheckDebugUnit(DebugLoadData,temp);  /* MM170901 */
    *breakpoint += CheckDebugUnit(DebugLoadData,temp);  /* MM170901 */
  return temp;
  return temp;
}
}
 
 
Line 381... Line 377...
    return 0;
    return 0;
 
 
  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->log)
 
    fprintf (cur_area->log, "[%08x] -> read %08x\n", memaddr, temp);
  if (config.debug.enabled)
  if (config.debug.enabled)
    *breakpoint += CheckDebugUnit(DebugLoadData,temp);  /* MM170901 */
    *breakpoint += CheckDebugUnit(DebugLoadData,temp);  /* MM170901 */
  return temp;
  return temp;
}
}
 
 
Line 400... Line 398...
  cur_vadd = pc;
  cur_vadd = pc;
  IFF (config.ic.enabled) ic_simulate_fetch(memaddr);
  IFF (config.ic.enabled) ic_simulate_fetch(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->log)
 
    fprintf (cur_area->log, "[%08x] -> read %08x\n", memaddr, temp);
  if (config.debug.enabled)
  if (config.debug.enabled)
    *breakpoint += CheckDebugUnit(DebugLoadData,temp);  /* MM170901 */
    *breakpoint += CheckDebugUnit(DebugLoadData,temp);  /* MM170901 */
  return temp;
  return temp;
}
}
 
 
Line 428... Line 428...
 
 
  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_mem16(memaddr);
  temp = evalsim_mem16(memaddr);
 
  if (cur_area->log)
 
    fprintf (cur_area->log, "[%08x] -> read %08x\n", memaddr, temp);
  if (config.debug.enabled)
  if (config.debug.enabled)
    *breakpoint += CheckDebugUnit(DebugLoadData,temp);  /* MM170901 */
    *breakpoint += CheckDebugUnit(DebugLoadData,temp);  /* MM170901 */
  return temp;
  return temp;
}
}
 
 
Line 451... Line 453...
 
 
  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_mem8(memaddr);
  temp = evalsim_mem8(memaddr);
 
  if (cur_area->log)
 
    fprintf (cur_area->log, "[%08x] -> read %08x\n", memaddr, temp);
  if (config.debug.enabled)
  if (config.debug.enabled)
    *breakpoint += CheckDebugUnit(DebugLoadData,temp);  /* MM170901 */
    *breakpoint += CheckDebugUnit(DebugLoadData,temp);  /* MM170901 */
  return temp;
  return temp;
}
}
 
 
/* Set mem, 32-bit. Big endian version. */
 
 
 
void set_mem32(unsigned long memaddr, unsigned long value,int* breakpoint)
 
{
 
  if (config.sim.mprofile)
 
    mprofile (memaddr, MPROF_32 | MPROF_WRITE);
 
 
 
  if (memaddr & 3) {
 
    except_handle (EXCEPT_ALIGN, memaddr);
 
    return;
 
  }
 
 
 
  cur_vadd = memaddr;
 
  memaddr = simulate_dc_mmu_store(memaddr);
 
  /* If we produced exception don't set anything */
 
  if (pending.valid)
 
    return;
 
 
 
  if (config.debug.enabled) {
 
    *breakpoint += CheckDebugUnit(DebugStoreAddress,memaddr);  /* 28/05/01 CZ */
 
    *breakpoint += CheckDebugUnit(DebugStoreData,value);
 
  }
 
 
 
  setsim_mem32(memaddr, value);
 
}
 
 
 
void setsim_mem32(unsigned long memaddr, unsigned long value)
void setsim_mem32(unsigned long memaddr, unsigned long value)
{
{
  struct dev_memarea *dev;
  struct dev_memarea *dev;
 
 
  if (verify_memoryarea(memaddr)) {
  if (verify_memoryarea(memaddr)) {
    if (cur_area->log)
 
      fprintf (cur_area->log, "[%08x] -> write %08x\n", memaddr, value);
 
    switch(cur_area->granularity) {
    switch(cur_area->granularity) {
    case 4:
    case 4:
      cur_area->writefunc(memaddr, value);
      cur_area->writefunc(memaddr, value);
      mem_cycles += cur_area->delayw;
      mem_cycles += cur_area->delayw;
      break;
      break;
Line 513... Line 489...
    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);
  }
  }
}
}
 
 
/* Set mem, 16-bit. Big endian version. */
 
 
 
void set_mem16(unsigned long memaddr, unsigned short value,int* breakpoint)
 
{
 
  if (config.sim.mprofile)
 
    mprofile (memaddr, MPROF_16 | MPROF_WRITE);
 
 
 
  if (memaddr & 1) {
 
    except_handle (EXCEPT_ALIGN, memaddr);
 
    return;
 
  }
 
 
 
  cur_vadd = memaddr;
 
  memaddr = simulate_dc_mmu_store(memaddr);
 
  /* If we produced exception don't set anything */
 
  if (pending.valid)
 
    return;
 
 
 
  if (config.debug.enabled) {
 
    *breakpoint += CheckDebugUnit(DebugStoreAddress,memaddr);  /* 28/05/01 CZ */
 
    *breakpoint += CheckDebugUnit(DebugStoreData,value);
 
  }
 
 
 
  setsim_mem16(memaddr, value);
 
}
 
 
 
void setsim_mem16(unsigned long memaddr, unsigned short value)
void setsim_mem16(unsigned long memaddr, unsigned short value)
{
{
  unsigned long temp;
  unsigned long temp;
  if (verify_memoryarea(memaddr)) {
  if (verify_memoryarea(memaddr)) {
    if (cur_area->log)
 
      fprintf (cur_area->log, "[%08x] -> write %08x\n", memaddr, value);
 
    switch(cur_area->granularity) {
    switch(cur_area->granularity) {
    case 1:
    case 1:
      cur_area->writefunc(memaddr, (value >> 8) & 0xFF);
      cur_area->writefunc(memaddr, (value >> 8) & 0xFF);
      cur_area->writefunc(memaddr + 1, value & 0xFF);
      cur_area->writefunc(memaddr + 1, value & 0xFF);
      mem_cycles += cur_area->delayw * 2;
      mem_cycles += cur_area->delayw * 2;
Line 568... Line 516...
    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);
  }
  }
}
}
 
 
/* Set mem, 8-bit. */
 
 
 
void set_mem8(unsigned long memaddr, unsigned char value,int* breakpoint)
 
{
 
  if (config.sim.mprofile)
 
    mprofile (memaddr, MPROF_8 | MPROF_WRITE);
 
 
 
  cur_vadd = memaddr;
 
  memaddr = simulate_dc_mmu_store(memaddr);
 
  /* If we produced exception don't set anything */
 
  if (pending.valid) return;
 
 
 
  if (config.debug.enabled) {
 
    *breakpoint += CheckDebugUnit(DebugStoreAddress,memaddr);  /* 28/05/01 CZ */
 
    *breakpoint += CheckDebugUnit(DebugStoreData,value);
 
  }
 
 
 
  setsim_mem8(memaddr, value);
 
}
 
 
 
void setsim_mem8(unsigned long memaddr, unsigned char value)
void setsim_mem8(unsigned long memaddr, unsigned char value)
{
{
  unsigned long temp;
  unsigned long temp;
  if (verify_memoryarea(memaddr)) {
  if (verify_memoryarea(memaddr)) {
    if (cur_area->log)
 
      fprintf (cur_area->log, "[%08x] -> write %08x\n", memaddr, value);
 
    switch (cur_area->granularity) {
    switch (cur_area->granularity) {
    case 1:
    case 1:
      cur_area->writefunc(memaddr, value);
      cur_area->writefunc(memaddr, value);
      mem_cycles += cur_area->delayw;
      mem_cycles += cur_area->delayw;
      break;
      break;
Line 618... Line 544...
    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. */
 
 
 
void set_mem32(unsigned long memaddr, unsigned long value,int* breakpoint)
 
{
 
  if (config.sim.mprofile)
 
    mprofile (memaddr, MPROF_32 | MPROF_WRITE);
 
 
 
  if (memaddr & 3) {
 
    except_handle (EXCEPT_ALIGN, memaddr);
 
    return;
 
  }
 
 
 
  cur_vadd = memaddr;
 
  memaddr = simulate_dc_mmu_store(memaddr);
 
  /* If we produced exception don't set anything */
 
  if (pending.valid)
 
    return;
 
 
 
  if (config.debug.enabled) {
 
    *breakpoint += CheckDebugUnit(DebugStoreAddress,memaddr);  /* 28/05/01 CZ */
 
    *breakpoint += CheckDebugUnit(DebugStoreData,value);
 
  }
 
 
 
  if (cur_area->log)
 
    fprintf (cur_area->log, "[%08x] -> write %08x\n", memaddr, value);
 
 
 
  setsim_mem32(memaddr, value);
 
}
 
 
 
/* Set mem, 16-bit. Big endian version. */
 
 
 
void set_mem16(unsigned long memaddr, unsigned short value,int* breakpoint)
 
{
 
  if (config.sim.mprofile)
 
    mprofile (memaddr, MPROF_16 | MPROF_WRITE);
 
 
 
  if (memaddr & 1) {
 
    except_handle (EXCEPT_ALIGN, memaddr);
 
    return;
 
  }
 
 
 
  cur_vadd = memaddr;
 
  memaddr = simulate_dc_mmu_store(memaddr);
 
  /* If we produced exception don't set anything */
 
  if (pending.valid)
 
    return;
 
 
 
  if (config.debug.enabled) {
 
    *breakpoint += CheckDebugUnit(DebugStoreAddress,memaddr);  /* 28/05/01 CZ */
 
    *breakpoint += CheckDebugUnit(DebugStoreData,value);
 
  }
 
 
 
  if (cur_area->log)
 
    fprintf (cur_area->log, "[%08x] -> write %08x\n", memaddr, value);
 
 
 
  setsim_mem16(memaddr, value);
 
}
 
 
 
/* Set mem, 8-bit. */
 
 
 
void set_mem8(unsigned long memaddr, unsigned char value,int* breakpoint)
 
{
 
  if (config.sim.mprofile)
 
    mprofile (memaddr, MPROF_8 | MPROF_WRITE);
 
 
 
  cur_vadd = memaddr;
 
  memaddr = simulate_dc_mmu_store(memaddr);
 
  /* If we produced exception don't set anything */
 
  if (pending.valid) return;
 
 
 
  if (config.debug.enabled) {
 
    *breakpoint += CheckDebugUnit(DebugStoreAddress,memaddr);  /* 28/05/01 CZ */
 
    *breakpoint += CheckDebugUnit(DebugStoreData,value);
 
  }
 
 
 
  if (cur_area->log)
 
    fprintf (cur_area->log, "[%08x] -> write %08x\n", memaddr, value);
 
 
 
  setsim_mem8(memaddr, value);
 
}
 
 
void dumpmemory(unsigned int from, unsigned int to, int disasm, int nl)
void dumpmemory(unsigned int from, unsigned int to, int disasm, int nl)
{
{
  unsigned int i, j;
  unsigned int i, j;
  struct label_entry *tmp;
  struct label_entry *tmp;
  int breakpoint = 0;
  int breakpoint = 0;

powered by: WebSVN 2.1.0

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