53 lines
648 B
ArmAsm
53 lines
648 B
ArmAsm
global loader
|
|
|
|
MAGIC_NUMBER equ 0x1BADB002 ; multiboot magic
|
|
FLAGS equ 0x0
|
|
CHECKSUM equ -MAGIC_NUMBER
|
|
KERNEL_STACK_SIZE equ 4096
|
|
|
|
section .text:
|
|
align 4
|
|
dd MAGIC_NUMBER
|
|
dd FLAGS
|
|
dd CHECKSUM
|
|
|
|
extern kmain
|
|
|
|
loader:
|
|
cli
|
|
; mov eax, 0xCAFEBABE
|
|
push dword 42
|
|
call kmain
|
|
|
|
.loop:
|
|
jmp .loop
|
|
|
|
global gdt_flush
|
|
extern gp
|
|
|
|
gdt_flush:
|
|
lgdt [gp]
|
|
mov ax, 0x10
|
|
mov ds, ax
|
|
mov es, ax
|
|
mov fs, ax
|
|
mov gs, ax
|
|
mov ss, ax
|
|
jmp 0x08:flush2
|
|
|
|
flush2:
|
|
ret
|
|
|
|
global idt_load
|
|
extern idtp
|
|
|
|
idt_load:
|
|
lidt [idtp]
|
|
ret
|
|
|
|
section .bss
|
|
align 4
|
|
kernel_stack:
|
|
resb KERNEL_STACK_SIZE
|
|
mov esp, kernel_stack + KERNEL_STACK_SIZE
|