Вынос выхода из симуляции в отдельную функцию

This commit is contained in:
Aren 2023-12-15 19:21:27 +03:00
parent 481dcb5ab8
commit 02ba9d199b
2 changed files with 25 additions and 18 deletions

View File

@ -19,10 +19,13 @@ extern uint32_t width;
static void isr_local( ) {
if (test_color >= 0xFFFFFF) { test_color = 0x00D000; }
uint32_t last = fb_get_text_color( );
fb_set_text_color(test_color);
fb_printf_at(SCREEN_WIDTH - 6 * 7, 0, "БМПОС");
fb_set_text_color(last);
count++;
test_color += 0x010101;
}

View File

@ -1,13 +1,6 @@
#include <system.h>
static void handler( ) {
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"
static inline void virt_exit( ) {
fb_printf("Выход для Bochs\n");
outw(0xB004, 0x2000);
@ -19,17 +12,28 @@ static void handler( ) {
fb_printf("Выход для облачного гипервизора\n");
outw(0x600, 0x34);
break;
}
static void handler( ) {
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 0x01: virt_exit( ); break; // Клавиша "ESCAPE"
case 0x4F: // Клавиша "END"
fb_printf("Вызов прерывания переключения задач!\n");
asm volatile("int $32");
break;
default: break;
}
uint8_t status = inb(0x61);
status |= 1;
uint8_t status = inb(0x61) |= 1;
outb(0x61, status);
}