#include <stdio.h>
#include "bfemu.h"
#include "bfin-registers.h"
#include "platform.h"
#include "timing.h"
static char g_line[] =
"------------------------------------------------------------------------\n";
#define DEF_REG(x) {REG_##x, #x}
static struct _regrepr {
int regno;
const char *repr;
} g_registers[] = {
DEF_REG(RETE),
DEF_REG(RETI),
DEF_REG(RETX),
DEF_REG(RETN),
DEF_REG(R0),
DEF_REG(R1),
DEF_REG(R2),
DEF_REG(R3),
DEF_REG(R4),
DEF_REG(R5),
DEF_REG(R6),
DEF_REG(R7),
DEF_REG(P0),
DEF_REG(P1),
DEF_REG(P2),
DEF_REG(P3),
DEF_REG(P4),
DEF_REG(P5),
DEF_REG(SP),
DEF_REG(FP),
DEF_REG(SEQSTAT),
DEF_REG(SYSCFG),
{ -1, "" }
};
void dump_registers(CPU cpu)
{
struct _regrepr *r;
int regnos[128];
BFIN_REGISTER regs[128];
TIMEVAL t0, t1;
float t;
r = g_registers;
int *reg = regnos;
int i = 0;
while (r->regno != -1) {
*reg++ = r->regno;
r++; i++;
}
*reg = -1;
gettime(&t0);
save_registers(cpu, regs, regnos);
gettime(&t1);
r = g_registers;
reg = regnos;
i = 0;
while (r->regno != -1) {
printf("%8s = %08lx\n", r->repr, regs[i]);
r++; i++;
}
t = took_time(&t0, &t1);
printf("took: %f\n", t);
}
int main(int argc, char **argv)
{
CPU cpu;
int error;
unsigned int revision;
if (jtag_init(0, &cpu) < 0) {
printf("Could not open jtag controller\n");
return -1;
}
printf("Initializing emulation\n");
error = emulation_init(cpu);
if (error < 0) return -1;
char *s;
printf("Detecting device...\n");
s = detect_device(cpu, &revision);
if (s) {
printf("Detected Device: %s rev:%d\n", s, revision);
} else {
printf("Could not detect device, JTAG failure ?\n");
return -1;
}
error = emulation_enter(cpu);
if (error < 0) {
printf("Emulator not ready!\n");
return -1;
}
printf(g_line);
dump_registers(cpu);
printf(g_line);
BFIN_REGISTER pc = get_cpuregister(cpu, REG_RETE);
printf("current PC: %08lx\n", pc);
printf(g_line);
emulation_leave(cpu);
emulation_exit(cpu);
jtag_exit(cpu);
return 0;
}