diff options
| -rw-r--r-- | kernel/entry.c | 7 | ||||
| -rw-r--r-- | kernel/main.c | 9 | ||||
| -rw-r--r-- | kernel/multiboot.h | 9 | 
3 files changed, 22 insertions, 3 deletions
| diff --git a/kernel/entry.c b/kernel/entry.c index 2496d21..61ac82b 100644 --- a/kernel/entry.c +++ b/kernel/entry.c @@ -47,6 +47,8 @@ void entry_main(uint32_t mb_magic, multiboot_info* mb_info) {  		entry_serial_out("No cmdline.\n");  	} +	entry_serial_out("Module addr: "); +	entry_serial_out_hex(mb_info->mods_addr->mod_start);  	// Create initial page tables.  	for(unsigned int i = 0; i < 1024; i++) { @@ -54,7 +56,8 @@ void entry_main(uint32_t mb_magic, multiboot_info* mb_info) {  		entry_pagedir[i] = 0;  		// Identity mapping of the current code. -		entry_pagetable_low[i] = ((uint32_t)&addr_phys & 0xffc00000) | (i << 12) | 0x003; +		//entry_pagetable_low[i] = ((uint32_t)&addr_phys & 0xffc00000) | (i << 12) | 0x003; +		entry_pagetable_low[i] = ((uint32_t)&addr_phys & 0xffc00000) | (i << 12) | 0x007;  		// Map kernelspace.  		if((i << 12) < ((uint32_t)&addr_virt_end & 0x003fffff)) { @@ -64,7 +67,7 @@ void entry_main(uint32_t mb_magic, multiboot_info* mb_info) {  		}  	} -	entry_pagedir[(uint32_t)&addr_phys >> 22] = (uint32_t)&entry_pagetable_low | 0x003; +	entry_pagedir[(uint32_t)&addr_phys >> 22] = (uint32_t)&entry_pagetable_low | 0x007;  	entry_pagedir[(uint32_t)&addr_virt >> 22] = (uint32_t)&entry_pagetable_high | 0x003;  	// Mapping stack to top without creating another page directory. diff --git a/kernel/main.c b/kernel/main.c index 74ba441..93647f5 100644 --- a/kernel/main.c +++ b/kernel/main.c @@ -17,6 +17,15 @@ void main() {  	asm volatile("sti"); +	asm volatile( +		"push $0x23\n" +		"push $entry_stack_top\n" +		"pushf\n" +		"push $0x1b\n" +		"push $0x0010a000\n" +		"iret\n" +	); +	  	printf("Halting.\n");  	asm volatile( diff --git a/kernel/multiboot.h b/kernel/multiboot.h index 5a9e348..93a5c30 100644 --- a/kernel/multiboot.h +++ b/kernel/multiboot.h @@ -4,6 +4,13 @@  #include "types.h"  typedef struct { +	uint32_t mod_start; +	uint32_t mod_end; +	char* string; +	uint32_t reserved; +} multiboot_module; + +typedef struct {  	uint32_t flags;  	uint32_t mem_lower; @@ -14,7 +21,7 @@ typedef struct {  	char* cmdline;  	uint32_t mods_count; -	uint32_t mods_addr; +	multiboot_module* mods_addr;  	union {  		uint32_t foo[3]; | 
