Keyboard handling working

This commit is contained in:
Fergal Moran
2020-06-08 20:09:49 +01:00
parent ea7e6ea4ee
commit 917efbf48b
12 changed files with 698 additions and 64 deletions

View File

@@ -8,40 +8,10 @@
#include "../include/gdt.h"
#include "../include/interrupts.h"
#include "../include/keyboard.h"
#include "../include/stdio.h"
#include "../include/types.h"
void printf(char* str) {
static uint16_t* VideoMemory = (uint16_t*)0xb8000;
static uint8_t x = 0, y = 0;
for (int i = 0; str[i] != '\0'; ++i) {
switch (str[i]) {
case '\n':
y++;
x = 0;
break;
default:
VideoMemory[80 * y + x] = (VideoMemory[80 * y + x] & 0xFF00) | str[i];
x++;
break;
}
//line feed after 80 chars (terminal width)
if (x >= 80) {
y++;
x = 0;
}
//we've reached max screen rows
if (y > 25) {
for (y = 0; y < 25; y++) {
for (x - 0; x < 80; x++) {
VideoMemory[80 * y + x] = (VideoMemory[80 * y + x] & 0xFF00) | ' ';
}
}
}
}
}
typedef void (*constructor)();
extern "C" constructor start_ctors;
extern "C" constructor end_ctors;
@@ -51,13 +21,11 @@ extern "C" void call_constructors() {
}
extern "C" void ferglos_Main(const void* multiboot_structure, uint32_t /*mb_mag*/) {
printf("Welcome to FerglOS v0.0.2!\n");
printf("Hitler blinks.");
printf("Welcome to FerglOS v0.0.2!\n\n");
GlobalDescriptorTable gdt;
InterruptManager interrupts(&gdt);
//instantiate hardware in here somewhere
KeyboardDriver keyboard(&interrupts);
interrupts.Activate();