|
Kintsugi OS 0.5.0
x86 Monolithic OS
|
drivers/keyboard.c: scan code set 1 и очередь на 127 событий; IRQ не печатает и не выполняет команды. Переполнение отбрасывает новое событие.shell/line_editor.c: строка до 255 байт, курсор, история на 16 строк.shell/completion.c: дополнение команд из реестра и имён из корня FAT12.shell/shell.c: разбор строки, реестр, выполнение и код завершения.shell/commands_{system,fs,diag,misc}.c: обработчики и метаданные команд.drivers/terminal.c: вывод и прокрутка, без разбора команд.Добавление команды: обработчик int run(int argc, char** argv) и запись в массиве модуля: имя, категория, синтаксис, описание, обработчик. Справка и дополнение используют тот же реестр. Массив завершается { 0 }.
Коды: SHELL_OK=0, SHELL_ERROR=1, SHELL_USAGE=2, SHELL_NOT_FOUND=127. status показывает предыдущий код, сама завершается успешно. Пустая строка сохраняет код. Ошибки разбора не выполняют команду.
Одинарные кавычки сохраняют текст буквально. Двойные кавычки объединяют текст, обратная косая черта экранирует следующий символ вне одинарных кавычек. Соседние фрагменты объединяются: ab" cd" — один аргумент. Пустые кавычки создают пустой аргумент. Максимум — 32 аргумента, включая имя команды. Нет переменных, подстановок, перенаправлений и конвейеров.
Tab дополняет простой токен до общего префикса. Для аргументов используются файлы корня, допустим ведущий /. Вложенные пути и дополнение в кавычках или с экранированием пока не поддерживаются. Имена FAT12 — короткие 8.3. Ctrl+C отменяет редактируемую строку, но не прерывает выполняющуюся команду.
malloc возвращает ID и адрес диагностического блока; free принимает ID, а не произвольный адрес. load больше не пишет по произвольному адресу: его буфер принадлежит команде и заменяется следующим успешным load.
COM1: 115200, 8N1, ограниченное ожидание передатчика. make run QEMU_FLAGS="-serial file:serial.log" сохраняет сообщения загрузки.
panic(message, registers) отключает IRQ, печатает в COM1 и напрямую в VGA, затем останавливает CPU навсегда. Исключения добавляют вектор, код ошибки, EIP/CS/EFLAGS, CR2 и общие регистры. Assertions и старые panic-обёртки направлены в этот же обработчик. Стек вызовов пока не разворачивается.
Для проверки: panic confirm — явный panic; fault confirm — настоящий UD2 с сохранением регистров исключения. Обе команды намеренно останавливают ОС.
make test проверяет эти случаи в отдельных QEMU, а также редактирование, историю, дополнение, кавычки, статусы и сохранение файлов после reset.