Newer
Older
tree-os / src / kernel / kernel.c
#include <alloc.h>
#include <cpuid.h>
#include <devices.h>
#include <fileSystem.h>
#include <message.h>
#include <osTasks.h>
#include <paging.h>
#include <stdint.h>
#include <stdio.h>
#include <task.h>
#include <tree-os.h>

extern uint32_t kernelEnd;

void kernelMain() {
    initializePaging();
    initOSTasks();
    currentTask->timerTicks = 1000;
    currentTask->ticksLeft = 1000;
    drawLogo();
    printCPUData();
    setupDevices();
    while (1) {
        for (Message *message = popBeginning(&currentTask->messages); message;
             message = popBeginning(&currentTask->messages)) {
            switch (message->type) {
            case KEYBOARD_CHAR:
                printf("%c", message->data);
                break;
            case KEYBOARD_STRING:
                printf("%s", message->data);
                break;
            case TIMER_UPDATE:
                printf("\e[s\e[Htime since power on: %i seconds\e[u",
                       (uint32_t)message->data / 1000);
            }
            free(message);
        }
        yield();
    }
}