diff --git a/src/kernel/boot/boot.S b/src/kernel/boot/boot.S index 76fedce..8c7df36 100644 --- a/src/kernel/boot/boot.S +++ b/src/kernel/boot/boot.S @@ -19,19 +19,19 @@ _start: mov edi, eax mov esi, ebx - // Temporary stack for booting + //; Temporary stack for booting mov esp, offset V2P(BootStack) - // Enable Page Address Extension + //; Enable Page Address Extension mov eax, cr4 or eax, 1<<5 mov cr4, eax - // Load Page Table (defined in boot/boot_PT.S) + //; Load Page Table (defined in boot/boot_PT.S) mov eax, offset V2P(BootP4) mov cr3, eax - // Enable Long Mode + //; Enable Long Mode mov ecx, 0xC0000080 rdmsr or eax, 1<<8 @@ -42,16 +42,16 @@ _start: or eax, 1<<31 mov cr0, eax - // Load GDT (defined in cpu/gdt.c) + //; Load GDT (defined in cpu/gdt.c) lgdt [V2P(GDTp)] - // Jump into long mode + //; Jump into long mode jmp 0x8:V2P(long_mode_start) .code64 long_mode_start: - // Clear out selectors + //; Clear out selectors mov eax, 0x0 mov ss, eax mov ds, eax @@ -84,7 +84,7 @@ upper_memory: .reload_cs: -.extern kmain +.extern kmain //; boot/kmain.c movabs rax, offset kmain call rax diff --git a/src/kernel/boot/multiboot.c b/src/kernel/boot/multiboot.c index 348ae0b..03f5e21 100644 --- a/src/kernel/boot/multiboot.c +++ b/src/kernel/boot/multiboot.c @@ -42,8 +42,9 @@ struct fbinfo { int parse_multiboot2(struct taglist *tags) { - struct tag *tag = incptr(tags, sizeof(struct taglist)); struct mmap *mmap; + + struct tag *tag = incptr(tags, sizeof(struct taglist)); while(tag->type) { debug("Tag type: %d\n", tag->type); @@ -64,6 +65,7 @@ int parse_multiboot2(struct taglist *tags) break; } + // Tags are 8 byte alligned, so make sure we look for the next one in the right place int padded_size = tag->size + ((tag->size % 8)?(8-(tag->size%8)):0); tag = incptr(tag, padded_size); } diff --git a/src/kernel/boot/multiboot_header.S b/src/kernel/boot/multiboot_header.S index ba08c0a..3d5ee9b 100644 --- a/src/kernel/boot/multiboot_header.S +++ b/src/kernel/boot/multiboot_header.S @@ -8,7 +8,9 @@ Multiboot2Header: .long MBOOT2_LENGTH .long MBOOT2_CHECKSUM -.short 0 +//; Multiboot tag list + +.short 0 //; End tag .short 0 .long 8 diff --git a/src/kernel/cpu/interrupts.c b/src/kernel/cpu/interrupts.c index a006bf5..5545312 100644 --- a/src/kernel/cpu/interrupts.c +++ b/src/kernel/cpu/interrupts.c @@ -42,7 +42,7 @@ void interrupt_init() idtr.addr = idt; idtr.len = sizeof(idt)-1; - load_idt(&idtr); + load_idt(&idtr); // cpu/registers.S } registers *int_handler(registers *r)