forked from hchunhui/tiny386
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathi386.h
More file actions
64 lines (53 loc) · 1.89 KB
/
i386.h
File metadata and controls
64 lines (53 loc) · 1.89 KB
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
56
57
58
59
60
61
62
63
64
#ifndef I386_H
#define I386_H
#include <stdbool.h>
#include <stdint.h>
typedef uint32_t u32;
typedef uint16_t u16;
typedef uint8_t u8;
typedef int32_t s32;
typedef int16_t s16;
typedef int8_t s8;
typedef u32 uword;
typedef s32 sword;
typedef struct CPUI386 CPUI386;
typedef struct {
void *pic;
int (*pic_read_irq)(void *);
void *io;
u8 (*io_read8)(void *, int);
void (*io_write8)(void *, int, u8);
u16 (*io_read16)(void *, int);
void (*io_write16)(void *, int, u16);
u32 (*io_read32)(void *, int);
void (*io_write32)(void *, int, u32);
int (*io_read_string)(void *, int, uint8_t *, int, int);
int (*io_write_string)(void *, int, uint8_t *, int, int);
void *iomem;
u8 (*iomem_read8)(void *, uword);
void (*iomem_write8)(void *, uword, u8);
u16 (*iomem_read16)(void *, uword);
void (*iomem_write16)(void *, uword, u16);
u32 (*iomem_read32)(void *, uword);
void (*iomem_write32)(void *, uword, u32);
bool (*iomem_write_string)(void *, uword, uint8_t *, int);
} CPU_CB;
CPUI386 *cpui386_new(int gen, char *phys_mem, long phys_mem_size, CPU_CB **cb);
void cpui386_enable_fpu(CPUI386 *cpu);
void cpui386_reset(CPUI386 *cpu);
void cpui386_reset_pm(CPUI386 *cpu, uint32_t start_addr);
void cpui386_step(CPUI386 *cpu, int stepcount);
void cpui386_raise_irq(CPUI386 *cpu);
void cpui386_set_gpr(CPUI386 *cpu, int i, u32 val);
long cpui386_get_cycle(CPUI386 *cpu);
bool cpu_load8(CPUI386 *cpu, int seg, uword addr, u8 *res);
bool cpu_store8(CPUI386 *cpu, int seg, uword addr, u8 val);
bool cpu_load16(CPUI386 *cpu, int seg, uword addr, u16 *res);
bool cpu_store16(CPUI386 *cpu, int seg, uword addr, u16 val);
bool cpu_load32(CPUI386 *cpu, int seg, uword addr, u32 *res);
bool cpu_store32(CPUI386 *cpu, int seg, uword addr, u32 val);
void cpu_setax(CPUI386 *cpu, u16 ax);
u16 cpu_getax(CPUI386 *cpu);
void cpu_setexc(CPUI386 *cpu, int excno, uword excerr);
void cpu_abort(CPUI386 *cpu, int code);
#endif /* I386_H */