Добавлен модуль PS/2

This commit is contained in:
Aren 2023-12-15 18:00:33 +03:00
parent 1f6eaf3ca0
commit dc73ee66df
4 changed files with 33 additions and 28 deletions

View File

@ -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]

View File

@ -1,3 +1,3 @@
#define VERSION_MAJOR 0
#define VERSION_MINOR 1
#define VERSION_BUILD 877
#define VERSION_BUILD 891

0
modules/ps2/build.sh Normal file → Executable file
View File

View File

@ -1,36 +1,37 @@
#include <system.h>
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 };
}