summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--kernel/main.c105
1 files changed, 4 insertions, 101 deletions
diff --git a/kernel/main.c b/kernel/main.c
index 47fcecd..5e6491c 100644
--- a/kernel/main.c
+++ b/kernel/main.c
@@ -1,6 +1,4 @@
-#include <stdbool.h>
-#include <stddef.h>
-#include <stdint.h>
+#include "video-vga.h"
/* Check if the compiler thinks you are targeting the wrong operating system. */
#if defined(__linux__)
@@ -10,105 +8,10 @@
#if !defined(__i386__)
#error "This kernel needs to be compiled with a ix86-elf compiler"
#endif
-
-/* Hardware text mode color constants. */
-enum vga_color {
- VGA_COLOR_BLACK = 0,
- VGA_COLOR_BLUE = 1,
- VGA_COLOR_GREEN = 2,
- VGA_COLOR_CYAN = 3,
- VGA_COLOR_RED = 4,
- VGA_COLOR_MAGENTA = 5,
- VGA_COLOR_BROWN = 6,
- VGA_COLOR_LIGHT_GREY = 7,
- VGA_COLOR_DARK_GREY = 8,
- VGA_COLOR_LIGHT_BLUE = 9,
- VGA_COLOR_LIGHT_GREEN = 10,
- VGA_COLOR_LIGHT_CYAN = 11,
- VGA_COLOR_LIGHT_RED = 12,
- VGA_COLOR_LIGHT_MAGENTA = 13,
- VGA_COLOR_LIGHT_BROWN = 14,
- VGA_COLOR_WHITE = 15
-};
-
-static const size_t VGA_WIDTH = 80;
-static const size_t VGA_HEIGHT = 25;
-
-size_t terminal_row;
-size_t terminal_column;
-uint8_t terminal_color;
-uint16_t *terminal_buffer;
-
-static uint8_t vga_entry_color(enum vga_color fg, enum vga_color bg)
-{
- return fg | bg << 4;
-}
-
-static uint16_t vga_entry(unsigned char uc, uint8_t color)
-{
- return (uint16_t) uc | (uint16_t) color << 8;
-}
-
-size_t strlen(const char* str)
-{
- size_t len = 0;
- while(str[len])
- len++;
- return len;
-}
-
-void terminal_initialize(void)
-{
- size_t x, y;
- terminal_row = 0;
- terminal_column = 0;
- terminal_color = vga_entry_color(VGA_COLOR_LIGHT_GREY, VGA_COLOR_BLACK);
- terminal_buffer = (uint16_t*) 0xB8000;
- for(y = 0; y < VGA_HEIGHT; y++) {
- for(x = 0; x < VGA_WIDTH; x++) {
- const size_t index = y * VGA_WIDTH + x;
- terminal_buffer[index] = vga_entry(' ', terminal_color);
- }
- }
-}
-
-void terminal_setcolor(uint8_t color)
-{
- terminal_color = color;
-}
-
-void terminal_putentryat(char c, uint8_t color, size_t x, size_t y)
-{
- const size_t index = y * VGA_WIDTH + x;
- terminal_buffer[index] = vga_entry(c, color);
-}
-
-void terminal_putchar(char c)
-{
- terminal_putentryat(c, terminal_color, terminal_column, terminal_row);
- if(++terminal_column == VGA_WIDTH) {
- terminal_column = 0;
- if(++terminal_row == VGA_HEIGHT)
- terminal_row = 0;
- }
-}
-
-void terminal_write(const char* data, size_t size)
-{
- size_t i;
- for(i = 0; i < size; i++)
- terminal_putchar(data[i]);
-}
-
-void terminal_writestring(const char* data)
-{
- terminal_write(data, strlen(data));
-}
-
void kernel_main(void)
{
- /* Initialize terminal interface */
- terminal_initialize();
+ /* Initialize VGA video hardware */
+ vga_init();
- terminal_writestring("Welcome to MFSOS!");
+ vga_print("Welcome to MFSOS!\n\t");
}