mirror of
https://github.com/0Nera/BMOSP.git
synced 2024-11-22 16:41:23 +03:00
Добавлен модуль PS/2
This commit is contained in:
parent
1f6eaf3ca0
commit
dc73ee66df
@ -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]
|
@ -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
0
modules/ps2/build.sh
Normal file → Executable 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 };
|
||||
}
|
Loading…
Reference in New Issue
Block a user