/* * Copyright (c) 2026, Chloe M. * Provided under the BSD-3 clause. * * Description: Low-level AMD64 processor init * Author: Chloe M. */ .text .globl MdBspEntry MdBspEntry: cli /* Disable interrupts on startup */ cld /* Just in case, can't predict the state */ xor %rbp, %rbp /* Terminate callstack for traces */ lea g_GDTR(%rip), %rdi call MdGdtLoad call KiKernelInit /* Kick off system init */ 1: hlt jmp 1b .text .globl MdGdtLoad MdGdtLoad: push %r12 push %r13 push %r14 push %r15 push %rbx push %rbp lgdt (%rdi) push $0x08 lea 1f(%rip), %rbx push %rbx lretq 1: mov $0x10, %ax mov %ax, %ds mov %ax, %es mov %ax, %ss mov %ax, %fs xor %ax, %ax mov %ax, %gs pop %rbp pop %rbx pop %r15 pop %r14 pop %r13 pop %r12 retq .section .data .globl g_GDT g_GDT: .NULL: .word 0x0000 .word 0x0000 .byte 0x00 .byte 0b00000000 .byte 0b00000000 .byte 0x00 .CODE: .word 0x0000 .word 0x0000 .byte 0x00 .byte 0b10011010 .byte 0b00100000 .byte 0x00 .DATA: .word 0x0000 .word 0x0000 .byte 0x00 .byte 0b10010010 .byte 0b00000000 .byte 0x00 .UCODE: .word 0x0000 .word 0x0000 .byte 0x00 .byte 0b11111010 .byte 0b10101111 .byte 0x00 .UDATA: .word 0x0000 .word 0x0000 .byte 0x00 .byte 0b11110010 .byte 0b00000000 .byte 0x00 .TSS: .quad 0x00 .quad 0x00 .globl g_GDTR g_GDTR: .word g_GDTR - g_GDT .quad g_GDT