mirror of https://github.com/E-Almqvist/eOS
parent
0d719132e8
commit
b05f7f8557
@ -0,0 +1,19 @@ |
||||
#include "interupt.h" |
||||
|
||||
struct InteruptDescriptor { |
||||
uint16 offset_1; // offset 0 to 15 bits
|
||||
uint16 selector; // code segment sel
|
||||
uint8 null; // "padding", should be zero
|
||||
uint8 type_attr; // type & attr stuff
|
||||
uint16 offset_2; // offset 16 to 31
|
||||
}; |
||||
|
||||
void init_IDT(uint type_attr) { |
||||
__asm__ __volatile__("lgdt %[idt_pointer]"); |
||||
} |
||||
|
||||
void int_handler() { |
||||
__asm__("pusha"); |
||||
// handle stuff
|
||||
__asm__("popa; leave; iret"); |
||||
} |
@ -0,0 +1 @@ |
||||
#include "../lib/types.h" |
@ -0,0 +1,3 @@ |
||||
#include "io.h" |
||||
|
||||
|
@ -0,0 +1,417 @@ |
||||
/* multiboot2.h - Multiboot 2 header file. */ |
||||
/* Copyright (C) 1999,2003,2007,2008,2009,2010 Free Software Foundation, Inc.
|
||||
* |
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy |
||||
* of this software and associated documentation files (the "Software"), to |
||||
* deal in the Software without restriction, including without limitation the |
||||
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
||||
* sell copies of the Software, and to permit persons to whom the Software is |
||||
* furnished to do so, subject to the following conditions: |
||||
* |
||||
* The above copyright notice and this permission notice shall be included in |
||||
* all copies or substantial portions of the Software. |
||||
* |
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL ANY |
||||
* DEVELOPER OR DISTRIBUTOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, |
||||
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR |
||||
* IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
||||
*/ |
||||
|
||||
#ifndef MULTIBOOT_HEADER |
||||
#define MULTIBOOT_HEADER 1 |
||||
|
||||
/* How many bytes from the start of the file we search for the header. */ |
||||
#define MULTIBOOT_SEARCH 32768 |
||||
#define MULTIBOOT_HEADER_ALIGN 8 |
||||
|
||||
/* The magic field should contain this. */ |
||||
#define MULTIBOOT2_HEADER_MAGIC 0xe85250d6 |
||||
|
||||
/* This should be in %eax. */ |
||||
#define MULTIBOOT2_BOOTLOADER_MAGIC 0x36d76289 |
||||
|
||||
/* Alignment of multiboot modules. */ |
||||
#define MULTIBOOT_MOD_ALIGN 0x00001000 |
||||
|
||||
/* Alignment of the multiboot info structure. */ |
||||
#define MULTIBOOT_INFO_ALIGN 0x00000008 |
||||
|
||||
/* Flags set in the 'flags' member of the multiboot header. */ |
||||
|
||||
#define MULTIBOOT_TAG_ALIGN 8 |
||||
#define MULTIBOOT_TAG_TYPE_END 0 |
||||
#define MULTIBOOT_TAG_TYPE_CMDLINE 1 |
||||
#define MULTIBOOT_TAG_TYPE_BOOT_LOADER_NAME 2 |
||||
#define MULTIBOOT_TAG_TYPE_MODULE 3 |
||||
#define MULTIBOOT_TAG_TYPE_BASIC_MEMINFO 4 |
||||
#define MULTIBOOT_TAG_TYPE_BOOTDEV 5 |
||||
#define MULTIBOOT_TAG_TYPE_MMAP 6 |
||||
#define MULTIBOOT_TAG_TYPE_VBE 7 |
||||
#define MULTIBOOT_TAG_TYPE_FRAMEBUFFER 8 |
||||
#define MULTIBOOT_TAG_TYPE_ELF_SECTIONS 9 |
||||
#define MULTIBOOT_TAG_TYPE_APM 10 |
||||
#define MULTIBOOT_TAG_TYPE_EFI32 11 |
||||
#define MULTIBOOT_TAG_TYPE_EFI64 12 |
||||
#define MULTIBOOT_TAG_TYPE_SMBIOS 13 |
||||
#define MULTIBOOT_TAG_TYPE_ACPI_OLD 14 |
||||
#define MULTIBOOT_TAG_TYPE_ACPI_NEW 15 |
||||
#define MULTIBOOT_TAG_TYPE_NETWORK 16 |
||||
#define MULTIBOOT_TAG_TYPE_EFI_MMAP 17 |
||||
#define MULTIBOOT_TAG_TYPE_EFI_BS 18 |
||||
#define MULTIBOOT_TAG_TYPE_EFI32_IH 19 |
||||
#define MULTIBOOT_TAG_TYPE_EFI64_IH 20 |
||||
#define MULTIBOOT_TAG_TYPE_LOAD_BASE_ADDR 21 |
||||
|
||||
#define MULTIBOOT_HEADER_TAG_END 0 |
||||
#define MULTIBOOT_HEADER_TAG_INFORMATION_REQUEST 1 |
||||
#define MULTIBOOT_HEADER_TAG_ADDRESS 2 |
||||
#define MULTIBOOT_HEADER_TAG_ENTRY_ADDRESS 3 |
||||
#define MULTIBOOT_HEADER_TAG_CONSOLE_FLAGS 4 |
||||
#define MULTIBOOT_HEADER_TAG_FRAMEBUFFER 5 |
||||
#define MULTIBOOT_HEADER_TAG_MODULE_ALIGN 6 |
||||
#define MULTIBOOT_HEADER_TAG_EFI_BS 7 |
||||
#define MULTIBOOT_HEADER_TAG_ENTRY_ADDRESS_EFI32 8 |
||||
#define MULTIBOOT_HEADER_TAG_ENTRY_ADDRESS_EFI64 9 |
||||
#define MULTIBOOT_HEADER_TAG_RELOCATABLE 10 |
||||
|
||||
#define MULTIBOOT_ARCHITECTURE_I386 0 |
||||
#define MULTIBOOT_ARCHITECTURE_MIPS32 4 |
||||
#define MULTIBOOT_HEADER_TAG_OPTIONAL 1 |
||||
|
||||
#define MULTIBOOT_LOAD_PREFERENCE_NONE 0 |
||||
#define MULTIBOOT_LOAD_PREFERENCE_LOW 1 |
||||
#define MULTIBOOT_LOAD_PREFERENCE_HIGH 2 |
||||
|
||||
#define MULTIBOOT_CONSOLE_FLAGS_CONSOLE_REQUIRED 1 |
||||
#define MULTIBOOT_CONSOLE_FLAGS_EGA_TEXT_SUPPORTED 2 |
||||
|
||||
#ifndef ASM_FILE |
||||
|
||||
typedef unsigned char multiboot_uint8_t; |
||||
typedef unsigned short multiboot_uint16_t; |
||||
typedef unsigned int multiboot_uint32_t; |
||||
typedef unsigned long long multiboot_uint64_t; |
||||
|
||||
struct multiboot_header |
||||
{ |
||||
/* Must be MULTIBOOT_MAGIC - see above. */ |
||||
multiboot_uint32_t magic; |
||||
|
||||
/* ISA */ |
||||
multiboot_uint32_t architecture; |
||||
|
||||
/* Total header length. */ |
||||
multiboot_uint32_t header_length; |
||||
|
||||
/* The above fields plus this one must equal 0 mod 2^32. */ |
||||
multiboot_uint32_t checksum; |
||||
}; |
||||
|
||||
struct multiboot_header_tag |
||||
{ |
||||
multiboot_uint16_t type; |
||||
multiboot_uint16_t flags; |
||||
multiboot_uint32_t size; |
||||
}; |
||||
|
||||
struct multiboot_header_tag_information_request |
||||
{ |
||||
multiboot_uint16_t type; |
||||
multiboot_uint16_t flags; |
||||
multiboot_uint32_t size; |
||||
multiboot_uint32_t requests[0]; |
||||
}; |
||||
|
||||
struct multiboot_header_tag_address |
||||
{ |
||||
multiboot_uint16_t type; |
||||
multiboot_uint16_t flags; |
||||
multiboot_uint32_t size; |
||||
multiboot_uint32_t header_addr; |
||||
multiboot_uint32_t load_addr; |
||||
multiboot_uint32_t load_end_addr; |
||||
multiboot_uint32_t bss_end_addr; |
||||
}; |
||||
|
||||
struct multiboot_header_tag_entry_address |
||||
{ |
||||
multiboot_uint16_t type; |
||||
multiboot_uint16_t flags; |
||||
multiboot_uint32_t size; |
||||
multiboot_uint32_t entry_addr; |
||||
}; |
||||
|
||||
struct multiboot_header_tag_console_flags |
||||
{ |
||||
multiboot_uint16_t type; |
||||
multiboot_uint16_t flags; |
||||
multiboot_uint32_t size; |
||||
multiboot_uint32_t console_flags; |
||||
}; |
||||
|
||||
struct multiboot_header_tag_framebuffer |
||||
{ |
||||
multiboot_uint16_t type; |
||||
multiboot_uint16_t flags; |
||||
multiboot_uint32_t size; |
||||
multiboot_uint32_t width; |
||||
multiboot_uint32_t height; |
||||
multiboot_uint32_t depth; |
||||
}; |
||||
|
||||
struct multiboot_header_tag_module_align |
||||
{ |
||||
multiboot_uint16_t type; |
||||
multiboot_uint16_t flags; |
||||
multiboot_uint32_t size; |
||||
}; |
||||
|
||||
struct multiboot_header_tag_relocatable |
||||
{ |
||||
multiboot_uint16_t type; |
||||
multiboot_uint16_t flags; |
||||
multiboot_uint32_t size; |
||||
multiboot_uint32_t min_addr; |
||||
multiboot_uint32_t max_addr; |
||||
multiboot_uint32_t align; |
||||
multiboot_uint32_t preference; |
||||
}; |
||||
|
||||
struct multiboot_color |
||||
{ |
||||
multiboot_uint8_t red; |
||||
multiboot_uint8_t green; |
||||
multiboot_uint8_t blue; |
||||
}; |
||||
|
||||
struct multiboot_mmap_entry |
||||
{ |
||||
multiboot_uint64_t addr; |
||||
multiboot_uint64_t len; |
||||
#define MULTIBOOT_MEMORY_AVAILABLE 1 |
||||
#define MULTIBOOT_MEMORY_RESERVED 2 |
||||
#define MULTIBOOT_MEMORY_ACPI_RECLAIMABLE 3 |
||||
#define MULTIBOOT_MEMORY_NVS 4 |
||||
#define MULTIBOOT_MEMORY_BADRAM 5 |
||||
multiboot_uint32_t type; |
||||
multiboot_uint32_t zero; |
||||
}; |
||||
typedef struct multiboot_mmap_entry multiboot_memory_map_t; |
||||
|
||||
struct multiboot_tag |
||||
{ |
||||
multiboot_uint32_t type; |
||||
multiboot_uint32_t size; |
||||
}; |
||||
|
||||
struct multiboot_tag_string |
||||
{ |
||||
multiboot_uint32_t type; |
||||
multiboot_uint32_t size; |
||||
char string[0]; |
||||
}; |
||||
|
||||
struct multiboot_tag_module |
||||
{ |
||||
multiboot_uint32_t type; |
||||
multiboot_uint32_t size; |
||||
multiboot_uint32_t mod_start; |
||||
multiboot_uint32_t mod_end; |
||||
char cmdline[0]; |
||||
}; |
||||
|
||||
struct multiboot_tag_basic_meminfo |
||||
{ |
||||
multiboot_uint32_t type; |
||||
multiboot_uint32_t size; |
||||
multiboot_uint32_t mem_lower; |
||||
multiboot_uint32_t mem_upper; |
||||
}; |
||||
|
||||
struct multiboot_tag_bootdev |
||||
{ |
||||
multiboot_uint32_t type; |
||||
multiboot_uint32_t size; |
||||
multiboot_uint32_t biosdev; |
||||
multiboot_uint32_t slice; |
||||
multiboot_uint32_t part; |
||||
}; |
||||
|
||||
struct multiboot_tag_mmap |
||||
{ |
||||
multiboot_uint32_t type; |
||||
multiboot_uint32_t size; |
||||
multiboot_uint32_t entry_size; |
||||
multiboot_uint32_t entry_version; |
||||
struct multiboot_mmap_entry entries[0];
|
||||
}; |
||||
|
||||
struct multiboot_vbe_info_block |
||||
{ |
||||
multiboot_uint8_t external_specification[512]; |
||||
}; |
||||
|
||||
struct multiboot_vbe_mode_info_block |
||||
{ |
||||
multiboot_uint8_t external_specification[256]; |
||||
}; |
||||
|
||||
struct multiboot_tag_vbe |
||||
{ |
||||
multiboot_uint32_t type; |
||||
multiboot_uint32_t size; |
||||
|
||||
multiboot_uint16_t vbe_mode; |
||||
multiboot_uint16_t vbe_interface_seg; |
||||
multiboot_uint16_t vbe_interface_off; |
||||
multiboot_uint16_t vbe_interface_len; |
||||
|
||||
struct multiboot_vbe_info_block vbe_control_info; |
||||
struct multiboot_vbe_mode_info_block vbe_mode_info; |
||||
}; |
||||
|
||||
struct multiboot_tag_framebuffer_common |
||||
{ |
||||
multiboot_uint32_t type; |
||||
multiboot_uint32_t size; |
||||
|
||||
multiboot_uint64_t framebuffer_addr; |
||||
multiboot_uint32_t framebuffer_pitch; |
||||
multiboot_uint32_t framebuffer_width; |
||||
multiboot_uint32_t framebuffer_height; |
||||
multiboot_uint8_t framebuffer_bpp; |
||||
#define MULTIBOOT_FRAMEBUFFER_TYPE_INDEXED 0 |
||||
#define MULTIBOOT_FRAMEBUFFER_TYPE_RGB 1 |
||||
#define MULTIBOOT_FRAMEBUFFER_TYPE_EGA_TEXT 2 |
||||
multiboot_uint8_t framebuffer_type; |
||||
multiboot_uint16_t reserved; |
||||
}; |
||||
|
||||
struct multiboot_tag_framebuffer |
||||
{ |
||||
struct multiboot_tag_framebuffer_common common; |
||||
|
||||
union |
||||
{ |
||||
struct |
||||
{ |
||||
multiboot_uint16_t framebuffer_palette_num_colors; |
||||
struct multiboot_color framebuffer_palette[0]; |
||||
}; |
||||
struct |
||||
{ |
||||
multiboot_uint8_t framebuffer_red_field_position; |
||||
multiboot_uint8_t framebuffer_red_mask_size; |
||||
multiboot_uint8_t framebuffer_green_field_position; |
||||
multiboot_uint8_t framebuffer_green_mask_size; |
||||
multiboot_uint8_t framebuffer_blue_field_position; |
||||
multiboot_uint8_t framebuffer_blue_mask_size; |
||||
}; |
||||
}; |
||||
}; |
||||
|
||||
struct multiboot_tag_elf_sections |
||||
{ |
||||
multiboot_uint32_t type; |
||||
multiboot_uint32_t size; |
||||
multiboot_uint32_t num; |
||||
multiboot_uint32_t entsize; |
||||
multiboot_uint32_t shndx; |
||||
char sections[0]; |
||||
}; |
||||
|
||||
struct multiboot_tag_apm |
||||
{ |
||||
multiboot_uint32_t type; |
||||
multiboot_uint32_t size; |
||||
multiboot_uint16_t version; |
||||
multiboot_uint16_t cseg; |
||||
multiboot_uint32_t offset; |
||||
multiboot_uint16_t cseg_16; |
||||
multiboot_uint16_t dseg; |
||||
multiboot_uint16_t flags; |
||||
multiboot_uint16_t cseg_len; |
||||
multiboot_uint16_t cseg_16_len; |
||||
multiboot_uint16_t dseg_len; |
||||
}; |
||||
|
||||
struct multiboot_tag_efi32 |
||||
{ |
||||
multiboot_uint32_t type; |
||||
multiboot_uint32_t size; |
||||
multiboot_uint32_t pointer; |
||||
}; |
||||
|
||||
struct multiboot_tag_efi64 |
||||
{ |
||||
multiboot_uint32_t type; |
||||
multiboot_uint32_t size; |
||||
multiboot_uint64_t pointer; |
||||
}; |
||||
|
||||
struct multiboot_tag_smbios |
||||
{ |
||||
multiboot_uint32_t type; |
||||
multiboot_uint32_t size; |
||||
multiboot_uint8_t major; |
||||
multiboot_uint8_t minor; |
||||
multiboot_uint8_t reserved[6]; |
||||
multiboot_uint8_t tables[0]; |
||||
}; |
||||
|
||||
struct multiboot_tag_old_acpi |
||||
{ |
||||
multiboot_uint32_t type; |
||||
multiboot_uint32_t size; |
||||
multiboot_uint8_t rsdp[0]; |
||||
}; |
||||
|
||||
struct multiboot_tag_new_acpi |
||||
{ |
||||
multiboot_uint32_t type; |
||||
multiboot_uint32_t size; |
||||
multiboot_uint8_t rsdp[0]; |
||||
}; |
||||
|
||||
struct multiboot_tag_network |
||||
{ |
||||
multiboot_uint32_t type; |
||||
multiboot_uint32_t size; |
||||
multiboot_uint8_t dhcpack[0]; |
||||
}; |
||||
|
||||
struct multiboot_tag_efi_mmap |
||||
{ |
||||
multiboot_uint32_t type; |
||||
multiboot_uint32_t size; |
||||
multiboot_uint32_t descr_size; |
||||
multiboot_uint32_t descr_vers; |
||||
multiboot_uint8_t efi_mmap[0]; |
||||
};
|
||||
|
||||
struct multiboot_tag_efi32_ih |
||||
{ |
||||
multiboot_uint32_t type; |
||||
multiboot_uint32_t size; |
||||
multiboot_uint32_t pointer; |
||||
}; |
||||
|
||||
struct multiboot_tag_efi64_ih |
||||
{ |
||||
multiboot_uint32_t type; |
||||
multiboot_uint32_t size; |
||||
multiboot_uint64_t pointer; |
||||
}; |
||||
|
||||
struct multiboot_tag_load_base_addr |
||||
{ |
||||
multiboot_uint32_t type; |
||||
multiboot_uint32_t size; |
||||
multiboot_uint32_t load_base_addr; |
||||
}; |
||||
|
||||
#endif /* ! ASM_FILE */ |
||||
|
||||
#endif /* ! MULTIBOOT_HEADER */ |
@ -1,6 +1,19 @@ |
||||
// INTS
|
||||
typedef unsigned int uint; |
||||
typedef unsigned long ulong; |
||||
|
||||
// 8b
|
||||
typedef signed char int8; |
||||
typedef unsigned char uint8; |
||||
|
||||
// 16b
|
||||
typedef short int int16; |
||||
typedef unsigned short int uint16; |
||||
|
||||
// MISC
|
||||
typedef char* pointer; |
||||
|
||||
// BOOL
|
||||
typedef int bool; |
||||
#define true 1 |
||||
#define false 0 |
||||
|
Loading…
Reference in new issue