45 lines
1.1 KiB
C
45 lines
1.1 KiB
C
#include <sys.h>
|
|
#include <stdlib.h>
|
|
#include "bootinfo.h"
|
|
#include "drivers/keycodes.h"
|
|
#include "drivers/ps2ctrl.h"
|
|
#include "drivers/ps2kb.h"
|
|
#include "drivers/serial.h"
|
|
#include "panic.h"
|
|
#include "term.h"
|
|
#include "interrupt/pic.h"
|
|
#include "interrupt/idt.h"
|
|
|
|
extern void kmain(void* boot_info) {
|
|
term_clear();
|
|
term_setcol(0x0f);
|
|
puts("loading kernel\n");
|
|
bootinfo_load(boot_info);
|
|
puts("loaded boot info\n");
|
|
printf("cmdline: %s\n", bootinfo_get_cmdline());
|
|
idt_init();
|
|
puts("initialized idt\n");
|
|
pic_remap(PIC_REMAP_OFFSET);
|
|
puts("remapped pic\n");
|
|
serial_init();
|
|
puts("initialized serial\n");
|
|
ps2ctrl_init();
|
|
puts("enabled ps/2 controller\n");
|
|
ps2kb_init();
|
|
puts("enabled keyboard\n");
|
|
|
|
while(1) {
|
|
int_wait();
|
|
struct Keycode code = ps2kb_get();
|
|
if(code.key != KEY_NONE) {
|
|
if(code.flags & KC_FLAG_ERROR) {
|
|
printf("error: %X\n", code.key);
|
|
} else if(code.flags & KC_FLAG_KEY_DOWN) {
|
|
printf("pressed: %X\n", code.key);
|
|
} else {
|
|
printf("released: %X\n", code.key);
|
|
}
|
|
}
|
|
}
|
|
}
|