Orion
Barry Importing existing Orion kernel d41a53c (2 years, 4 months ago); This file contains the AP trampoline code to bounce it back into protected ; mode and run the Kernel on them. The location of the stack is set by the ; calling code. This code runs initially in real (16-bit) mode, at 0x0000 in ; physical memory. Modifying this code should be done with care, since it makes ; use of fixed offsets in memory to jump around. [bits 16] [extern ap_startup] ; This is the code run by the APs on startup. They need to initialise ; themselves, which includes setting up a GDT and switching to protected mode. ; When they're in protected mode they can just run their main C function. [global ap_trampoline] ap_trampoline: cli cld jmp 0x0000:0x2040 ; continue align 16 .gdt_start: dd 0, 0 dd 0x0000FFFF, 0x00CF9A00 ; Flat Code dd 0x0000FFFF, 0x00CF9200 ; Flat Data dd 0x00000068, 0x00CF8900 ; TSS .gdt_desc: dw .gdt_desc - .gdt_start - 1 dd 0x2010 ; gdt_start dd 0, 0 align 64 .continue: xor ax, ax mov ds, ax lgdt [0x2030] ; gdt_desc mov eax, cr0 or eax, 0x01 mov cr0, eax jmp 0x08:0x2060 ; pm align 32 [bits 32] .pm: mov ax, 0x10 mov ds, ax mov ss, ax ; Load passed stack mov eax, [0x2FF0] mov esp, eax mov ebp, esp sti jmp 0x08:ap_startup