jtag: Apply Martin Strubel JTAG implementation for ZPU
[zpu.git] / zpu / sw / emulation / zpuemu.h
blob5fa14dd099823c51dde98aa772bf38d8f3f6e512
1 /* ZPU emulation library header
3 * (c) 2011, Martin Strubel <hackfin@section5.ch>
6 */
9 #include <stdint.h>
11 #include "zpu-tap.h"
12 #include "tap.h"
14 #define REGISTER uint32_t
15 #define ADDR uint32_t
17 // #define LDST_32 4
18 // #define LDST_16 2
19 // #define LDST_8 1
21 #define REG_PC 0
22 #define REG_SP 1
24 struct _cpu;
26 typedef struct _cpu_context {
27 struct _cpu *cpu;
28 JTAG_CTRL jtag; // Pointer to used JTAG controller
29 short id; // identification tag
30 short flags; // Interrupt flag - did we Ctrl-C ?
31 short prev_state; // CPU's previous' state (for change detect)
32 // Dual core stuff
33 } CpuContext;
35 int zpu_emuinit(CpuContext *c, JTAG_CTRL jtag);
36 int zpu_getid(CpuContext *c, uint32_t *code);
37 int zpu_emulation(CpuContext *c, int which);
38 int zpu_resume(CpuContext *c, int step);
39 int zpu_setreg(CpuContext *c, int regno, REGISTER val);
40 int zpu_getreg(CpuContext *c, int regno, REGISTER *val);
41 int zpu_state(CpuContext *c, uint16_t *state);
42 int zpu_reset(CpuContext *c, int mode);
43 int zpu_getpc(CpuContext *c, REGISTER *pc);
44 void zpu_dumpstat(CpuContext *c);
46 int zpu_mem_read(CpuContext *c, ADDR addr, unsigned int count,
47 unsigned char *b);
48 int zpu_mem_write(CpuContext *c, ADDR addr, unsigned int count,
49 const unsigned char *b);
51 enum {
52 LDST_32,
53 LDST_16,
54 LDST_8,