prettier asm

This commit is contained in:
Jack Halford 2018-04-12 18:06:50 +02:00
parent fd0915048d
commit ffcb85dd5b
3 changed files with 18 additions and 16 deletions

View file

@ -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

View file

@ -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();

View file

@ -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