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;
|