Reorganize kernel code

This commit is contained in:
Quinten Kock 2020-11-30 02:56:55 +01:00
parent 1f86052a87
commit 1fc1c0150c
7 changed files with 76 additions and 52 deletions

View File

@ -6,7 +6,7 @@ LD = ld -m elf_x86_64
QEMU = qemu-system-x86_64
QEMUFLAGS = -m 1G -enable-kvm -cpu host
LDINTERNALFLAGS := -Tlinker.ld
INTERNALCFLAGS := -I../ext/limine/stivale \
INTERNALCFLAGS := -I../ext/limine/stivale -mcmodel=kernel
CFILES := $(shell find src -type f -name '*.c')
HFILES := $(shell find src -type f -name '*.h')

View File

@ -0,0 +1,28 @@
#include <stivale2.h>
#include <stdint.h>
#include <stddef.h>
#include "main.h"
static uint8_t stack[4096] = {0};
void stivale2_main(struct stivale2_struct *info);
struct stivale2_header_tag_smp smp_request = {
.tag = {
.identifier = STIVALE2_HEADER_TAG_SMP_ID,
.next = 0
},
.flags = 0
};
__attribute__((section(".stivale2hdr"), used))
struct stivale2_header header2 = {
.entry_point = (uint64_t)stivale2_main,
.stack = (uintptr_t)stack + sizeof(stack),
.flags = 0,
.tags = (uint64_t)&smp_request
};
void stivale2_main(struct stivale2_struct *info) {
kmain();
}

View File

@ -1,51 +0,0 @@
#include <stivale2.h>
#include <stdint.h>
#include <stddef.h>
#define VGA_ADDRESS 0xb8000
#define VGA_COLOR(character, color) ((uint16_t) (character) | (uint16_t) (color) << 8)
#define VGA_BLACK 0
#define VGA_BLUE 1
#define VGA_GREEN 2
#define VGA_CYAN 3
#define VGA_RED 4
#define VGA_PURPLE 5
#define VGA_BROWN 6
#define VGA_GRAY 7
#define VGA_DARK_GRAY 8
#define VGA_LIGHT_BLUE 9
#define VGA_LIGH_GREEN 10
#define VGA_LIGHT_CYAN 11
#define VGA_LIGHT_RED 12
#define VGA_LIGHT_PURPLE 13
#define VGA_YELLOW 14
#define VGA_WHITE 15
static uint8_t stack[4096] = {0};
void stivale2_main(struct stivale2_struct *info);
struct stivale2_header_tag_smp smp_request = {
.tag = {
.identifier = STIVALE2_HEADER_TAG_SMP_ID,
.next = 0
},
.flags = 0
};
__attribute__((section(".stivale2hdr"), used))
struct stivale2_header header2 = {
.entry_point = (uint64_t)stivale2_main,
.stack = (uintptr_t)stack + sizeof(stack),
.flags = 0,
.tags = (uint64_t)&smp_request
};
void stivale2_main(struct stivale2_struct *info) {
volatile uint16_t *vga_buffer = (uint16_t*)VGA_ADDRESS;
vga_buffer[0] = VGA_COLOR('h', VGA_GREEN);
vga_buffer[1] = VGA_COLOR('e', VGA_GREEN);
vga_buffer[2] = VGA_COLOR('l', VGA_GREEN);
vga_buffer[3] = VGA_COLOR('l', VGA_GREEN);
vga_buffer[4] = VGA_COLOR('o', VGA_GREEN);
asm volatile ("hlt");
}

7
kernel/src/main.c Normal file
View File

@ -0,0 +1,7 @@
#include "vga.h"
void kmain() {
vga_puts("hello!");
vga_putc('h');
asm volatile ("hlt");
}

1
kernel/src/main.h Normal file
View File

@ -0,0 +1 @@
void kmain();

20
kernel/src/vga.c Normal file
View File

@ -0,0 +1,20 @@
#include <stdint.h>
#include "vga.h"
#define VGA_ADDRESS 0xb8000
static uint8_t current_color = VGA_WHITE;
uint16_t *vga_buffer = (uint16_t*)VGA_ADDRESS;
void vga_putc(char c) {
*(vga_buffer++) = (uint16_t)c | (uint16_t)(current_color) << 8;
}
void vga_puts(char *c) {
char cur = *(c++);
while(cur != '\0') {
vga_putc(cur);
cur = *(c++);
}
}

19
kernel/src/vga.h Normal file
View File

@ -0,0 +1,19 @@
#define VGA_BLACK 0
#define VGA_BLUE 1
#define VGA_GREEN 2
#define VGA_CYAN 3
#define VGA_RED 4
#define VGA_PURPLE 5
#define VGA_BROWN 6
#define VGA_GRAY 7
#define VGA_DARK_GRAY 8
#define VGA_LIGHT_BLUE 9
#define VGA_LIGH_GREEN 10
#define VGA_LIGHT_CYAN 11
#define VGA_LIGHT_RED 12
#define VGA_LIGHT_PURPLE 13
#define VGA_YELLOW 14
#define VGA_WHITE 15
void vga_putc(char c);
void vga_puts(char *c);