diff --git a/.gitignore b/.gitignore
index f37bfcf..73330ff 100644
--- a/.gitignore
+++ b/.gitignore
@@ -17,6 +17,8 @@ CNAME
# Other stuff
multiboot.pdf
+grub.log
+Makefile.out.2
# Linker output
*.ilk
diff --git a/Makefile b/Makefile
index 79e3b32..d58bb68 100644
--- a/Makefile
+++ b/Makefile
@@ -40,24 +40,51 @@ tests:
make tests -f build/Makefile.out.2
rm build/Makefile.out build/Makefile.out.2
+#Programs
ASM=nasm
ASMFLAGS=
BOOTFLAGS=-f bin
-MBRDIR=boot/mbr
+#Folders
+MBRDIR=boot/grub
LOADERDIR=boot/loader
OBJDIR=build/obj
BINDIR=build/bin
-boot.mbr.asm: $(MBRDIR)/mbr.asm $(MBRDIR)/mbr.inc
- $(ASM) $(BOOTFLAGS) $(MBRDIR)/mbr.asm -o $(OBJDIR)/boot/mbr.bin
+#Color codes
+CL='\033[0;32m'
+CL2='\033[1;31m'
+CL3='\033[0m'
+NC='\033[1;37m'
+
+boot.mbr: $(BINDIR)/disk.img $(MBRDIR)/grub.cfg
+ @mkdir -p $(BINDIR)/disk
+ @echo ${CL2}[boot.mbr]${NC} Installing bootloader on image...${CL3}
+ @$(MBRDIR)/grub-install.sh $(BINDIR)/disk.img $(BINDIR)/disk $(MBRDIR)/grub.cfg
+ @echo ${CL2}[boot.mbr]${CL} OK${CL3}
+ @rmdir $(BINDIR)/disk
boot.loader.asm: $(LOADERDIR)/loader.asm
- $(ASM) $(BOOTFLAGS) $(LOADERDIR)/loader.asm -o $(OBJDIR)/boot/loader.bin
+ @echo ${CL2}[boot.loader.asm]${NC} Making loader.bin...${CL3}
+ @$(ASM) $(BOOTFLAGS) $(LOADERDIR)/loader.asm -o $(OBJDIR)/boot/loader.bin > /dev/null
+ @echo ${CL2}[boot.loader.asm]${CL} OK${CL3}
-bootloader: boot.mbr.asm boot.loader.asm
- cp $(OBJDIR)/boot/mbr.bin $(BINDIR)/mbr.bin
- cp $(OBJDIR)/boot/loader.bin $(BINDIR)/loader.bin
+bootloader: boot.mbr boot.loader.asm
+ @mkdir -p $(BINDIR)/disk
+ @echo ${CL2}[bootloader]${NC} Constructing bootloader...${CL3}
+ @$(MBRDIR)/mount.sh $(BINDIR)/disk.img $(BINDIR)/disk
+ @cp $(OBJDIR)/boot/loader.bin $(BINDIR)/disk/boot/loader.bin
+ @$(MBRDIR)/umount.sh $(BINDIR)/disk
+ @echo ${CL2}[bootloader]${CL} OK${CL3}
+ @rmdir $(BINDIR)/disk
-all: bootloader kernel
+make_disk:
+ @echo ${CL2}[make_disk]${NC} Constructing disk image...${CL3}
+ @$(MBRDIR)/create_disk.sh $(BINDIR)/disk.img
+ @echo ${CL2}[make_disk]${CL} OK${CL3}
+boot: make_disk bootloader
+ @echo ${CL2}[[boot]]${CL} Terminated without error.${CL3}
+
+all: boot kernel
+ @echo ${CL2}[[all]]${CL} Terminated without error.${CL3}
diff --git a/boot/grub/create_disk.sh b/boot/grub/create_disk.sh
index 3d7a058..ba6e227 100755
--- a/boot/grub/create_disk.sh
+++ b/boot/grub/create_disk.sh
@@ -22,12 +22,22 @@
# along with OS/K. If not, see . #
#=----------------------------------------------------------------------------=#
-## Create the image
-dd if=/dev/zero of=disk.img bs=512 count=131072
+#Color codes
+CL='\033[0;32m'
+CL2='\033[1;36m'
+CL3='\033[0m'
+NC='\033[1;37m'
+set -e #exit if error
+
+## Create the image
+echo ${CL2}[create_disk.sh]${NC} Creating image... \(dd\)${CL3}
+dd if=/dev/zero of=$1 bs=512 count=131072 > /dev/null
+
+echo ${CL2}[create_disk.sh]${NC} Partitionning image... \(fdisk\)${CL3}
## Partition the image
# WARNING, DO NOT DELETE SPACES !
-fdisk disk.img < /dev/null < /dev/null
+sudo losetup /dev/loop0 $1 -o 1048576 > /dev/null #mounting the logical partition
+echo ${CL2}[create_disk.sh]${NC} Formatting image... \(mkdosfs\)${CL3}
## Format
-sudo mkdosfs -F32 -f 2 /dev/loop0
+sudo mkdosfs -F32 -f 2 /dev/loop0 > /dev/null
+echo ${CL2}[create_disk.sh]${NC} Sync image... \(sync\)${CL3}
sync
-sudo losetup -D
+echo ${CL2}[create_disk.sh]${NC} Unmounting... \(losetup\)${CL3}
+sudo losetup -D > /dev/null
+
+echo ${CL2}[create_disk.sh]${CL} Terminated without error.${CL3}
diff --git a/boot/grub/grub-install.sh b/boot/grub/grub-install.sh
index 9801460..44d591f 100755
--- a/boot/grub/grub-install.sh
+++ b/boot/grub/grub-install.sh
@@ -22,18 +22,39 @@
# along with OS/K. If not, see . #
#=----------------------------------------------------------------------------=#
-## Prepare Mount
-sudo losetup -D
-sudo losetup /dev/loop0 disk.img # mounting the device block
-sudo losetup /dev/loop1 disk.img -o 1048576 #mounting the logical partition
+#Color codes
+CL='\033[0;32m'
+CL2='\033[1;36m'
+CL3='\033[0m'
+NC='\033[1;37m'
+set -e #exit if error
+
+echo ${CL2}[grub-install.sh]${NC} Mouting image... \(losetup\)${CL3}
+## Prepare Mount
+sudo losetup -D > /dev/null
+sudo losetup /dev/loop0 $1 > /dev/null # mounting the device block
+sudo losetup /dev/loop1 $1 -o 1048576 > /dev/null #mounting the logical partition
+
+echo ${CL2}[grub-install.sh]${NC} Mounting volume... \(mount\)${CL3}
## Mount
-sudo mount /dev/loop1 ./disk
+sudo mount /dev/loop1 $2 > /dev/null
+
+echo ${CL2}[grub-install.sh]${NC} Installing grub... \(grub-install\)${CL3}
## Install grub
-sudo grub-install --target=i386-pc --debug --root-directory=./disk --boot-directory=./disk/boot --no-floppy --modules="part_msdos biosdisk fat multiboot configfile" /dev/loop0
-sudo cp ./grub.cfg ./disk/boot/grub/grub.cfg
+sudo grub-install -V
+sudo grub-install --target=i386-pc --debug --root-directory=$2 --boot-directory=$2/boot --no-floppy --modules="part_msdos biosdisk fat multiboot configfile" /dev/loop0 2> grub.log
+
+echo ${CL2}[grub-install.sh]${NC} Copying grub.cfg
+sudo cp $3 $2/boot/grub/grub.cfg > /dev/null
+
+echo ${CL2}[grub-install.sh]${NC} Sync image... \(sync\)${CL3}
sync
-sudo umount /dev/loop1
-sudo losetup -D
+echo ${CL2}[grub-install.sh]${NC} Unmounting volume... \(umount\)${CL3}
+sudo umount /dev/loop1 > /dev/null
+echo ${CL2}[grub-install.sh]${NC} Unmounting image... \(losetup\)${CL3}
+sudo losetup -D > /dev/null
+
+echo ${CL2}[grub-install.sh]${CL} Terminated without error. See grub.log for more informations.${CL3}
diff --git a/boot/grub/include/include b/boot/grub/include/include
deleted file mode 100644
index b181607..0000000
--- a/boot/grub/include/include
+++ /dev/null
@@ -1,417 +0,0 @@
-/* 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 */
diff --git a/boot/grub/include/multiboot.h b/boot/grub/include/multiboot.h
index e69de29..b181607 100644
--- a/boot/grub/include/multiboot.h
+++ b/boot/grub/include/multiboot.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 */
diff --git a/boot/grub/mount.sh b/boot/grub/mount.sh
index 4918d59..a880f03 100755
--- a/boot/grub/mount.sh
+++ b/boot/grub/mount.sh
@@ -22,6 +22,17 @@
# along with OS/K. If not, see . #
#=----------------------------------------------------------------------------=#
-sudo losetup -D
-sudo losetup /dev/loop0 disk.img -o 1048576 #mounting the logical partition
-sudo mount -t vfat /dev/loop0 ./disk -o rw,uid=$(id -u),gid=$(id -g)
+#Color codes
+CL='\033[0;32m'
+CL2='\033[1;36m'
+CL3='\033[0m'
+NC='\033[1;37m'
+
+set -e #exit if error
+
+echo ${CL2}[mount.sh]${NC} Mouting image... \(losetup\)${CL3}
+sudo losetup -D > /dev/null
+sudo losetup /dev/loop0 $1 -o 1048576 /dev/null #mounting the logical partition
+echo ${CL2}[mount.sh]${NC} Mouting volume... \(mount\)${CL3}
+sudo mount -t vfat /dev/loop0 $2 -o rw,uid=$(id -u),gid=$(id -g) > /dev/null
+echo ${CL2}[mount.sh]${CL} Terminated without error.${CL3}
diff --git a/boot/grub/umount.sh b/boot/grub/umount.sh
index 6bd768f..78bfa66 100755
--- a/boot/grub/umount.sh
+++ b/boot/grub/umount.sh
@@ -22,5 +22,16 @@
# along with OS/K. If not, see . #
#=----------------------------------------------------------------------------=#
-sudo umount ./disk
+#Color codes
+CL='\033[0;32m'
+CL2='\033[1;36m'
+CL3='\033[0m'
+NC='\033[1;37m'
+
+set -e #exit if error
+sleep 3
+echo ${CL2}[umount.sh]${NC} Unmounting volume... \(umount\)${CL3}
+sudo umount $1
+echo ${CL2}[umount.sh]${NC} Unmounting image... \(losetup\)${CL3}
sudo losetup -D
+echo ${CL2}[umount.sh]${CL} Terminated without error.${CL3}
diff --git a/boot/loader/loader.asm b/boot/loader/loader.asm
index d0f127d..807ed10 100644
--- a/boot/loader/loader.asm
+++ b/boot/loader/loader.asm
@@ -39,16 +39,17 @@ _start:
mov [Bootdrv], dl
xor dl, dl
jmp 0x0000:main ; pas sûr
+multiboot_header:
-[align 4]
-dd MULTIBOOT_HEADER_MAGIC
-dd MULTIBOOT_HEADER_FLAGS
-dd CHECKSUM
-dd multiboot_header ; Header address
-dd _start ; Address of code entry point
-dd 00 ; (end of code) not necessary
-dd 00 ; (bss) not necessary
-dd MB_start ; entry address GRUB will start at
+ align 4
+ dd MB_HEADER_MAGIC
+ dd MB_HEADER_FLAGS
+ dd CHECKSUM
+ dd multiboot_header ; Header address
+ dd _start ; Address of code entry point
+ dd 00 ; (end of code) not necessary
+ dd 00 ; (bss) not necessary
+ dd MB_start ; entry address GRUB will start at
MB_start:
mov esp, KERNEL_STACK ; Setup the stack
diff --git a/boot/loader/multiboot.inc b/boot/loader/multiboot.inc
index c0322dd..f013eda 100644
--- a/boot/loader/multiboot.inc
+++ b/boot/loader/multiboot.inc
@@ -28,6 +28,6 @@
%define MB_ALIGN 1 << 0 ; Ask to align loaded modules on page boundaries
%define MB_MEMINFO 1 << 1 ; Ask to provide memory map
%define MB_HEADER_MAGIC 0x1BADB002
-%define MB_HEADER_FLAGSMULTI BOOT_AOUT_KLUDGE|MULTIBOOT_ALIGN|MULTIBOOT_MEMINFO
-%define CHECKSUM -(MULTIBOOT_HEADER_MAGIC + MULTIBOOT_HEADER_FLAGS)
+%define MB_HEADER_FLAGS MB_AOUT_KLUDGE|MB_ALIGN|MB_MEMINFO
+%define CHECKSUM -(MB_HEADER_MAGIC + MB_HEADER_FLAGS)
%define KERNEL_STACK 0x00200000 ; Stack starts at the 2mb address & grows down
diff --git a/build/bin/disk.img b/build/bin/disk.img
index 1dc81cd..3681fe2 100644
Binary files a/build/bin/disk.img and b/build/bin/disk.img differ
diff --git a/build/bin/loader.bin b/build/bin/loader.bin
deleted file mode 100644
index 6ca87c7..0000000
Binary files a/build/bin/loader.bin and /dev/null differ
diff --git a/build/bin/mbr.bin b/build/bin/mbr.bin
deleted file mode 100644
index 37ff74f..0000000
Binary files a/build/bin/mbr.bin and /dev/null differ
diff --git a/build/obj/boot/loader.bin b/build/obj/boot/loader.bin
index 6ca87c7..e12a50a 100644
Binary files a/build/obj/boot/loader.bin and b/build/obj/boot/loader.bin differ