MicrOS
memory_operations.h
Go to the documentation of this file.
1 #ifndef V8086_MEMORY_OPERATIONS_H
2 #define V8086_MEMORY_OPERATIONS_H
3 
4 #include <stddef.h>
5 #include <stdint.h>
6 
7 #define get_absolute_address(segment, offset) ((uint32_t)segment * 0x10 + (uint32_t)offset)
8 
9 #define get_byte_pointer(memory, absolute_address) (memory + (uint32_t) absolute_address)
10 
11 #define get_word_pointer(memory, absolute_address) ((uint16_t*)(memory + (uint32_t) absolute_address))
12 
13 #define get_dword_pointer(memory, absolute_address) ((uint32_t*)(memory + (uint32_t) absolute_address))
14 
15 #define get_variable_length_pointer(memory, absolute_address, width) ((void*)(memory + (uint32_t) absolute_address))
16 
17 #define read_byte_from_pointer(memory, absolute_address) (*(get_byte_pointer(memory, absolute_address)))
18 
19 #define read_word_from_pointer(memory, absolute_address) (*(get_word_pointer(memory, absolute_address)))
20 
21 #define read_dword_from_pointer(memory, absolute_address) (*(get_dword_pointer(memory, absolute_address)))
22 
23 /*
24 static inline uint8_t read_byte_from_pointer(const uint8_t* memory, uint32_t absolute_address)
25 {
26  return *(memory + absolute_address);
27 }
28 */
29 /*
30 static inline uint16_t read_word_from_pointer(uint8_t* memory, uint32_t absolute_address)
31 {
32  return *get_word_pointer(memory, absolute_address);
33 }
34 */
35 /*
36 static inline uint32_t read_dword_from_pointer(uint8_t* memory, uint32_t absolute_address)
37 {
38  return *get_dword_pointer(memory, absolute_address);
39 }
40 */
41 
42 static inline void write_byte_to_pointer(uint8_t* memory, uint32_t absolute_address, uint8_t value)
43 {
44  *(get_byte_pointer(memory, absolute_address)) = value;
45 }
46 
47 static inline void write_word_to_pointer(uint8_t* memory, uint32_t absolute_address, uint16_t value)
48 {
49  *(get_word_pointer(memory, absolute_address)) = value;
50 }
51 
52 static inline void write_dword_to_pointer(uint8_t* memory, uint32_t absolute_address, uint32_t value)
53 {
54  *(get_dword_pointer(memory, absolute_address)) = value;
55 }
56 
57 #endif //V8086_MEMORY_OPERATIONS_H
#define get_byte_pointer(memory, absolute_address)
Definition: memory_operations.h:9
static void write_word_to_pointer(uint8_t *memory, uint32_t absolute_address, uint16_t value)
Definition: memory_operations.h:47
#define get_word_pointer(memory, absolute_address)
Definition: memory_operations.h:11
#define get_dword_pointer(memory, absolute_address)
Definition: memory_operations.h:13
size_t uint32_t
Unsigned integral type.
Definition: string.h:8
static void write_byte_to_pointer(uint8_t *memory, uint32_t absolute_address, uint8_t value)
Definition: memory_operations.h:42
static void write_dword_to_pointer(uint8_t *memory, uint32_t absolute_address, uint32_t value)
Definition: memory_operations.h:52