Add limited print ability

This commit is contained in:
twistdroach
2022-11-18 23:26:12 -05:00
parent 9694d0987d
commit 878818c821
2 changed files with 59 additions and 1 deletions

@ -1,6 +1,61 @@
#include "kernel.h"
#include <stddef.h>
#include <stdint.h>
uint16_t terminal_make_char(char c, char color) {
return (color << 8) | c;
}
uint16_t* video_mem = 0;
uint16_t terminal_row = 0;
uint16_t terminal_col = 0;
void terminal_putchar(int x, int y, char c, char color) {
video_mem[(y * VGA_WIDTH) + x] = terminal_make_char(c, color);
}
void terminal_writechar(char c, char color) {
if (c == '\n') {
terminal_row += 1;
terminal_col = 0;
return;
}
terminal_putchar(terminal_col, terminal_row, c, color);
terminal_col += 1;
if (terminal_col >= VGA_WIDTH) {
terminal_col = 0;
terminal_row += 1;
}
}
void terminal_initialize() {
terminal_row = 0;
terminal_col = 0;
video_mem = (uint16_t*)(0xB8000);
for (int y=0; y < VGA_HEIGHT; y++) {
for (int x=0; x < VGA_WIDTH; x++) {
terminal_putchar(x, y, ' ', 0);
}
}
}
size_t strlen(const char* str) {
size_t len = 0;
while(str[len]) {
len++;
}
return len;
}
void print(const char* str) {
size_t len = strlen(str);
for (int i=0; i<len; i++) {
terminal_writechar(str[i], 15);
}
}
void kernel_main() {
terminal_initialize();
print("Hello World!\nAnother hello world!");
}

@ -1,6 +1,9 @@
#ifndef KERNEL_H
#define KERNEL_H
#define VGA_WIDTH 80
#define VGA_HEIGHT 20
void kernel_main();
#endif