long mode achieved, starting rust
This commit is contained in:
parent
6411831e67
commit
687b609244
2 changed files with 31 additions and 0 deletions
|
|
@ -1,4 +1,5 @@
|
|||
global start
|
||||
extern long_mode_start
|
||||
|
||||
section .text
|
||||
bits 32
|
||||
|
|
@ -12,6 +13,11 @@ start:
|
|||
call set_up_page_tables
|
||||
call enable_paging
|
||||
|
||||
; load the 64-bit GDT
|
||||
lgdt [gdt64.pointer]
|
||||
|
||||
jmp gdt64.code:long_mode_start
|
||||
|
||||
; print 'OK' to screen
|
||||
mov dword [0xb8000], 0x2f4b2f4f
|
||||
hlt
|
||||
|
|
@ -138,3 +144,12 @@ p2_table:
|
|||
stack_bottom:
|
||||
resb 64
|
||||
stack_top:
|
||||
|
||||
section .rodata
|
||||
gdt64:
|
||||
dq 0 ; zero entry
|
||||
.code: equ $ - gdt64
|
||||
dq (1<<43) | (1<<44) | (1<<47) | (1<<53) ; code segment
|
||||
.pointer:
|
||||
dw $ - gdt64 - 1
|
||||
dq gdt64
|
||||
|
|
|
|||
16
kernel-rs/src/arch/x86_64/long_mode_init.asm
Normal file
16
kernel-rs/src/arch/x86_64/long_mode_init.asm
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
global long_mode_start
|
||||
|
||||
section .text
|
||||
bits 64
|
||||
long_mode_start:
|
||||
; load 0 into all data segment registers
|
||||
mov ax, 0
|
||||
mov ss, ax
|
||||
mov ds, ax
|
||||
mov es, ax
|
||||
mov fs, ax
|
||||
mov gs, ax
|
||||
;print 'OKAY' to screen
|
||||
mov rax, 0x2f592f412f4b2f4f
|
||||
mov qword [0xb8000], rax
|
||||
hlt
|
||||
Loading…
Reference in a new issue