Improved kernel's loading function
This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
OBJS = multiboot.asm.o kernel_loader.asm.o ports.asm.o \
|
||||
OBJS = kernel_loader.asm.o ports.asm.o \
|
||||
gdt.asm.o idt.asm.o interrupts.asm.o
|
||||
|
||||
ASM = nasm
|
||||
ASMFLAGS = -f elf
|
||||
all: $(OBJS)
|
||||
%.asm.o: %.asm
|
||||
$(ASM) $(ASMFLAGS) $< -o $@
|
||||
$(ASM) $(ASMFLAGS) $< -o $@
|
||||
|
||||
@@ -1,28 +1,43 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; iceOS Kernel ;
|
||||
; Developed by Marco 'icebit' Cetica ;
|
||||
; (c) 2019 ;
|
||||
; (c) 2019-2020 ;
|
||||
; Released under GPLv3 ;
|
||||
; https://github.com/ice-bit/iceOS ;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
global kernel_loader
|
||||
extern kernel_main
|
||||
[BITS 32] ; We should be in protected mode
|
||||
section .multiboot
|
||||
|
||||
head_s:
|
||||
dd 0xE85250D6 ; Multiboot header magic number
|
||||
dd 0 ; Protected mode flag
|
||||
dd head_e - head_s ; Header length
|
||||
dd 0x100000000 - (0xE85250D6 + 0 + (head_e - head_s)) ; Checksum of above
|
||||
|
||||
; Other flags
|
||||
dw 0 ; type
|
||||
dw 0 ; flags
|
||||
dd 0 ; size
|
||||
|
||||
head_e:
|
||||
|
||||
GLOBAL kernel_loader
|
||||
EXTERN kernel_main
|
||||
|
||||
section .text
|
||||
kernel_loader:
|
||||
mov esp, kernel_stack + KERNEL_STACK_SZ ; Stack pointer
|
||||
push ebx
|
||||
call kernel_main ; jump to kernel's main function
|
||||
mov esp, kernel_stack + KERNEL_STACK_SZ ; Define stack pointer
|
||||
push ebx ; Set multiboot header
|
||||
call kernel_main ; Jump into kernel's main function
|
||||
.loop:
|
||||
jmp .loop ; endless loop
|
||||
jmp .loop ; If the kernel returns, go into an infinite loop.
|
||||
; This will prevent the CPU to run non-kernel instructions
|
||||
; from the memory
|
||||
|
||||
KERNEL_STACK_SZ equ 4096 ; 4 KB for the stack
|
||||
KERNEL_STACK_SZ equ 4096 ; Stack size(4KiB)
|
||||
|
||||
section .bss
|
||||
align 4
|
||||
kernel_stack:
|
||||
resb KERNEL_STACK_SZ ; Reserver 4 KB
|
||||
|
||||
|
||||
|
||||
resb KERNEL_STACK_SZ ; Reserve 4 KiB
|
||||
|
||||
@@ -1,20 +0,0 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; iceOS Kernel ;
|
||||
; Developed by Marco 'icebit' Cetica ;
|
||||
; (c) 2019 ;
|
||||
; Released under GPLv3 ;
|
||||
; https://github.com/ice-bit/iceOS ;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
section .multiboot
|
||||
head_s:
|
||||
dd 0xe85250d6 ; Magic number
|
||||
dd 0 ; Code for protected mode
|
||||
dd head_e - head_s ; Header length
|
||||
dd 0x100000000 - (0xe85250d6 + 0 + (head_e - head_s)) ; Checksum of above
|
||||
|
||||
; Various flags
|
||||
dw 0 ; type
|
||||
dw 0 ; flags
|
||||
dd 8 ; size
|
||||
head_e:
|
||||
Reference in New Issue
Block a user