6 #include "../cpu/timer/timer.h" 8 #define bit_get(p,m) ((p) & (m)) 9 #define bit_set(p,m) ((p) |= (m)) 10 #define bit_clear(p,m) ((p) &= ~(m)) 11 #define bit_flip(p,m) ((p) ^= (m)) 12 #define bit_write(p,m,v) ((v) ? bit_set(p,m) : bit_clear(p,m)) 14 #define CARRY_FLAG_BIT 0u 15 #define PARITY_FLAG_BIT 2u 16 #define AUX_CARRY_FLAG_BIT 4u 17 #define ZERO_FLAG_BIT 6u 18 #define SIGN_FLAG_BIT 7u 19 #define INTERRUPT_FLAG_BIT 9u 20 #define DIRECTION_FLAG_BIT 10u 21 #define OVERFLOW_FLAG_BIT 11u 26 typedef enum _segment_register_select {
30 typedef enum _repeat_prefix {
42 typedef enum _machine_status {
77 } __attribute__((packed));
80 uint16_t
ax, _upper_ax;
81 uint16_t
cx, _upper_cx;
82 uint16_t
dx, _upper_dx;
83 uint16_t
bx, _upper_bx;
84 uint16_t
sp, _upper_sp;
85 uint16_t
bp, _upper_bp;
86 uint16_t
si, _upper_si;
87 uint16_t
di, _upper_di;
91 } __attribute__((packed));
106 uint16_t
sp, _upper_sp;
107 uint16_t
bp, _upper_bp;
108 uint16_t
si, _upper_si;
109 uint16_t
di, _upper_di;
113 } __attribute__((packed));
129 } __attribute__((packed));
133 } __attribute__((packed));
138 } __attribute__((packed));
155 typedef struct _v8086
161 uint8_t Memory[0x100000];
163 int16_t (*operations[256]) (
struct _v8086*, uint8_t);
164 int16_t (*operations_0fh[256]) (
struct _v8086*, uint8_t);
166 }__attribute__((packed))
v8086;
179 void send_reg_16(uint16_t reg);
183 uint8_t read_reg_8();
184 uint16_t read_reg_16();
188 void setSkipDebugging(
bool value);
uint16_t sp
Definition: v8086.h:84
int16_t v8086_call_int(v8086 *machine, int16_t num)
Definition: v8086.c:405
uint16_t cs
Definition: v8086.h:124
v8086 * v8086_create_machine()
Definition: v8086.c:366
uint16_t _upper_bx
Definition: v8086.h:105
uint8_t bl
Definition: v8086.h:103
uint32_t ebp
Definition: v8086.h:71
uint32_t v8086_get_address_of_int(v8086 *machine, int16_t num)
Definition: v8086.c:418
BYTE_REGISTERS
Definition: v8086.h:38
uint32_t eax
Definition: v8086.h:66
uint16_t _upper_ax
Definition: v8086.h:96
instruction_set_compatibility
Definition: v8086.h:34
pci_in_data d
Definition: pci.c:9
uint32_t operand_32_bit
Definition: v8086.h:147
uint32_t eip
Definition: v8086.h:132
uint8_t cl
Definition: v8086.h:97
repeat_prefix
Definition: v8086.h:30
uint16_t ax
Definition: v8086.h:80
machine_status
Definition: v8086.h:42
uint16_t ip
Definition: v8086.h:136
uint16_t eflags
Definition: v8086.h:75
uint32_t ebx
Definition: v8086.h:69
uint16_t si
Definition: v8086.h:86
uint16_t bx
Definition: v8086.h:83
uint16_t sp
Definition: v8086.h:106
uint16_t di
Definition: v8086.h:87
v8086 * machine
Definition: vbe.c:8
uint8_t ch
Definition: v8086.h:98
uint16_t _upper_dx
Definition: v8086.h:102
repeat_prefix rep_prefix
Definition: v8086.h:150
segment_register_select
Definition: v8086.h:26
uint8_t bh
Definition: v8086.h:104
uint8_t previous_byte_was_prefix
Definition: v8086.h:152
int16_t v8086_call_com_program(v8086 *machine, char *programPath)
Definition: v8086.c:672
_internal_state internal_state
Definition: v8086.h:160
uint16_t _upper_cx
Definition: v8086.h:99
segment_register_select segment_reg_select
Definition: v8086.h:149
uint8_t dl
Definition: v8086.h:100
uint16_t bp
Definition: v8086.h:107
void v8086_set_8086_instruction_set(v8086 *machine)
Definition: v8086.c:126
uint16_t _upper_ip
Definition: v8086.h:137
uint16_t cx
Definition: v8086.h:81
uint16_t dx
Definition: v8086.h:82
uint16_t si
Definition: v8086.h:108
uint32_t edx
Definition: v8086.h:68
uint16_t es
Definition: v8086.h:123
uint8_t dh
Definition: v8086.h:101
void v8086_destroy_machine(v8086 *machine)
Definition: v8086.c:390
uint16_t ss
Definition: v8086.h:125
DWORD_REGISTERS
Definition: v8086.h:40
uint8_t al
Definition: v8086.h:94
uint16_t flags
Definition: v8086.h:111
uint16_t ds
Definition: v8086.h:126
uint32_t address_32_bit
Definition: v8086.h:148
uint16_t fs
Definition: v8086.h:127
uint16_t cflag
Definition: v8086.h:88
uint16_t di
Definition: v8086.h:109
uint32_t edi
Definition: v8086.h:73
uint32_t ecx
Definition: v8086.h:67
int16_t parse_and_execute_instruction(v8086 *machine)
Definition: v8086.c:425
uint32_t cflag
Definition: v8086.h:110
uint16_t bp
Definition: v8086.h:85
uint32_t esi
Definition: v8086.h:72
uint32_t esp
Definition: v8086.h:70
uint8_t ah
Definition: v8086.h:95
uint32_t cflag
Definition: v8086.h:74
uint16_t gs
Definition: v8086.h:128
uint16_t IPOffset
Definition: v8086.h:151
uint16_t flags
Definition: v8086.h:89
void v8086_set_386_instruction_set(v8086 *machine)
Definition: v8086.c:270
WORD_REGISTERS
Definition: v8086.h:39
size_t uint32_t
Unsigned integral type.
Definition: string.h:8