diff --git a/Makefile b/Makefile
index c224923..0c75b9e 100644
--- a/Makefile
+++ b/Makefile
@@ -124,11 +124,11 @@ $(KOBJDIR)/prog.o: $(KERNELDIR)/extras/prog.c
@echo ${CL2}[$@] ${CL}Compiled.${CL3}
# Kernel objects
-kal_kern_obj= $(KOBJDIR)/kernel/cpuid.o $(KOBJDIR)/kernel/init.o \
- $(KOBJDIR)/kernel/table.o $(KOBJDIR)/kernel/cursor.o \
- $(KOBJDIR)/kernel/term.o $(KOBJDIR)/kernel/vga.o \
- $(KOBJDIR)/kernel/panic.o $(KOBJDIR)/kernel/heap.o \
- $(KOBJDIR)/kernel/malloc.o
+kal_kern_obj= $(KOBJDIR)/kernel/cpuid.o $(KOBJDIR)/kernel/init.o \
+ $(KOBJDIR)/kernel/table.o $(KOBJDIR)/kernel/cursor.o \
+ $(KOBJDIR)/kernel/term.o $(KOBJDIR)/kernel/vga.o \
+ $(KOBJDIR)/kernel/panic.o $(KOBJDIR)/kernel/map.o \
+ $(KOBJDIR)/kernel/heap.o $(KOBJDIR)/kernel/malloc.o
$(KOBJDIR)/kernel/cpuid.o: $(KERNELDIR)/kernel/cpu/cpuid.c
@$(KCC) $< -o $@
@@ -151,6 +151,9 @@ $(KOBJDIR)/kernel/vga.o: $(KERNELDIR)/kernel/io/vga.c
$(KOBJDIR)/kernel/panic.o: $(KERNELDIR)/kernel/ke/panic.c
@$(KCC) $< -o $@
@echo ${CL2}[$@] ${CL}Compiled.${CL3}
+$(KOBJDIR)/kernel/map.o: $(KERNELDIR)/kernel/mm/map.c
+ @$(KCC) $< -o $@
+ @echo ${CL2}[$@] ${CL}Compiled.${CL3}
$(KOBJDIR)/kernel/heap.o: $(KERNELDIR)/kernel/mm/heap.c
@$(KCC) $< -o $@
@echo ${CL2}[$@] ${CL}Compiled.${CL3}
@@ -187,19 +190,17 @@ debug: all
install_mbr: $(BINDIR)/disk.img $(MBRDIR)/grub.cfg
@mkdir -p $(BINDIR)/disk
@echo ${CL2}[$@] ${NC}Installing MBR on image...${CL3}
- -@$(MBRDIR)/umount.sh $(BINDIR)/disk
+ -@$(MBRDIR)/umount.sh $(BINDIR)/disk || /bin/true
@$(MBRDIR)/grub-install.sh $(BINDIR)/disk.img $(BINDIR)/disk $(MBRDIR)/grub.cfg
@rmdir $(BINDIR)/disk
@echo ${CL2}[$@] ${CL}Success.${CL3}
.PHONY: clean
clean:
- -@$(MBRDIR)/umount.sh $(BINDIR)/disk
+ -@$(MBRDIR)/umount.sh $(BINDIR)/disk || /bin/true
@rm -Rvf ./ProjectTree
- @rm -Rvf $(BINDIR)/*.*
- @rm -Rvf $(OBJDIR)/*.o
- @rm -Rvf $(OBJDIR)/*/*.o
- @rm -Rvf $(OBJDIR)/*/*/*.o
+ @rm -Rvf $(BINDIR)/* $(OBJDIR)/*.o \
+ $(OBJDIR)/*/*.o $(OBJDIR)/*/*.x86_64 $(OBJDIR)/*/*/*.o
@echo ${CL2}[[$@]] ${CL}Cleaned.${CL3}
$(BINDIR)/kaleid: $(LOBJDIR)/kaleid.x86_64
@@ -216,14 +217,14 @@ $(LOBJDIR)/kaleid.x86_64: $(kal_kern_obj) $(kal_com_obj) $(LOBJDIR)/loader.o
-o $(LOBJDIR)/kaleid.x86_64
@echo ${CL2}[$@] ${CL}Success.${CL3}
-$(LOBJDIR)/loader.o: $(LOADERDIR)/loader.asm
+$(LOBJDIR)/loader.o: $(LOADERDIR)/loader.asm $(LOADERDIR)/*/*.inc
@echo ${CL2}[$@] ${NC}Making loader...${CL3}
@$(ASM) $(ASMFLAGS) $(LOADERDIR)/loader.asm -o $(LOBJDIR)/loader.o > /dev/null
@echo ${CL2}[$@] ${CL}Success.${CL3}
$(BINDIR)/disk.img: $(MBRDIR)/create_disk.sh
@echo ${CL2}[$@]${NC} Constructing disk image...${CL3}
- -@$(MBRDIR)/umount.sh $(BINDIR)/disk
+ -@$(MBRDIR)/umount.sh $(BINDIR)/disk || /bin/true
@$(MBRDIR)/create_disk.sh $(BINDIR)/disk.img
@make install_mbr
@echo ${CL2}[$@]${NC} Constructing disk image...${CL3}
@@ -232,7 +233,7 @@ $(BINDIR)/disk.img: $(MBRDIR)/create_disk.sh
OS/K: $(BINDIR)/kaleid $(BINDIR)/disk.img ./ProjectTree
@mkdir -p $(BINDIR)/disk
@echo ${CL2}[[$@]] ${NC}Integrating kernel...${CL3}
- -@$(MBRDIR)/umount.sh $(BINDIR)/disk
+ -@$(MBRDIR)/umount.sh $(BINDIR)/disk || /bin/true
@$(MBRDIR)/mount.sh $(BINDIR)/disk.img $(BINDIR)/disk
@cp $(BINDIR)/kaleid $(BINDIR)/disk/boot/kaleid
@$(MBRDIR)/umount.sh $(BINDIR)/disk
diff --git a/ProjectTree b/ProjectTree
index 954b888..72efbbb 100644
--- a/ProjectTree
+++ b/ProjectTree
@@ -62,9 +62,7 @@
│ ├── atol.o
│ ├── atoul.o
│ ├── atou.o
-│ ├── crtlib
│ ├── ctype.o
-│ ├── extras
│ ├── itoa.o
│ ├── kernel
│ │ ├── cpuid.o
@@ -81,6 +79,7 @@
│ │ ├── ke
│ │ │ └── panic.o
│ │ ├── malloc.o
+│ │ ├── map.o
│ │ ├── panic.o
│ │ ├── table.o
│ │ ├── term.o
@@ -130,18 +129,17 @@
│ │ ├── kalbase.h
│ │ ├── kaleid.h
│ │ ├── kalext.h
-│ │ ├── kernel
-│ │ │ ├── base.h
-│ │ │ ├── cpu.h
-│ │ │ ├── heap.h
-│ │ │ ├── iomisc.h
-│ │ │ ├── mm.h
-│ │ │ ├── panic.h
-│ │ │ ├── proc.h
-│ │ │ ├── sched.h
-│ │ │ └── term.h
-│ │ └── multiboot
-│ │ └── multiboot.h
+│ │ └── kernel
+│ │ ├── base.h
+│ │ ├── cpu.h
+│ │ ├── heap.h
+│ │ ├── iomisc.h
+│ │ ├── mm.h
+│ │ ├── multiboot.h
+│ │ ├── panic.h
+│ │ ├── proc.h
+│ │ ├── sched.h
+│ │ └── term.h
│ └── kernel
│ ├── cpu
│ │ └── cpuid.c
@@ -157,7 +155,8 @@
│ │ └── panic.c
│ ├── mm
│ │ ├── heap.c
-│ │ └── malloc.c
+│ │ ├── malloc.c
+│ │ └── map.c
│ └── proc
│ ├── Makefile
│ └── sched.c
@@ -168,4 +167,4 @@
├── qemu.log
└── Readme.md
-33 directories, 110 files
+30 directories, 112 files
diff --git a/boot/grub/multiboot.pdf b/boot/grub/multiboot.pdf
index e32056f..978ff78 100644
Binary files a/boot/grub/multiboot.pdf and b/boot/grub/multiboot.pdf differ
diff --git a/boot/loader/io/terminal.inc b/boot/loader/io/terminal.inc
index 50b4175..0a6e89a 100644
--- a/boot/loader/io/terminal.inc
+++ b/boot/loader/io/terminal.inc
@@ -28,7 +28,6 @@
;;VIDEO
%define TRAM 0xB8000 ; [T]ext[RAM]
-%define VRAM 0xA0000 ; [V]ideo[RAM]
%define VGA_HEIGHT 80
;; GLOBAL DATA
@@ -38,19 +37,6 @@ VGA_X32 dq 0
VGA_HEIGHT64 dq VGA_HEIGHT
VGA_X dq 0
-
-testf:
- push rsi
- push rbx
- mov esi, teststr
- mov bl, 0xF
- call write
- pop rsi
- pop rbx
- ret
-teststr: db "Salut",0
-
-
;-----------------------------------------------------------------------;
; x64/LM Clear Text Screen Function ;
;-----------------------------------------------------------------------;
diff --git a/boot/loader/loader.asm b/boot/loader/loader.asm
index 785e4c2..8e39fa7 100644
--- a/boot/loader/loader.asm
+++ b/boot/loader/loader.asm
@@ -32,6 +32,7 @@
%include "boot/loader/mem/structures.inc"
global MB_start
+global MB_header
extern StartKern
[BITS 32]
diff --git a/kaleid/include/kernel/base.h b/kaleid/include/kernel/base.h
index f8bdf6e..476c647 100644
--- a/kaleid/include/kernel/base.h
+++ b/kaleid/include/kernel/base.h
@@ -42,6 +42,7 @@ typedef struct Terminal_t Terminal_t;
typedef struct ListHead_t ListHead_t;
typedef struct ListNode_t ListNode_t;
typedef struct Processor_t Processor_t;
+typedef struct BootInfo_t BootInfo_t;
typedef enum ProcState_t ProcState_t;
typedef enum TermColor_t TermColor_t;
@@ -61,6 +62,8 @@ typedef enum TermColor_t TermColor_t;
// Get Process_t structure of current CPU
#define GetCurCPU() (cpuTable[_GetCurCPU()])
+//Get the BootInfo_t structure
+#define GetBootInfo(x) bootTab.x
//------------------------------------------//
//
@@ -91,11 +94,67 @@ struct Processor_t
ListHead_t *timeCritProcs;
};
+#define FB_EGA_TEXT 2
+#define FB_INDEXED 0
+#define FB_RGB 1
+#define BINFO_SIZE 4096
+struct BootInfo_t
+{
+ // The Bootloader infos (GRUB in our case)
+ struct {
+ uint grubFlags; //flags
+ uint modulesCount; //mods_count
+ void *modulesAddr; //mods_addr
+ uint grubName; //boot_loader_name
+ void *mbHeaderAddr;
+ } btldr;
+
+ // Informations about drives
+ struct {
+ uint bootDrv; //boot_device
+ uint bufferLength; //drives_length
+ void *bufferAddr; //drives_addr
+ } drives;
+
+ // Informations about memory
+ struct {
+ //BIOS provided low and up memory
+ uint lowMemory; //mem_lower
+ uint upMemory; //mem_upper
+
+ //GRUB provided memory map
+ uint mapLength; //mmap_length
+ void *mapAddr; //mmap_addr
+ } memory;
+
+ // Informations about the video drive
+ struct {
+ uint vbeControl; //vbe_control_info
+ uint vbeModeInfo; //vbe_mode_info
+ ushort vbeMode; //vbe_mode
+ ushort vbeInterfaceSeg; //vbe_interface_seg
+ ushort vbeInterfaceOff; //vbe_interface_off
+ ushort vbeInterfaceLen; //vbe_interface_len
+ void* framebufferAddr; //framebuffer_addr
+ uint framebufferPitch; //framebuffer_pitch
+ uint framebufferWidth; //framebuffer_width
+ uint framebufferHeight; //framebuffer_height
+ uchar framebufferBpp; //framebuffer_bpp
+ uchar framebufferType; //framebuffer_type
+ } video;
+
+ // Informations about the microcode firmware (BIOS/EFI)
+ struct {
+ uint apmTable; //apm_table
+ uint romTable; //config_table
+ } firmware;
+};
+
//------------------------------------------//
extern int cpuCount;
extern Processor_t cpuTable[NCPUS];
-
+extern BootInfo_t bootTab;
//------------------------------------------//
#define DEC_PER_CPU(name, field, type) \
diff --git a/kaleid/include/kernel/heap.h b/kaleid/include/kernel/heap.h
index 9f9729b..40b4e19 100644
--- a/kaleid/include/kernel/heap.h
+++ b/kaleid/include/kernel/heap.h
@@ -31,13 +31,6 @@
//------------------------------------------//
-void *GetMemoryMap(void);
-
-size_t GetMemorySize(void);
-size_t GetAvailZoneSize(void *);
-
-//------------------------------------------//
-
#define _HEAP_START (4 * MB)
void InitHeap(void);
diff --git a/kaleid/include/kernel/mm.h b/kaleid/include/kernel/mm.h
index b015971..3ef8494 100644
--- a/kaleid/include/kernel/mm.h
+++ b/kaleid/include/kernel/mm.h
@@ -22,3 +22,17 @@
// along with OS/K. If not, see . //
//----------------------------------------------------------------------------//
+#include
+#include
+
+//
+// Returns a pointer to the first entry of the memory map
+//
+void *GetMemoryMap(void);
+
+//
+// Initializes the memory map structure
+//
+error_t InitMemoryMap(void);
+
+// -------------------------------------------------------------------------- //
diff --git a/kaleid/include/multiboot/multiboot.h b/kaleid/include/kernel/multiboot.h
similarity index 70%
rename from kaleid/include/multiboot/multiboot.h
rename to kaleid/include/kernel/multiboot.h
index 04f6322..d1f8516 100644
--- a/kaleid/include/multiboot/multiboot.h
+++ b/kaleid/include/kernel/multiboot.h
@@ -93,74 +93,74 @@
#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;
+typedef unsigned char uchar;
+typedef unsigned short ushort;
+typedef unsigned int uint;
+typedef unsigned long long ullong;
struct multiboot_header
{
/* Must be MULTIBOOT_MAGIC - see above. */
- multiboot_uint32_t magic;
+ uint magic;
/* Feature flags. */
- multiboot_uint32_t flags;
+ uint flags;
/* The above fields plus this one must equal 0 mod 2^32. */
- multiboot_uint32_t checksum;
+ uint checksum;
/* These are only valid if MULTIBOOT_AOUT_KLUDGE is set. */
- multiboot_uint32_t header_addr;
- multiboot_uint32_t load_addr;
- multiboot_uint32_t load_end_addr;
- multiboot_uint32_t bss_end_addr;
- multiboot_uint32_t entry_addr;
+ uint header_addr;
+ uint load_addr;
+ uint load_end_addr;
+ uint bss_end_addr;
+ uint entry_addr;
/* These are only valid if MULTIBOOT_VIDEO_MODE is set. */
- multiboot_uint32_t mode_type;
- multiboot_uint32_t width;
- multiboot_uint32_t height;
- multiboot_uint32_t depth;
+ uint mode_type;
+ uint width;
+ uint height;
+ uint depth;
};
/* The symbol table for a.out. */
struct multiboot_aout_symbol_table
{
- multiboot_uint32_t tabsize;
- multiboot_uint32_t strsize;
- multiboot_uint32_t addr;
- multiboot_uint32_t reserved;
+ uint tabsize;
+ uint strsize;
+ uint addr;
+ uint reserved;
};
typedef struct multiboot_aout_symbol_table multiboot_aout_symbol_table_t;
/* The section header table for ELF. */
struct multiboot_elf_section_header_table
{
- multiboot_uint32_t num;
- multiboot_uint32_t size;
- multiboot_uint32_t addr;
- multiboot_uint32_t shndx;
+ uint num;
+ uint size;
+ uint addr;
+ uint shndx;
};
typedef struct multiboot_elf_section_header_table multiboot_elf_section_header_table_t;
struct multiboot_info
{
/* Multiboot info version number */
- multiboot_uint32_t flags;
+ uint flags;
/* Available memory from BIOS */
- multiboot_uint32_t mem_lower;
- multiboot_uint32_t mem_upper;
+ uint mem_lower;
+ uint mem_upper;
/* "root" partition */
- multiboot_uint32_t boot_device;
+ uint boot_device;
/* Kernel command line */
- multiboot_uint32_t cmdline;
+ uint cmdline;
/* Boot-Module list */
- multiboot_uint32_t mods_count;
- multiboot_uint32_t mods_addr;
+ uint mods_count;
+ uint mods_addr;
union
{
@@ -169,54 +169,54 @@ struct multiboot_info
} u;
/* Memory Mapping buffer */
- multiboot_uint32_t mmap_length;
- multiboot_uint32_t mmap_addr;
+ uint mmap_length;
+ uint mmap_addr;
/* Drive Info buffer */
- multiboot_uint32_t drives_length;
- multiboot_uint32_t drives_addr;
+ uint drives_length;
+ uint drives_addr;
/* ROM configuration table */
- multiboot_uint32_t config_table;
+ uint config_table;
/* Boot Loader Name */
- multiboot_uint32_t boot_loader_name;
+ uint boot_loader_name;
/* APM table */
- multiboot_uint32_t apm_table;
+ uint apm_table;
/* Video */
- multiboot_uint32_t vbe_control_info;
- multiboot_uint32_t vbe_mode_info;
- multiboot_uint16_t vbe_mode;
- multiboot_uint16_t vbe_interface_seg;
- multiboot_uint16_t vbe_interface_off;
- multiboot_uint16_t vbe_interface_len;
+ uint vbe_control_info;
+ uint vbe_mode_info;
+ ushort vbe_mode;
+ ushort vbe_interface_seg;
+ ushort vbe_interface_off;
+ ushort vbe_interface_len;
- 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;
+ ullong framebuffer_addr;
+ uint framebuffer_pitch;
+ uint framebuffer_width;
+ uint framebuffer_height;
+ uchar 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;
+ uchar framebuffer_type;
union
{
struct
{
- multiboot_uint32_t framebuffer_palette_addr;
- multiboot_uint16_t framebuffer_palette_num_colors;
+ uint framebuffer_palette_addr;
+ ushort framebuffer_palette_num_colors;
};
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;
+ uchar framebuffer_red_field_position;
+ uchar framebuffer_red_mask_size;
+ uchar framebuffer_green_field_position;
+ uchar framebuffer_green_mask_size;
+ uchar framebuffer_blue_field_position;
+ uchar framebuffer_blue_mask_size;
};
};
};
@@ -224,51 +224,51 @@ typedef struct multiboot_info multiboot_info_t;
struct multiboot_color
{
- multiboot_uint8_t red;
- multiboot_uint8_t green;
- multiboot_uint8_t blue;
+ uchar red;
+ uchar green;
+ uchar blue;
};
struct multiboot_mmap_entry
{
- multiboot_uint32_t size;
- multiboot_uint64_t addr;
- multiboot_uint64_t len;
+ uint size;
+ ullong addr;
+ ullong 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;
+ uint type;
} __attribute__((packed));
typedef struct multiboot_mmap_entry multiboot_memory_map_t;
struct multiboot_mod_list
{
/* the memory used goes from bytes 'mod_start' to 'mod_end-1' inclusive */
- multiboot_uint32_t mod_start;
- multiboot_uint32_t mod_end;
+ uint mod_start;
+ uint mod_end;
/* Module command line */
- multiboot_uint32_t cmdline;
+ uint cmdline;
/* padding to take it to 16 bytes (must be zero) */
- multiboot_uint32_t pad;
+ uint pad;
};
typedef struct multiboot_mod_list multiboot_module_t;
/* APM BIOS info. */
struct multiboot_apm_info
{
- 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;
+ ushort version;
+ ushort cseg;
+ uint offset;
+ ushort cseg_16;
+ ushort dseg;
+ ushort flags;
+ ushort cseg_len;
+ ushort cseg_16_len;
+ ushort dseg_len;
};
#endif /* ! ASM_FILE */
diff --git a/kaleid/kernel/init/init.c b/kaleid/kernel/init/init.c
index 8fef98b..466c6fb 100644
--- a/kaleid/kernel/init/init.c
+++ b/kaleid/kernel/init/init.c
@@ -22,9 +22,58 @@
// along with OS/K. If not, see . //
//----------------------------------------------------------------------------//
-#include
+#include
#include
#include
+#include
+
+//
+// BootInfo_t initialization. It is necessary because grub will potentially be
+// wiped since it is below 1MB....
+//
+void InitBootInfo(multiboot_info_t *mbi)
+{
+ KalAssert(mbi);
+
+ extern uint MB_header;
+
+ //Retrieves the bootloader informations
+ GetBootInfo(btldr).grubFlags = mbi->flags;
+ GetBootInfo(btldr).grubName = (mbi->boot_loader_name);
+ GetBootInfo(btldr).modulesCount = mbi->mods_count;
+ GetBootInfo(btldr).modulesAddr = (void*)(ullong)mbi->mods_addr;
+ GetBootInfo(btldr).mbHeaderAddr = (void*)(ullong)&MB_header;
+ DebugLog("\n[InitBootInfo] %s\n", GetBootInfo(btldr).grubName);
+ DebugLog("[InitBootInfo] Header address : %p, modules address : %p\n",
+ GetBootInfo(btldr).mbHeaderAddr, GetBootInfo(btldr).modulesAddr);
+ DebugLog("[InitBootInfo] GRUB flags : %x\n", GetBootInfo(btldr).grubFlags);
+
+ //Retrieves the drives informations
+ GetBootInfo(drives).bootDrv = mbi->boot_device;
+ GetBootInfo(drives).bufferLength = mbi->drives_length;
+ GetBootInfo(drives).bufferAddr = (void*)(ullong)mbi->drives_addr;
+ DebugLog("[InitBootInfo] Root drive : %x\n",
+ GetBootInfo(drives).bootDrv);
+
+ //Retrieves the memory informations
+ GetBootInfo(memory).lowMemory = mbi->mem_lower;
+ GetBootInfo(memory).upMemory = mbi->mem_upper;
+ GetBootInfo(memory).mapAddr = (void*)(ullong)mbi->mmap_addr;
+ GetBootInfo(memory).mapLength = mbi->mmap_length;
+ DebugLog("[InitBootInfo] Low memory : %d Kio, Up memory : %d Mio\n",
+ GetBootInfo(memory).lowMemory, GetBootInfo(memory).upMemory / (MB/KB));
+ DebugLog("[InitBootInfo] Memory map address : %p, length : %d\n",
+ GetBootInfo(memory).mapAddr, GetBootInfo(memory).mapLength);
+
+ // XXX assign video infos, but unused at this time
+
+ // Retrieves the firmware infos
+ GetBootInfo(firmware).apmTable = mbi->apm_table;
+ GetBootInfo(firmware).romTable = mbi->config_table;
+ DebugLog("[InitBootInfo] APM Table : %p, ROM Table : %p\n",
+ GetBootInfo(firmware).apmTable, GetBootInfo(firmware).romTable);
+}
+
//
// Entry point of the Kaleid kernel
@@ -37,23 +86,19 @@ noreturn void StartKern(multiboot_info_t *mbInfo, int mbMagic)
// Kernel terminals
InitTerms();
- KernLog( "We were loaded by : %s\n\n"
- "We get\n"
- " *mbInfo : %p\n"
- " mbMagic : %x\n"
- " mbBootdrv : %x\n"
- " *mbMmap : %p\n"
- " `-length : %d\n"
- "\nGoodbye World :(",
+ //Hello world because why not
+ KernLog("%c%c%c OS/K\n\n", 219, 219, 219);
- mbInfo->boot_loader_name,
- mbInfo,
- mbMagic,
- mbInfo->boot_device,
- mbInfo->mmap_addr,
- mbInfo->mmap_length
- );
+ KalAlwaysAssert(mbMagic == MULTIBOOT_BOOTLOADER_MAGIC);
+ KernLog("[Init] We have magic : %x\n", mbMagic);
- // Get out
- CrashSystem();
-}
+ //Initialize the BootInfo_t structure
+ InitBootInfo(mbInfo);
+
+ //Memory mapping
+ InitMemoryMap();
+
+ // We're out
+ KernLog("\n[Init] Evil never dies !");
+ CrashSystem(); //yay
+}
diff --git a/kaleid/kernel/init/table.c b/kaleid/kernel/init/table.c
index 22317ad..10c52de 100644
--- a/kaleid/kernel/init/table.c
+++ b/kaleid/kernel/init/table.c
@@ -27,6 +27,8 @@
int cpuCount = 1;
Processor_t cpuTable[NCPUS] = {0};
+BootInfo_t bootTab = {0}
Terminal_t *StdOut = 0, *StdDbg = 0;
volatile char *PanicStr = 0;
+Terminal_t *stdOut = 0, *stdDbg = 0;
diff --git a/kaleid/kernel/mm/malloc.c b/kaleid/kernel/mm/malloc.c
index cc7389c..e63fa77 100644
--- a/kaleid/kernel/mm/malloc.c
+++ b/kaleid/kernel/mm/malloc.c
@@ -66,5 +66,6 @@ error_t KalAllocMemory(void **ptr, size_t req, int flags, size_t align)
error_t KalFreeMemory(void *ptr)
{
(void)ptr;
+ return 0;
}
diff --git a/kaleid/kernel/mm/map.c b/kaleid/kernel/mm/map.c
new file mode 100644
index 0000000..6d29346
--- /dev/null
+++ b/kaleid/kernel/mm/map.c
@@ -0,0 +1,38 @@
+//----------------------------------------------------------------------------//
+// GNU GPL OS/K //
+// //
+// Desc: //
+// //
+// //
+// Copyright © 2018-2019 The OS/K Team //
+// //
+// This file is part of OS/K. //
+// //
+// OS/K is free software: you can redistribute it and/or modify //
+// it under the terms of the GNU General Public License as published by //
+// the Free Software Foundation, either version 3 of the License, or //
+// any later version. //
+// //
+// OS/K is distributed in the hope that it will be useful, //
+// but WITHOUT ANY WARRANTY//without even the implied warranty of //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
+// GNU General Public License for more details. //
+// //
+// You should have received a copy of the GNU General Public License //
+// along with OS/K. If not, see . //
+//----------------------------------------------------------------------------//
+
+#include
+#include
+
+error_t InitMemoryMap(void)
+{
+ ///uint MapIsValid = (GetBootInfo(btldr).grubFlags & MULTIBOOT_INFO_MEM_MAP = MULTIBOOT_INFO_MEM_MAP ? 1 : 0);
+ KalAlwaysAssert(MapIsValid);
+ return EOK;
+}
+
+void *GetMemoryMap(void)
+{
+ return (void*)0;
+}