From 8fcd0cf7d6a2c891422c7101840778043207a60d Mon Sep 17 00:00:00 2001 From: Nic Gaffney Date: Sun, 10 Dec 2023 09:48:53 -0600 Subject: Changed to the based ASM syntax and implemented a rudementary GDT --- src/include/gdt.h | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 src/include/gdt.h (limited to 'src/include/gdt.h') diff --git a/src/include/gdt.h b/src/include/gdt.h new file mode 100644 index 0000000..05f426e --- /dev/null +++ b/src/include/gdt.h @@ -0,0 +1,32 @@ +#pragma once +#include +#define FLAG 0b1100 +typedef struct Segment_Descriptor { + uint16_t lim_low; + uint16_t base_low; + uint8_t base_mid; + uint8_t access; + uint8_t lim_flag; + uint8_t base_high; +} __attribute__((packed)) Segment_Descriptor_t; + +typedef struct GDTR { + uint16_t size; + uint32_t offset; +} __attribute__((packed)) GDTR_t; + +typedef struct GDT { + Segment_Descriptor_t nulldesc; + Segment_Descriptor_t codedesc; + Segment_Descriptor_t datadesc; +} __attribute__((packed)) GDT_t; + +uint8_t make_access(uint8_t DPL, uint8_t type, uint8_t exec, uint8_t direction, + uint8_t read_write); + +uint16_t make_code(uint8_t priv, uint8_t dc, uint8_t rw); +uint16_t make_data(uint8_t priv, uint8_t dc, uint8_t rw); + +Segment_Descriptor_t make_descriptor(uint32_t base, uint32_t limit, + uint16_t access_flag); +void get_gdtr(); -- cgit v1.2.3