diff --git a/configs/limine.cfg b/configs/limine.cfg index 059c044..6c6cda5 100644 --- a/configs/limine.cfg +++ b/configs/limine.cfg @@ -30,5 +30,8 @@ TERM_WALLPAPER=boot:///boot.jpg MODULE_PATH=boot:///mod/pci.ko MODULE_CMDLINE=[MOD]pci.ko + MODULE_PATH=boot:///mod/ps2.ko + MODULE_CMDLINE=[MOD]ps2.ko + MODULE_PATH=boot:///boot.tga MODULE_CMDLINE=[BOOTIMG] \ No newline at end of file diff --git a/include/version.h b/include/version.h index c158d78..c987017 100644 --- a/include/version.h +++ b/include/version.h @@ -1,3 +1,3 @@ #define VERSION_MAJOR 0 #define VERSION_MINOR 1 -#define VERSION_BUILD 877 +#define VERSION_BUILD 891 diff --git a/modules/ps2/build.sh b/modules/ps2/build.sh old mode 100644 new mode 100755 diff --git a/modules/ps2/main.c b/modules/ps2/main.c index fd23faa..75f29dc 100644 --- a/modules/ps2/main.c +++ b/modules/ps2/main.c @@ -1,36 +1,37 @@ #include static void handler( ) { - for (;;) { - if (!(inb(0x64) & 1)) { continue; } - uint64_t byte = inb(0x60); - switch (byte) { - case 0x1: // Клавиша "ESCAPE" - fb_printf("Выход для Bochs\n"); - outw(0xB004, 0x2000); + fb_printf("Получено прерывание, обработка\n"); + while (!(inb(0x64) & 1)) {} + uint64_t byte = inb(0x60); + if (byte == 0) { return; } + fb_printf("Символ: %c, %u, %x\n", byte, byte, byte); + switch (byte) { + case 0x1: // Клавиша "ESCAPE" + fb_printf("Выход для Bochs\n"); + outw(0xB004, 0x2000); - fb_printf("Выход для Qemu\n"); - outw(0x604, 0x2000); + fb_printf("Выход для Qemu\n"); + outw(0x604, 0x2000); - fb_printf("Выход для Virtualbox\n"); - outw(0x4004, 0x3400); + fb_printf("Выход для Virtualbox\n"); + outw(0x4004, 0x3400); - fb_printf("Выход для облачного гипервизора\n"); - outw(0x600, 0x34); - break; - case 0x4F: // Клавиша "END" - fb_printf("Вызов прерывания переключения задач!\n"); - asm volatile("int $32"); - break; - default: break; - } - - uint8_t status = inb(0x61); - - status |= 1; - - outb(0x61, status); + fb_printf("Выход для облачного гипервизора\n"); + outw(0x600, 0x34); + break; + case 0x4F: // Клавиша "END" + fb_printf("Вызов прерывания переключения задач!\n"); + asm volatile("int $32"); + break; + default: break; } + + uint8_t status = inb(0x61); + + status |= 1; + + outb(0x61, status); } module_info_t __attribute__((section(".minit"))) init(env_t *env) { @@ -44,5 +45,6 @@ module_info_t __attribute__((section(".minit"))) init(env_t *env) { .err_code = 0, .module_id = 0, .irq = 33, - .irq_handler = handler }; + .irq_handler = handler, + .get_func = 0 }; } \ No newline at end of file