diff options
author | Freya Murphy <freya@freyacat.org> | 2025-04-19 16:36:51 -0400 |
---|---|---|
committer | Freya Murphy <freya@freyacat.org> | 2025-04-19 16:37:54 -0400 |
commit | 472ec944d2ed81d0304cc6cac80946a6a44776be (patch) | |
tree | f6cae641c143a0b45bb289d9d9fc6145706025b0 /kernel/entry.S | |
parent | set mmap limit (diff) | |
download | comus-472ec944d2ed81d0304cc6cac80946a6a44776be.tar.gz comus-472ec944d2ed81d0304cc6cac80946a6a44776be.tar.bz2 comus-472ec944d2ed81d0304cc6cac80946a6a44776be.zip |
UEFI and republicans
Diffstat (limited to 'kernel/entry.S')
-rw-r--r-- | kernel/entry.S | 69 |
1 files changed, 60 insertions, 9 deletions
diff --git a/kernel/entry.S b/kernel/entry.S index 0610495..fdb8a5a 100644 --- a/kernel/entry.S +++ b/kernel/entry.S @@ -12,24 +12,47 @@ # multiboot header mb_start: - .align 8 # magic + .align 8 .long 0xe85250d6 .long 0 .long mb_end - mb_start .long 0x100000000 - (0xe85250d6 + (mb_end - mb_start)) -mbi_start: - .align 8 # info request + .align 8 .short 1 .short 1 - .long mbi_end - mbi_start - .long 1 # cmdline - .long 6 # mmap - .long 9 # elf section -mbi_end: + .long 20 + .long 1 # cmdline + .long 6 # mmap + .long 9 # elf section + # bios entry + .align 8 + .short 3 + .short 0 + .long 12 + .long _start + # framebuffer + .align 8 + .short 5 + .short 1 + .long 20 + .long 720 # width + .long 480 # height + .long 32 # bpp + # efi boot services .align 8 + .short 7 + .short 0 + .long 8 + # efi amd64 entry + .align 8 + .short 9 + .short 0 + .long 12 + .long _start_efi # null + .align 8 .short 0 .short 0 .long 8 @@ -131,7 +154,7 @@ GDT: .code32 _start: - # enable interrupts + # disable interrupts cli # setup stack @@ -203,8 +226,36 @@ code64: pop %rsi call main + jmp halt + +_start_efi: + # disable interrupts cli + # setup stack + movq $kern_stack_end, %rsp + movq $kern_stack_end, %rbp + + # load gdt + lgdt GDT.Pointer + + # set segment registers + movw $GDT.Code, %dx + movw %dx, %cs + movw %dx, %es + movw $GDT.Data, %dx + movw %dx, %ds + movw %dx, %ss + + xorq %rbp, %rbp # set ebp to 0 so we know where to end stack traces + + movq %rax, %rdi + movq %rbx, %rsi + + call main + jmp halt + halt: + cli hlt jmp halt |