Files
Operator-system/kernel.c
2026-02-26 17:41:53 +00:00

70 lines
2.8 KiB
C

#include <efi.h>
#include "boot_info.h"
void kmain(BootInfo *Boot)
{
EFI_INPUT_KEY Key;
Boot->clear_screen();
Boot->set_attribute(EFI_TEXT_ATTR(EFI_LIGHTGREEN, EFI_BLACK));
Boot->print(L"================================================\n\r");
Boot->print(L" Welcome to Simple UEFI Operating System!\n\r");
Boot->print(L"================================================\n\r");
Boot->print(L"\n\r");
Boot->print(L"System Information:\n\r");
Boot->print(L" UEFI Firmware Vendor: %s\n\r", Boot->SystemTable->FirmwareVendor);
Boot->print(L" UEFI Firmware Revision: %d.%d\n\r",
Boot->SystemTable->FirmwareRevision >> 16,
Boot->SystemTable->FirmwareRevision & 0xFFFF);
Boot->print(L"\n\r");
Boot->print(L"Available Services:\n\r");
Boot->print(L" - Console Input/Output: Active\n\r");
Boot->print(L" - Runtime Services: Active\n\r");
Boot->print(L" - Boot Services: Active\n\r");
Boot->print(L"\n\r");
Boot->print(L"Commands:\n\r");
Boot->print(L" 'h' - Display help\n\r");
Boot->print(L" 'i' - Display system info\n\r");
Boot->print(L" 'c' - Clear screen\n\r");
Boot->print(L" 'q' - Shutdown\n\r");
Boot->print(L"\n\r");
Boot->print(L"Press a key to start...\n\r");
while (TRUE) {
if (EFI_ERROR(Boot->read_key(&Key))) {
continue;
}
if (Key.UnicodeChar == L'q' || Key.UnicodeChar == L'Q') {
Boot->print(L"\n\rShutting down...\n\r");
Boot->shutdown();
} else if (Key.UnicodeChar == L'h' || Key.UnicodeChar == L'H') {
Boot->print(L"\n\r=== Help ===\n\r");
Boot->print(L"This is a minimal UEFI operating system.\n\r");
Boot->print(L"It demonstrates basic UEFI functionality.\n\r");
Boot->print(L"\n\r");
} else if (Key.UnicodeChar == L'i' || Key.UnicodeChar == L'I') {
Boot->print(L"\n\r=== System Info ===\n\r");
Boot->print(L"Firmware Vendor: %s\n\r", Boot->SystemTable->FirmwareVendor);
Boot->print(L"Firmware Revision: %d.%d\n\r",
Boot->SystemTable->FirmwareRevision >> 16,
Boot->SystemTable->FirmwareRevision & 0xFFFF);
Boot->print(L"UEFI Specification: %d.%d\n\r",
Boot->SystemTable->Hdr.Revision >> 16,
Boot->SystemTable->Hdr.Revision & 0xFFFF);
Boot->print(L"\n\r");
} else if (Key.UnicodeChar == L'c' || Key.UnicodeChar == L'C') {
Boot->clear_screen();
Boot->print(L"Screen cleared. Press 'h' for help.\n\r");
} else if (Key.UnicodeChar >= 32 && Key.UnicodeChar < 127) {
Boot->print(L"%c", Key.UnicodeChar);
} else if (Key.UnicodeChar == L'\r') {
Boot->print(L"\n\r> ");
}
}
}