Cleaning up and commenting

This commit is contained in:
Thomas Lovén 2017-11-18 16:23:22 +01:00
parent ab1a471857
commit 83f81b9a74
3 changed files with 23 additions and 3 deletions

View File

@ -54,17 +54,24 @@ _start:
mov ds, eax mov ds, eax
mov es, eax mov es, eax
//; Jump to kernel address space
movabs rax, offset upper_memory movabs rax, offset upper_memory
jmp rax jmp rax
upper_memory: upper_memory:
//; Move stack pointer to kernel space
mov rax, KERNEL_OFFSET mov rax, KERNEL_OFFSET
add rsp, rax add rsp, rax
//; Remove identity mapping
mov rax, 0 mov rax, 0
movabs [BootP4], rax movabs [BootP4], rax
//; Jump to kmain()
.extern kmain .extern kmain
movabs rax, offset kmain movabs rax, offset kmain
jmp rax call rax
hlt
jmp $

View File

@ -2,14 +2,14 @@
void clear_screen() void clear_screen()
{ {
unsigned char *vidmem = (void *)(0xB8000 + KERNEL_OFFSET); unsigned char *vidmem = P2V(0xB8000);
for(int i=0; i < 80*24*2; i++) for(int i=0; i < 80*24*2; i++)
*vidmem++ = 0; *vidmem++ = 0;
} }
void print_string(char *str) void print_string(char *str)
{ {
unsigned char *vidmem = (void *)(0xB8000 + KERNEL_OFFSET); unsigned char *vidmem = P2V(0xB8000);
while(*str) while(*str)
{ {
*vidmem++ = *str++; *vidmem++ = *str++;

View File

@ -1,6 +1,19 @@
#pragma once #pragma once
#define KERNEL_OFFSET 0xFFFFFF8000000000 #define KERNEL_OFFSET 0xFFFFFF8000000000
#ifdef __ASSEMBLER__
#define V2P(a) ((a) - KERNEL_OFFSET) #define V2P(a) ((a) - KERNEL_OFFSET)
#define P2V(a) ((a) + KERNEL_OFFSET)
#else
#include <stdint.h>
#define V2P(a) ((uintptr_t)(a) - KERNEL_OFFSET)
#define P2V(a) ((void *)((uintptr_t)(a) + KERNEL_OFFSET))
#endif
#define P1_OFFSET(a) (((a)>>12) & 0x1FF)
#define P2_OFFSET(a) (((a)>>21) & 0x1FF)
#define P3_OFFSET(a) (((a)>>30) & 0x1FF)
#define P4_OFFSET(a) (((a)>>39) & 0x1FF)
#define PAGE_PRESENT 0x001 #define PAGE_PRESENT 0x001
#define PAGE_WRITE 0x002 #define PAGE_WRITE 0x002