mirror of
https://github.com/Fennix-Project/Kernel.git
synced 2025-05-28 15:34:33 +00:00
TODO: Trampoline can't be compiled.
This commit is contained in:
parent
d5c496ea14
commit
c95ccdb089
@ -1,113 +1,113 @@
|
|||||||
[bits 16]
|
; [bits 16]
|
||||||
TRAMPOLINE_BASE equ 0x2000
|
; TRAMPOLINE_BASE equ 0x2000
|
||||||
|
|
||||||
extern StartCPU
|
; extern StartCPU
|
||||||
global _trampoline_start
|
; global _trampoline_start
|
||||||
_trampoline_start:
|
; _trampoline_start:
|
||||||
cli
|
; cli
|
||||||
mov ax, 0x0
|
; mov ax, 0x0
|
||||||
mov ds, ax
|
; mov ds, ax
|
||||||
mov es, ax
|
; mov es, ax
|
||||||
mov fs, ax
|
; mov fs, ax
|
||||||
mov gs, ax
|
; mov gs, ax
|
||||||
mov ss, ax
|
; mov ss, ax
|
||||||
o32 lgdt [ProtectedMode_gdtr - _trampoline_start + TRAMPOLINE_BASE]
|
; o32 lgdt [ProtectedMode_gdtr - _trampoline_start + TRAMPOLINE_BASE]
|
||||||
mov eax, cr0
|
; mov eax, cr0
|
||||||
or al, 0x1
|
; or al, 0x1
|
||||||
mov cr0, eax
|
; mov cr0, eax
|
||||||
jmp 0x8:(Trampoline32 - _trampoline_start + TRAMPOLINE_BASE)
|
; jmp 0x8:(Trampoline32 - _trampoline_start + TRAMPOLINE_BASE)
|
||||||
|
|
||||||
[bits 32]
|
; [bits 32]
|
||||||
section .text
|
; section .text
|
||||||
Trampoline32:
|
; Trampoline32:
|
||||||
mov bx, 0x10
|
; mov bx, 0x10
|
||||||
mov ds, bx
|
; mov ds, bx
|
||||||
mov es, bx
|
; mov es, bx
|
||||||
mov ss, bx
|
; mov ss, bx
|
||||||
mov eax, dword [0x500]
|
; mov eax, dword [0x500]
|
||||||
mov cr3, eax
|
; mov cr3, eax
|
||||||
mov eax, cr4
|
; mov eax, cr4
|
||||||
or eax, 1 << 5 ; Set the PAE-bit, which is the 6th bit (bit 5).
|
; or eax, 1 << 5 ; Set the PAE-bit, which is the 6th bit (bit 5).
|
||||||
or eax, 1 << 7
|
; or eax, 1 << 7
|
||||||
mov cr4, eax
|
; mov cr4, eax
|
||||||
mov ecx, 0xc0000080
|
; mov ecx, 0xc0000080
|
||||||
rdmsr
|
; rdmsr
|
||||||
or eax,1 << 8 ; LME
|
; or eax,1 << 8 ; LME
|
||||||
wrmsr
|
; wrmsr
|
||||||
mov eax, cr0
|
; mov eax, cr0
|
||||||
or eax, 1 << 31
|
; or eax, 1 << 31
|
||||||
mov cr0, eax
|
; mov cr0, eax
|
||||||
lgdt [LongMode_gdtr - _trampoline_start + TRAMPOLINE_BASE]
|
; lgdt [LongMode_gdtr - _trampoline_start + TRAMPOLINE_BASE]
|
||||||
jmp 0x8:(Trampoline64 - _trampoline_start + TRAMPOLINE_BASE)
|
; jmp 0x8:(Trampoline64 - _trampoline_start + TRAMPOLINE_BASE)
|
||||||
|
|
||||||
[bits 64]
|
; [bits 64]
|
||||||
Trampoline64:
|
; Trampoline64:
|
||||||
mov ax, 0x10
|
; mov ax, 0x10
|
||||||
mov ds, ax
|
; mov ds, ax
|
||||||
mov es, ax
|
; mov es, ax
|
||||||
mov ss, ax
|
; mov ss, ax
|
||||||
mov ax, 0x0
|
; mov ax, 0x0
|
||||||
mov fs, ax
|
; mov fs, ax
|
||||||
mov gs, ax
|
; mov gs, ax
|
||||||
lgdt [0x580]
|
; lgdt [0x580]
|
||||||
lidt [0x590]
|
; lidt [0x590]
|
||||||
mov rsp, [0x570]
|
; mov rsp, [0x570]
|
||||||
mov rbp, 0x0 ; Terminate stack traces here.
|
; mov rbp, 0x0 ; Terminate stack traces here.
|
||||||
; Reset RFLAGS.
|
; ; Reset RFLAGS.
|
||||||
push 0x0
|
; push 0x0
|
||||||
popf
|
; popf
|
||||||
mov rax, qword vcode64
|
; mov rax, qword vcode64
|
||||||
call vcode64
|
; call vcode64
|
||||||
|
|
||||||
vcode64:
|
; vcode64:
|
||||||
push rbp
|
; push rbp
|
||||||
; Set up SSE
|
; ; Set up SSE
|
||||||
mov rax, cr0
|
; mov rax, cr0
|
||||||
; btr eax, 2
|
; ; btr eax, 2
|
||||||
; bts eax, 1
|
; ; bts eax, 1
|
||||||
; mov cr0, rax
|
; ; mov cr0, rax
|
||||||
mov rax, cr4
|
; mov rax, cr4
|
||||||
bts eax, 9
|
; bts eax, 9
|
||||||
bts eax, 10
|
; bts eax, 10
|
||||||
mov cr4, rax
|
; mov cr4, rax
|
||||||
mov rax, qword TrampolineExit
|
; mov rax, qword TrampolineExit
|
||||||
call rax
|
; call rax
|
||||||
|
|
||||||
align 16
|
; align 16
|
||||||
LongMode_gdtr:
|
; LongMode_gdtr:
|
||||||
dw LongModeGDTEnd - LongModeGDTStart - 1
|
; dw LongModeGDTEnd - LongModeGDTStart - 1
|
||||||
dq LongModeGDTStart - _trampoline_start + TRAMPOLINE_BASE
|
; dq LongModeGDTStart - _trampoline_start + TRAMPOLINE_BASE
|
||||||
|
|
||||||
align 16
|
; align 16
|
||||||
LongModeGDTStart:
|
; LongModeGDTStart:
|
||||||
dq 0 ; NULL segment
|
; dq 0 ; NULL segment
|
||||||
dq 0x00AF98000000FFFF ; Code segment
|
; dq 0x00AF98000000FFFF ; Code segment
|
||||||
dq 0x00CF92000000FFFF ; Data segment
|
; dq 0x00CF92000000FFFF ; Data segment
|
||||||
LongModeGDTEnd:
|
; LongModeGDTEnd:
|
||||||
|
|
||||||
align 16
|
; align 16
|
||||||
ProtectedMode_gdtr:
|
; ProtectedMode_gdtr:
|
||||||
dw ProtectedModeGDTEnd - ProtectedModeGDTStart - 1
|
; dw ProtectedModeGDTEnd - ProtectedModeGDTStart - 1
|
||||||
dd ProtectedModeGDTStart - _trampoline_start + TRAMPOLINE_BASE
|
; dd ProtectedModeGDTStart - _trampoline_start + TRAMPOLINE_BASE
|
||||||
|
|
||||||
align 16
|
; align 16
|
||||||
ProtectedModeGDTStart:
|
; ProtectedModeGDTStart:
|
||||||
dq 0 ; NULL segment
|
; dq 0 ; NULL segment
|
||||||
dq 0x00CF9A000000FFFF ; Code segment
|
; dq 0x00CF9A000000FFFF ; Code segment
|
||||||
dq 0x00CF92000000FFFF ; Data segment
|
; dq 0x00CF92000000FFFF ; Data segment
|
||||||
ProtectedModeGDTEnd:
|
; ProtectedModeGDTEnd:
|
||||||
|
|
||||||
align 16
|
; align 16
|
||||||
ProtectedMode_idtr:
|
; ProtectedMode_idtr:
|
||||||
dw 0
|
; dw 0
|
||||||
dd 0
|
; dd 0
|
||||||
dd 0
|
; dd 0
|
||||||
align 16
|
; align 16
|
||||||
|
|
||||||
global _trampoline_end
|
; global _trampoline_end
|
||||||
_trampoline_end:
|
; _trampoline_end:
|
||||||
|
|
||||||
TrampolineExit:
|
; TrampolineExit:
|
||||||
call StartCPU
|
; call StartCPU
|
||||||
|
|
||||||
times 512 - ($-$$) db 0
|
; times 512 - ($-$$) db 0
|
||||||
|
8
Makefile
8
Makefile
@ -86,6 +86,14 @@ LDFLAGS += -TArchitecture/aarch64/linker.ld -fPIC
|
|||||||
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifeq ($(OSARCH), amd64)
|
||||||
|
NASMFLAGS := -f elf64
|
||||||
|
else ifeq ($(OSARCH), i686)
|
||||||
|
NASMFLAGS := -f elf32
|
||||||
|
else ifeq ($(OSARCH), aarch64)
|
||||||
|
NASMFLAGS :=
|
||||||
|
endif
|
||||||
|
|
||||||
ifeq ($(DEBUG), 1)
|
ifeq ($(DEBUG), 1)
|
||||||
CFLAGS += -DDEBUG -ggdb -O0 -fdiagnostics-color=always
|
CFLAGS += -DDEBUG -ggdb -O0 -fdiagnostics-color=always
|
||||||
LDFLAGS += -ggdb -O0 -g
|
LDFLAGS += -ggdb -O0 -g
|
||||||
|
Loading…
x
Reference in New Issue
Block a user