summaryrefslogtreecommitdiffstats
path: root/zpu/sw/emulation/zpuemu.h
blob: 5fa14dd099823c51dde98aa772bf38d8f3f6e512 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
/* ZPU emulation library header
 *
 * (c) 2011, Martin Strubel <hackfin@section5.ch>
 *
 *
 */


#include <stdint.h>

#include "zpu-tap.h"
#include "tap.h"

#define REGISTER     uint32_t
#define ADDR         uint32_t

// #define LDST_32 4
// #define LDST_16 2
// #define LDST_8  1

#define REG_PC 0
#define REG_SP 1

struct _cpu;

typedef struct _cpu_context {
	struct _cpu *cpu;
	JTAG_CTRL    jtag;           // Pointer to used JTAG controller
	short        id;             // identification tag
	short        flags;          // Interrupt flag - did we Ctrl-C ?
	short        prev_state;     // CPU's previous' state (for change detect)
	// Dual core stuff
} CpuContext;

int zpu_emuinit(CpuContext *c, JTAG_CTRL jtag);
int zpu_getid(CpuContext *c, uint32_t *code);
int zpu_emulation(CpuContext *c, int which);
int zpu_resume(CpuContext *c, int step);
int zpu_setreg(CpuContext *c, int regno, REGISTER val);
int zpu_getreg(CpuContext *c, int regno, REGISTER *val);
int zpu_state(CpuContext *c, uint16_t *state);
int zpu_reset(CpuContext *c, int mode);
int zpu_getpc(CpuContext *c, REGISTER *pc);
void zpu_dumpstat(CpuContext *c);

int zpu_mem_read(CpuContext *c, ADDR addr, unsigned int count,
	unsigned char *b);
int zpu_mem_write(CpuContext *c, ADDR addr, unsigned int count,
	const unsigned char *b);

enum {
	LDST_32,
	LDST_16,
	LDST_8,
};
OpenPOWER on IntegriCloud