trios/kernel/start.asm

72 lines
932 B
NASM
Raw Normal View History

2023-04-19 03:44:10 +00:00
global start
extern kmain
bits 32
; base, limit, access, flags
%macro gdt_entry 4
2023-04-21 13:39:35 +00:00
db %2 & 0xff
db (%2 >> 8) & 0xff
db %1 & 0xff
db (%1 >> 8) & 0xff
db (%1 >> 16) & 0xff
db %3
db ((%2 >> 16) & 0x0f) | (%4 << 4)
db (%1 >> 24) & 0xff
2023-04-19 03:44:10 +00:00
%endmacro
2023-04-21 13:39:35 +00:00
section .multiboot
2023-04-19 03:44:10 +00:00
align 8
mb_start:
2023-04-21 13:39:35 +00:00
; header
2023-04-19 03:44:10 +00:00
dd 0xe85250d6
dd 0
dd mb_end - mb_start
dd 0x100000000 - (0xe85250d6 + (mb_end - mb_start))
2023-04-21 13:39:35 +00:00
; null tag
2023-04-19 03:44:10 +00:00
dw 0
dw 0
dd 8
2023-04-21 13:39:35 +00:00
;
2023-04-19 03:44:10 +00:00
mb_end:
section .bss
align 16
stack_start:
2023-04-21 13:39:35 +00:00
resb 16384
2023-04-19 03:44:10 +00:00
stack_end:
section .rodata
align 16
gdt_start:
gdt_entry 0, 0, 0, 0
gdt_entry 0, 0xFFFFF, 0x9A, 0xC
gdt_entry 0, 0xFFFFF, 0x92, 0xC
gdt_end:
gdt_descriptor:
2023-04-21 13:39:35 +00:00
dw gdt_end - gdt_start - 1
dd gdt_start
2023-04-19 03:44:10 +00:00
section .text
align 8
start:
2023-04-21 13:39:35 +00:00
cli
lgdt [gdt_descriptor]
jmp 0x08:after_lgdt
2023-04-19 03:44:10 +00:00
after_lgdt:
2023-04-21 13:39:35 +00:00
mov ax, 0x10
mov ds, ax
mov ss, ax
mov es, ax
mov fs, ax
mov gs, ax
mov esp, stack_end
mov ebp, stack_end
sti
push ebx
call kmain
cli
2023-04-19 03:44:10 +00:00
halt:
2023-04-21 13:39:35 +00:00
hlt
jmp halt