diff options
Diffstat (limited to '')
-rw-r--r-- | kernel/src/start.asm | 135 |
1 files changed, 0 insertions, 135 deletions
diff --git a/kernel/src/start.asm b/kernel/src/start.asm deleted file mode 100644 index c01cbaa..0000000 --- a/kernel/src/start.asm +++ /dev/null @@ -1,135 +0,0 @@ -global start -extern kernel_boot -extern kernel_main -extern kernel_start -extern kernel_end -bits 32 - -; base, limit, access, flags -%macro gdt_entry 4 - db %2 & 0xff - db (%2 >> 8) & 0xff - db %1 & 0xff - db (%1 >> 8) & 0xff - db (%1 >> 16) & 0xff - db %3 - db ((%2 >> 16) & 0x0f) | (%4 << 4) - db (%1 >> 24) & 0xff -%endmacro - -MAGIC equ 0xe85250d6 -FLAGS equ 0 -LENGTH equ mb_end - mb_start -CHECKSUM equ -(MAGIC + LENGTH) - -VGABUF equ 0x000B8000 -KRNMAP equ 0xC0000000 - -section .multiboot.data -align 8 -mb_start: -dd MAGIC -dd FLAGS -dd LENGTH -dd CHECKSUM -dw 0 -dw 0 -dd 8 -mb_end: - -section .rodata -align 16 -gdt_start: -gdt_entry 0, 0, 0, 0 -gdt_entry 0, 0xFFFFF, 0x9A, 0xC -gdt_entry 0, 0xFFFFF, 0x92, 0xC -gdt_end: -gdt_descriptor: - dw gdt_end - gdt_start - 1 - dd gdt_start - -section .bootstrap_stack -align 16 -stack_start: -resb 16384 ; 16 KiB -stack_end: - -section .bss -align 4096 -page_directory: -resb 4096 -page_table1: -resb 4096 - -section .multiboot.text -align 8 -start: - - ; push ebx - ; call kernel_boot - ; pop eax - - mov edi, page_table1 - KRNMAP - mov esi, 0 - mov ecx, 1023 - -paging_cmp: - cmp esi, kernel_start - jl paging_add - cmp esi, kernel_end - KRNMAP - jge paging_map - - mov edx, esi - or edx, 0x003 - mov [edi], edx - -paging_add: - add esi, 4096 - add edi, 4 - loop paging_cmp - -paging_map: - mov dword [page_table1 - KRNMAP + 1023 * 4], VGABUF | 0x003 - mov dword [page_directory - KRNMAP + 0], page_table1 - KRNMAP + 0x003 - mov dword [page_directory - KRNMAP + 768 * 4], page_table1 - KRNMAP + 0x003 - - mov ecx, page_directory - KRNMAP - mov cr3, ecx - - mov ecx, cr0 - or ecx, 0x80010000 - mov cr0, ecx - - lea ecx, load_gdt - jmp near ecx - -section .text -align 8 -load_gdt: - cli - lgdt [gdt_descriptor] - mov eax, cr0 - or al, 1 - mov cr0, eax - jmp 0x08:load_kernel - -load_kernel: - - mov dword [page_directory], 0 - mov ecx, cr3 - mov cr3, ecx - - mov ax, 0x10 - mov ds, ax - mov ss, ax - mov es, ax - mov fs, ax - mov gs, ax - mov esp, stack_end - mov ebp, stack_end - sti - call kernel_main - cli -halt: - hlt - jmp halt |