prettier asm
This commit is contained in:
parent
fd0915048d
commit
ffcb85dd5b
3 changed files with 18 additions and 16 deletions
|
|
@ -25,6 +25,8 @@ check_multiboot:
|
||||||
mov al, "0"
|
mov al, "0"
|
||||||
jmp error
|
jmp error
|
||||||
|
|
||||||
|
; minimal page tables (first 8MB identity mapped)
|
||||||
|
; core page tables will be loaded in rust
|
||||||
set_up_page_tables:
|
set_up_page_tables:
|
||||||
; map P2 table recursively
|
; map P2 table recursively
|
||||||
mov eax, p2_table
|
mov eax, p2_table
|
||||||
|
|
@ -32,12 +34,13 @@ set_up_page_tables:
|
||||||
mov [p2_table + 1023 * 4], eax
|
mov [p2_table + 1023 * 4], eax
|
||||||
|
|
||||||
; identity map first P2 entry to a huge page
|
; identity map first P2 entry to a huge page
|
||||||
mov eax, 0b10000011 ; huge + present + writable
|
mov eax, 0x0 ; 0MB -> 4MB (first page)
|
||||||
mov [p2_table], eax ; map first entry
|
or eax, 0b10000011 ; huge + present + writable
|
||||||
|
mov [p2_table], eax
|
||||||
|
|
||||||
mov eax, 0b10000011 ; huge + present + writable
|
mov eax, 0x400000 ; 4MB -> 8Mb (second page)
|
||||||
or eax, 0x400000 ; 4MB
|
or eax, 0b10000011 ; huge + present + writable
|
||||||
mov [p2_table + 4], eax ; map second entry
|
mov [p2_table + 4], eax
|
||||||
|
|
||||||
mov eax, p2_table
|
mov eax, p2_table
|
||||||
mov cr3, eax
|
mov cr3, eax
|
||||||
|
|
@ -61,6 +64,8 @@ stack_bottom:
|
||||||
resb 4096 * 4
|
resb 4096 * 4
|
||||||
stack_top:
|
stack_top:
|
||||||
|
|
||||||
|
; minimal boot gdt (cs & ds)
|
||||||
|
; core gdt will be loaded in rust
|
||||||
section .gdt
|
section .gdt
|
||||||
GDTR:
|
GDTR:
|
||||||
; http://tuttlem.github.io/2014/07/11/a-gdt-primer.html
|
; http://tuttlem.github.io/2014/07/11/a-gdt-primer.html
|
||||||
|
|
|
||||||
|
|
@ -21,18 +21,17 @@ pub fn init() {
|
||||||
let mut gdt = gdt::Gdt::new();
|
let mut gdt = gdt::Gdt::new();
|
||||||
code_selector = gdt.add_entry(gdt::Descriptor::kernel_code_segment());
|
code_selector = gdt.add_entry(gdt::Descriptor::kernel_code_segment());
|
||||||
tss_selector = gdt.add_entry(gdt::Descriptor::tss_segment(&tss));
|
tss_selector = gdt.add_entry(gdt::Descriptor::tss_segment(&tss));
|
||||||
println!("cs: {:?}", code_selector);
|
|
||||||
gdt
|
gdt
|
||||||
});
|
});
|
||||||
|
|
||||||
println!("0 upper: {:#x}", gdt.table[0] as u32);
|
println!("gdt 0 upper: {:#x}", gdt.table[0] as u32);
|
||||||
println!("0 lower: {:#x}", gdt.table[0] >> 32 as u32);
|
println!("gdt 0 lower: {:#x}", gdt.table[0] >> 32 as u32);
|
||||||
println!("1 upper: {:#x}", gdt.table[1] as u32);
|
println!("gdt 1 upper: {:#x}", gdt.table[1] as u32);
|
||||||
println!("1 lower: {:#x}", gdt.table[1] >> 32 as u32);
|
println!("gdt 1 lower: {:#x}", gdt.table[1] >> 32 as u32);
|
||||||
println!("2 upper: {:#x}", gdt.table[2] as u32);
|
println!("gdt 2 upper: {:#x}", gdt.table[2] as u32);
|
||||||
println!("2 lower: {:#x}", gdt.table[2] >> 32 as u32);
|
println!("gdt 2 lower: {:#x}", gdt.table[2] >> 32 as u32);
|
||||||
println!("3 upper: {:#x}", gdt.table[3] as u32);
|
println!("gdt 3 upper: {:#x}", gdt.table[3] as u32);
|
||||||
println!("3 lower: {:#x}", gdt.table[3] >> 32 as u32);
|
println!("gdt 3 lower: {:#x}", gdt.table[3] >> 32 as u32);
|
||||||
flush!();
|
flush!();
|
||||||
|
|
||||||
gdt.load();
|
gdt.load();
|
||||||
|
|
|
||||||
|
|
@ -12,8 +12,6 @@ x86_start:
|
||||||
mov gs, ax
|
mov gs, ax
|
||||||
|
|
||||||
call x86_rust_start
|
call x86_rust_start
|
||||||
|
|
||||||
cli ; clear interrupt
|
|
||||||
HALT:
|
HALT:
|
||||||
hlt
|
hlt
|
||||||
jmp HALT
|
jmp HALT
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue