MicrOS
arithmetic_operations.h
Go to the documentation of this file.
1 #ifndef V8086_ARITHMETIC_OPERATIONS_H
2 #define V8086_ARITHMETIC_OPERATIONS_H
3 
4 #include <stdbool.h>
5 
6 int16_t perform_adding(v8086* machine, void* dest, void* source, uint8_t width, uint32_t carry);
7 int16_t perform_subtracting(v8086* machine, void* dest, void* source, uint8_t width, uint32_t carry);
8 int16_t perform_or(v8086* machine, void* dest, void* source, uint8_t width, uint32_t carry);
9 int16_t perform_and(v8086* machine, void* dest, void* source, uint8_t width, uint32_t carry);
10 int16_t perform_xor(v8086* machine, void* dest, void* source, uint8_t width, uint32_t carry);
11 int16_t perform_cmp(v8086* machine, void* dest, void* source, uint8_t width, uint32_t carry);
12 int16_t perform_ror(v8086* machine, void* dest, uint8_t arg, uint8_t width);
13 int16_t perform_rol(v8086* machine, void* dest, uint8_t arg, uint8_t width);
14 int16_t perform_rcl(v8086* machine, void* dest, uint8_t arg, uint8_t width);
15 int16_t perform_rcr(v8086* machine, void* dest, uint8_t arg, uint8_t width);
16 int16_t perform_shl(v8086* machine, void* dest, uint8_t arg, uint8_t width);
17 int16_t perform_shr(v8086* machine, void* dest, uint8_t arg, uint8_t width);
18 int16_t perform_sar(v8086* machine, void* dest, uint8_t arg, uint8_t width);
19 int16_t perform_neg(v8086* machine, void* source, uint8_t width);
20 int16_t perform_multiplication(v8086* machine, void* source, uint8_t signed_mul, uint8_t width);
21 int16_t perform_multiplication_3_byte(v8086* machine, void* dest, void* source, void* imm, uint8_t signed_mul, uint8_t width, uint8_t second_width);
22 int16_t perform_division(v8086* machine, void* source, uint8_t signed_div, uint8_t width);
23 int16_t perform_test(v8086* machine, void* source, void* dest, uint8_t width);
24 int16_t perform_inc(v8086* machine, void* dest, uint8_t width);
25 int16_t perform_dec(v8086* machine, void* dest, uint8_t width);
26 
27 int16_t perform_artihmetic_or_logical_instruction(v8086* machine, uint8_t recalculated_opcode, uint32_t carry, int16_t (*operation)(v8086*, void*, void*, uint8_t, uint32_t));
28 int16_t perform_arithmetic_or_logical_instruction_group(v8086* machine, uint8_t recalculated_opcode, uint8_t mod_rm, uint32_t carry, int16_t (*operation)(v8086*, void*, void*, uint8_t, uint32_t));
29 int16_t perform_inc_dec(v8086* machine, uint8_t opcode, bool dec);
30 int16_t execute_test(v8086* machine, uint8_t opcode);
31 int16_t execute_test_immediate(v8086* machine, uint8_t opcode);
32 int16_t execute_group_2(v8086* machine, uint8_t opcode);
33 int16_t execute_group_3(v8086* machine, uint8_t opcode);
34 int16_t execute_double_shift(v8086* machine, uint8_t width, uint8_t right_shift, uint8_t use_cl);
35 
36 #endif //V8086_ARITHMETIC_OPERATIONS_H
int16_t perform_rcl(v8086 *machine, void *dest, uint8_t arg, uint8_t width)
Definition: arithmetic_operations.c:150
int16_t execute_group_3(v8086 *machine, uint8_t opcode)
Definition: arithmetic_operations.c:744
int16_t execute_double_shift(v8086 *machine, uint8_t width, uint8_t right_shift, uint8_t use_cl)
Definition: arithmetic_operations.c:804
int16_t perform_or(v8086 *machine, void *dest, void *source, uint8_t width, uint32_t carry)
Definition: arithmetic_operations.c:46
int16_t execute_test(v8086 *machine, uint8_t opcode)
Definition: arithmetic_operations.c:674
int16_t perform_xor(v8086 *machine, void *dest, void *source, uint8_t width, uint32_t carry)
Definition: arithmetic_operations.c:82
int16_t perform_subtracting(v8086 *machine, void *dest, void *source, uint8_t width, uint32_t carry)
Definition: arithmetic_operations.c:28
int16_t perform_multiplication(v8086 *machine, void *source, uint8_t signed_mul, uint8_t width)
Definition: arithmetic_operations.c:303
int16_t perform_and(v8086 *machine, void *dest, void *source, uint8_t width, uint32_t carry)
Definition: arithmetic_operations.c:64
v8086 * machine
Definition: vbe.c:8
int16_t perform_shr(v8086 *machine, void *dest, uint8_t arg, uint8_t width)
Definition: arithmetic_operations.c:210
int16_t perform_division(v8086 *machine, void *source, uint8_t signed_div, uint8_t width)
Definition: arithmetic_operations.c:384
int16_t perform_neg(v8086 *machine, void *source, uint8_t width)
Definition: arithmetic_operations.c:284
int16_t perform_rcr(v8086 *machine, void *dest, uint8_t arg, uint8_t width)
Definition: arithmetic_operations.c:170
int16_t execute_test_immediate(v8086 *machine, uint8_t opcode)
Definition: arithmetic_operations.c:690
int16_t perform_rol(v8086 *machine, void *dest, uint8_t arg, uint8_t width)
Definition: arithmetic_operations.c:134
int16_t perform_shl(v8086 *machine, void *dest, uint8_t arg, uint8_t width)
Definition: arithmetic_operations.c:190
int16_t perform_test(v8086 *machine, void *source, void *dest, uint8_t width)
Definition: arithmetic_operations.c:442
int16_t perform_dec(v8086 *machine, void *dest, uint8_t width)
Definition: arithmetic_operations.c:502
int16_t perform_multiplication_3_byte(v8086 *machine, void *dest, void *source, void *imm, uint8_t signed_mul, uint8_t width, uint8_t second_width)
Definition: arithmetic_operations.c:346
int16_t perform_cmp(v8086 *machine, void *dest, void *source, uint8_t width, uint32_t carry)
Definition: arithmetic_operations.c:100
Definition: v8086.h:155
int16_t execute_group_2(v8086 *machine, uint8_t opcode)
Definition: arithmetic_operations.c:704
int16_t perform_arithmetic_or_logical_instruction_group(v8086 *machine, uint8_t recalculated_opcode, uint8_t mod_rm, uint32_t carry, int16_t(*operation)(v8086 *, void *, void *, uint8_t, uint32_t))
Definition: arithmetic_operations.c:608
int16_t perform_inc_dec(v8086 *machine, uint8_t opcode, bool dec)
Definition: arithmetic_operations.c:662
int16_t perform_adding(v8086 *machine, void *dest, void *source, uint8_t width, uint32_t carry)
Definition: arithmetic_operations.c:10
int16_t perform_sar(v8086 *machine, void *dest, uint8_t arg, uint8_t width)
Definition: arithmetic_operations.c:230
int16_t perform_ror(v8086 *machine, void *dest, uint8_t arg, uint8_t width)
Definition: arithmetic_operations.c:118
int16_t perform_inc(v8086 *machine, void *dest, uint8_t width)
Definition: arithmetic_operations.c:460
int16_t perform_artihmetic_or_logical_instruction(v8086 *machine, uint8_t recalculated_opcode, uint32_t carry, int16_t(*operation)(v8086 *, void *, void *, uint8_t, uint32_t))
Definition: arithmetic_operations.c:544
size_t uint32_t
Unsigned integral type.
Definition: string.h:8