mirror of
https://github.com/EnderIce2/Fennix.git
synced 2025-05-31 08:47:57 +00:00
Compile fix
This commit is contained in:
parent
aaebb17788
commit
f70e4b747b
@ -1,113 +0,0 @@
|
|||||||
; [bits 16]
|
|
||||||
; TRAMPOLINE_BASE equ 0x2000
|
|
||||||
|
|
||||||
; extern StartCPU
|
|
||||||
; global _trampoline_start
|
|
||||||
; _trampoline_start:
|
|
||||||
; cli
|
|
||||||
; mov ax, 0x0
|
|
||||||
; mov ds, ax
|
|
||||||
; mov es, ax
|
|
||||||
; mov fs, ax
|
|
||||||
; mov gs, ax
|
|
||||||
; mov ss, ax
|
|
||||||
; o32 lgdt [ProtectedMode_gdtr - _trampoline_start + TRAMPOLINE_BASE]
|
|
||||||
; mov eax, cr0
|
|
||||||
; or al, 0x1
|
|
||||||
; mov cr0, eax
|
|
||||||
; jmp 0x8:(Trampoline32 - _trampoline_start + TRAMPOLINE_BASE)
|
|
||||||
|
|
||||||
; [bits 32]
|
|
||||||
; section .text
|
|
||||||
; Trampoline32:
|
|
||||||
; mov bx, 0x10
|
|
||||||
; mov ds, bx
|
|
||||||
; mov es, bx
|
|
||||||
; mov ss, bx
|
|
||||||
; mov eax, dword [0x500]
|
|
||||||
; mov cr3, eax
|
|
||||||
; mov eax, cr4
|
|
||||||
; or eax, 1 << 5 ; Set the PAE-bit, which is the 6th bit (bit 5).
|
|
||||||
; or eax, 1 << 7
|
|
||||||
; mov cr4, eax
|
|
||||||
; mov ecx, 0xc0000080
|
|
||||||
; rdmsr
|
|
||||||
; or eax,1 << 8 ; LME
|
|
||||||
; wrmsr
|
|
||||||
; mov eax, cr0
|
|
||||||
; or eax, 1 << 31
|
|
||||||
; mov cr0, eax
|
|
||||||
; lgdt [LongMode_gdtr - _trampoline_start + TRAMPOLINE_BASE]
|
|
||||||
; jmp 0x8:(Trampoline64 - _trampoline_start + TRAMPOLINE_BASE)
|
|
||||||
|
|
||||||
; [bits 64]
|
|
||||||
; Trampoline64:
|
|
||||||
; mov ax, 0x10
|
|
||||||
; mov ds, ax
|
|
||||||
; mov es, ax
|
|
||||||
; mov ss, ax
|
|
||||||
; mov ax, 0x0
|
|
||||||
; mov fs, ax
|
|
||||||
; mov gs, ax
|
|
||||||
; lgdt [0x580]
|
|
||||||
; lidt [0x590]
|
|
||||||
; mov rsp, [0x570]
|
|
||||||
; mov rbp, 0x0 ; Terminate stack traces here.
|
|
||||||
; ; Reset RFLAGS.
|
|
||||||
; push 0x0
|
|
||||||
; popf
|
|
||||||
; mov rax, qword vcode64
|
|
||||||
; call vcode64
|
|
||||||
|
|
||||||
; vcode64:
|
|
||||||
; push rbp
|
|
||||||
; ; Set up SSE
|
|
||||||
; mov rax, cr0
|
|
||||||
; ; btr eax, 2
|
|
||||||
; ; bts eax, 1
|
|
||||||
; ; mov cr0, rax
|
|
||||||
; mov rax, cr4
|
|
||||||
; bts eax, 9
|
|
||||||
; bts eax, 10
|
|
||||||
; mov cr4, rax
|
|
||||||
; mov rax, qword TrampolineExit
|
|
||||||
; call rax
|
|
||||||
|
|
||||||
; align 16
|
|
||||||
; LongMode_gdtr:
|
|
||||||
; dw LongModeGDTEnd - LongModeGDTStart - 1
|
|
||||||
; dq LongModeGDTStart - _trampoline_start + TRAMPOLINE_BASE
|
|
||||||
|
|
||||||
; align 16
|
|
||||||
; LongModeGDTStart:
|
|
||||||
; dq 0 ; NULL segment
|
|
||||||
; dq 0x00AF98000000FFFF ; Code segment
|
|
||||||
; dq 0x00CF92000000FFFF ; Data segment
|
|
||||||
; LongModeGDTEnd:
|
|
||||||
|
|
||||||
; align 16
|
|
||||||
; ProtectedMode_gdtr:
|
|
||||||
; dw ProtectedModeGDTEnd - ProtectedModeGDTStart - 1
|
|
||||||
; dd ProtectedModeGDTStart - _trampoline_start + TRAMPOLINE_BASE
|
|
||||||
|
|
||||||
; align 16
|
|
||||||
; ProtectedModeGDTStart:
|
|
||||||
; dq 0 ; NULL segment
|
|
||||||
; dq 0x00CF9A000000FFFF ; Code segment
|
|
||||||
; dq 0x00CF92000000FFFF ; Data segment
|
|
||||||
; ProtectedModeGDTEnd:
|
|
||||||
|
|
||||||
; align 16
|
|
||||||
; ProtectedMode_idtr:
|
|
||||||
; dw 0
|
|
||||||
; dd 0
|
|
||||||
; dd 0
|
|
||||||
; align 16
|
|
||||||
|
|
||||||
; global _trampoline_end
|
|
||||||
; _trampoline_end:
|
|
||||||
|
|
||||||
; TrampolineExit:
|
|
||||||
; call StartCPU
|
|
||||||
|
|
||||||
; times 512 - ($-$$) db 0
|
|
113
Architecture/amd64/cpu/SMPTrampoline.asm_
Normal file
113
Architecture/amd64/cpu/SMPTrampoline.asm_
Normal file
@ -0,0 +1,113 @@
|
|||||||
|
[bits 16]
|
||||||
|
TRAMPOLINE_BASE equ 0x2000
|
||||||
|
|
||||||
|
extern StartCPU
|
||||||
|
global _trampoline_start
|
||||||
|
_trampoline_start:
|
||||||
|
cli
|
||||||
|
mov ax, 0x0
|
||||||
|
mov ds, ax
|
||||||
|
mov es, ax
|
||||||
|
mov fs, ax
|
||||||
|
mov gs, ax
|
||||||
|
mov ss, ax
|
||||||
|
o32 lgdt [ProtectedMode_gdtr - _trampoline_start + TRAMPOLINE_BASE]
|
||||||
|
mov eax, cr0
|
||||||
|
or al, 0x1
|
||||||
|
mov cr0, eax
|
||||||
|
jmp 0x8:(Trampoline32 - _trampoline_start + TRAMPOLINE_BASE)
|
||||||
|
|
||||||
|
[bits 32]
|
||||||
|
section .text
|
||||||
|
Trampoline32:
|
||||||
|
mov bx, 0x10
|
||||||
|
mov ds, bx
|
||||||
|
mov es, bx
|
||||||
|
mov ss, bx
|
||||||
|
mov eax, dword [0x500]
|
||||||
|
mov cr3, eax
|
||||||
|
mov eax, cr4
|
||||||
|
or eax, 1 << 5 ; Set the PAE-bit, which is the 6th bit (bit 5).
|
||||||
|
or eax, 1 << 7
|
||||||
|
mov cr4, eax
|
||||||
|
mov ecx, 0xc0000080
|
||||||
|
rdmsr
|
||||||
|
or eax,1 << 8 ; LME
|
||||||
|
wrmsr
|
||||||
|
mov eax, cr0
|
||||||
|
or eax, 1 << 31
|
||||||
|
mov cr0, eax
|
||||||
|
lgdt [LongMode_gdtr - _trampoline_start + TRAMPOLINE_BASE]
|
||||||
|
jmp 0x8:(Trampoline64 - _trampoline_start + TRAMPOLINE_BASE)
|
||||||
|
|
||||||
|
[bits 64]
|
||||||
|
Trampoline64:
|
||||||
|
mov ax, 0x10
|
||||||
|
mov ds, ax
|
||||||
|
mov es, ax
|
||||||
|
mov ss, ax
|
||||||
|
mov ax, 0x0
|
||||||
|
mov fs, ax
|
||||||
|
mov gs, ax
|
||||||
|
lgdt [0x580]
|
||||||
|
lidt [0x590]
|
||||||
|
mov rsp, [0x570]
|
||||||
|
mov rbp, 0x0 ; Terminate stack traces here.
|
||||||
|
; Reset RFLAGS.
|
||||||
|
push 0x0
|
||||||
|
popf
|
||||||
|
mov rax, qword vcode64
|
||||||
|
call vcode64
|
||||||
|
|
||||||
|
vcode64:
|
||||||
|
push rbp
|
||||||
|
; Set up SSE
|
||||||
|
mov rax, cr0
|
||||||
|
; btr eax, 2
|
||||||
|
; bts eax, 1
|
||||||
|
; mov cr0, rax
|
||||||
|
mov rax, cr4
|
||||||
|
bts eax, 9
|
||||||
|
bts eax, 10
|
||||||
|
mov cr4, rax
|
||||||
|
mov rax, qword TrampolineExit
|
||||||
|
call rax
|
||||||
|
|
||||||
|
align 16
|
||||||
|
LongMode_gdtr:
|
||||||
|
dw LongModeGDTEnd - LongModeGDTStart - 1
|
||||||
|
dq LongModeGDTStart - _trampoline_start + TRAMPOLINE_BASE
|
||||||
|
|
||||||
|
align 16
|
||||||
|
LongModeGDTStart:
|
||||||
|
dq 0 ; NULL segment
|
||||||
|
dq 0x00AF98000000FFFF ; Code segment
|
||||||
|
dq 0x00CF92000000FFFF ; Data segment
|
||||||
|
LongModeGDTEnd:
|
||||||
|
|
||||||
|
align 16
|
||||||
|
ProtectedMode_gdtr:
|
||||||
|
dw ProtectedModeGDTEnd - ProtectedModeGDTStart - 1
|
||||||
|
dd ProtectedModeGDTStart - _trampoline_start + TRAMPOLINE_BASE
|
||||||
|
|
||||||
|
align 16
|
||||||
|
ProtectedModeGDTStart:
|
||||||
|
dq 0 ; NULL segment
|
||||||
|
dq 0x00CF9A000000FFFF ; Code segment
|
||||||
|
dq 0x00CF92000000FFFF ; Data segment
|
||||||
|
ProtectedModeGDTEnd:
|
||||||
|
|
||||||
|
align 16
|
||||||
|
ProtectedMode_idtr:
|
||||||
|
dw 0
|
||||||
|
dd 0
|
||||||
|
dd 0
|
||||||
|
align 16
|
||||||
|
|
||||||
|
global _trampoline_end
|
||||||
|
_trampoline_end:
|
||||||
|
|
||||||
|
TrampolineExit:
|
||||||
|
call StartCPU
|
||||||
|
|
||||||
|
times 512 - ($-$$) db 0
|
Loading…
x
Reference in New Issue
Block a user