MicrOS
v8086.h File Reference
#include <stdint.h>
#include <stdbool.h>
#include "../cpu/timer/timer.h"

Go to the source code of this file.

Classes

struct  DWORDREGS
 
struct  WORDREGS
 
struct  BYTEREGS
 
union  REGS
 
struct  SREGS
 
struct  DWORDIP
 
struct  WORDIP
 
union  IP
 
struct  _internal_state
 
struct  v8086
 

Macros

#define bit_get(p, m)   ((p) & (m))
 
#define bit_set(p, m)   ((p) |= (m))
 
#define bit_clear(p, m)   ((p) &= ~(m))
 
#define bit_flip(p, m)   ((p) ^= (m))
 
#define bit_write(p, m, v)   ((v) ? bit_set(p,m) : bit_clear(p,m))
 
#define CARRY_FLAG_BIT   0u
 
#define PARITY_FLAG_BIT   2u
 
#define AUX_CARRY_FLAG_BIT   4u
 
#define ZERO_FLAG_BIT   6u
 
#define SIGN_FLAG_BIT   7u
 
#define INTERRUPT_FLAG_BIT   9u
 
#define DIRECTION_FLAG_BIT   10u
 
#define OVERFLOW_FLAG_BIT   11u
 

Enumerations

enum  segment_register_select {
  V8086_ES =0, V8086_CS, V8086_SS, V8086_DS,
  V8086_FS, V8086_GS, V8086_DEFAULT
}
 
enum  repeat_prefix { V8086_NONE_REPEAT, V8086_REPNE, V8086_REP_REPE }
 
enum  instruction_set_compatibility { V8086_IS8086, V8086_IS386 }
 
enum  BYTE_REGISTERS {
  V8086_AL =0, V8086_CL, V8086_DL, V8086_BL,
  V8086_AH, V8086_CH, V8086_DH, V8086_BH
}
 
enum  WORD_REGISTERS {
  V8086_AX =0, V8086_CX, V8086_DX, V8086_BX,
  V8086_SP, V8086_BP, V8086_SI, V8086_DI
}
 
enum  DWORD_REGISTERS {
  V8086_EAX =0, V8086_ECX, V8086_EDX, V8086_EBX,
  V8086_ESP, V8086_EBP, V8086_ESI, V8086_EDI
}
 
enum  machine_status {
  V8086_OK = 0, V8086_UNDEFINED_OPCODE = -1, V8086_UNDEFINED_REGISTER = -2, V8086_UNDEFINED_SEGMENT_REGISTER = -3,
  V8086_UNABLE_GET_MEMORY = -4, V8086_BAD_MOD_RM = -5, V8086_BAD_RM = -6, V8086_BAD_MOD = -7,
  V8086_BAD_REG = -8, V8086_BAD_WIDTH = -9, V8086_BAD_INDEX = -10, V8086_BAD_BASE = -11,
  V8086_UNDEFINED_RECALCULATED_OPCODE = -12, V8086_BAD_INT_NUMBER = -13, V8086_RELATIVE_JMP_OVERFLOW = -14, V8086_BOUND_ERROR = -15,
  V8086_DIVISION_BY_ZERO = -16, V8086_DIVISION_OVERFLOW = -17, V8086_DEBUG_FILE_OVERFLOW = -99, V8086_UNKNOWN_ERROR = -69
}
 

Functions

v8086v8086_create_machine ()
 
void v8086_destroy_machine (v8086 *machine)
 
int16_t v8086_call_int (v8086 *machine, int16_t num)
 
void v8086_set_8086_instruction_set (v8086 *machine)
 
void v8086_set_386_instruction_set (v8086 *machine)
 
uint32_t v8086_get_address_of_int (v8086 *machine, int16_t num)
 
int16_t v8086_call_com_program (v8086 *machine, char *programPath)
 

Macro Definition Documentation

◆ AUX_CARRY_FLAG_BIT

#define AUX_CARRY_FLAG_BIT   4u

◆ bit_clear

#define bit_clear (   p,
 
)    ((p) &= ~(m))

◆ bit_flip

#define bit_flip (   p,
 
)    ((p) ^= (m))

◆ bit_get

#define bit_get (   p,
 
)    ((p) & (m))

◆ bit_set

#define bit_set (   p,
 
)    ((p) |= (m))

◆ bit_write

#define bit_write (   p,
  m,
 
)    ((v) ? bit_set(p,m) : bit_clear(p,m))

◆ CARRY_FLAG_BIT

#define CARRY_FLAG_BIT   0u

◆ DIRECTION_FLAG_BIT

#define DIRECTION_FLAG_BIT   10u

◆ INTERRUPT_FLAG_BIT

#define INTERRUPT_FLAG_BIT   9u

◆ OVERFLOW_FLAG_BIT

#define OVERFLOW_FLAG_BIT   11u

◆ PARITY_FLAG_BIT

#define PARITY_FLAG_BIT   2u

◆ SIGN_FLAG_BIT

#define SIGN_FLAG_BIT   7u

◆ ZERO_FLAG_BIT

#define ZERO_FLAG_BIT   6u

Enumeration Type Documentation

◆ BYTE_REGISTERS

Enumerator
V8086_AL 
V8086_CL 
V8086_DL 
V8086_BL 
V8086_AH 
V8086_CH 
V8086_DH 
V8086_BH 

◆ DWORD_REGISTERS

Enumerator
V8086_EAX 
V8086_ECX 
V8086_EDX 
V8086_EBX 
V8086_ESP 
V8086_EBP 
V8086_ESI 
V8086_EDI 

◆ instruction_set_compatibility

Enumerator
V8086_IS8086 
V8086_IS386 

◆ machine_status

Enumerator
V8086_OK 
V8086_UNDEFINED_OPCODE 
V8086_UNDEFINED_REGISTER 
V8086_UNDEFINED_SEGMENT_REGISTER 
V8086_UNABLE_GET_MEMORY 
V8086_BAD_MOD_RM 
V8086_BAD_RM 
V8086_BAD_MOD 
V8086_BAD_REG 
V8086_BAD_WIDTH 
V8086_BAD_INDEX 
V8086_BAD_BASE 
V8086_UNDEFINED_RECALCULATED_OPCODE 
V8086_BAD_INT_NUMBER 
V8086_RELATIVE_JMP_OVERFLOW 
V8086_BOUND_ERROR 
V8086_DIVISION_BY_ZERO 
V8086_DIVISION_OVERFLOW 
V8086_DEBUG_FILE_OVERFLOW 
V8086_UNKNOWN_ERROR 

◆ repeat_prefix

Enumerator
V8086_NONE_REPEAT 
V8086_REPNE 
V8086_REP_REPE 

◆ segment_register_select

Enumerator
V8086_ES 
V8086_CS 
V8086_SS 
V8086_DS 
V8086_FS 
V8086_GS 
V8086_DEFAULT 

◆ WORD_REGISTERS

Enumerator
V8086_AX 
V8086_CX 
V8086_DX 
V8086_BX 
V8086_SP 
V8086_BP 
V8086_SI 
V8086_DI 

Function Documentation

◆ v8086_call_com_program()

int16_t v8086_call_com_program ( v8086 machine,
char *  programPath 
)

◆ v8086_call_int()

int16_t v8086_call_int ( v8086 machine,
int16_t  num 
)

◆ v8086_create_machine()

v8086* v8086_create_machine ( )

◆ v8086_destroy_machine()

void v8086_destroy_machine ( v8086 machine)

◆ v8086_get_address_of_int()

uint32_t v8086_get_address_of_int ( v8086 machine,
int16_t  num 
)

◆ v8086_set_386_instruction_set()

void v8086_set_386_instruction_set ( v8086 machine)

◆ v8086_set_8086_instruction_set()

void v8086_set_8086_instruction_set ( v8086 machine)