You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
cpuid: логика CPUID вынесена в отдельный модуль libc/cpuid, добавлено
чтение произвольного суб-листа (cpuid_raw), проверка поддержки TSC,
64-битный замер частоты и защита от переполнения при расчёте размера
кэша; --raw теперь строго разбирает число и отвергает мусор в аргументе
info: использует общий cpuid_get_brand с откатом на vendor и имеет
защиту от пустого brand
font: команда не запускается в текстовом режиме и выдаёт понятную ошибку
Системные улучшения
libc: util.c разбит на независимые модули, string, memory, number, format, hash, random, timer, interrupt_state, cpuid
CPUID: таблица legacy-брендов для старых CPU (486, Pentium, K6, Cyrix,
WinChip, Crusoe и др.)
Сборка: scripts/build.py переписан, параллельная компиляция в
несколько потоков (-j), цветной прогресс-бар, флаги --clean и --no-programs
Загрузчик: проверка поддержки EDD/LBA (INT 13h AH=41h), три попытки
чтения stage2 со сбросом диска, вывод кода ошибки в hex и корректный hlt-цикл вместо зависания
CawFS: валидация имён файлов и каталогов (запрет /, управляющих
символов, ./..); переименование каталога обновляет пути всех
вложенных записей; запись файла сначала размещает новую цепочку
кластеров и только потом освобождает старую
Графика: раздельное масштабирование по X и Y (screen_set_font_scale_xy),
отдельная установка межстрочного интервала (screen_set_line_gap),
сохранение вертикального масштаба в стеке шрифтов
BSOD: в графическом режиме используется шрифт 8x8 с раздельным
масштабом (3:2 по X, 2:1 по Y) и увеличенным интервалом строк
vsnprintf: упрощён разбор аргументов, убраны лишние va_copy,
добавлены проверки границ для %c и %u
Критические фиксы
format.c: %u больше не сбрасывает индекс буфера (затенённая
переменная i) и не портит строку при смешивании с другими
спецификаторами
fs.c: защита от зацикливания при чтении файла (cluster == 0,
счётчик шагов) и при разборе цепочек в fs_format; при нехватке места
неудачная запись не уничтожает старое содержимое файла; переименование
каталога больше не оставляет вложенные записи с несуществующим путём
screen.c: курсор ограничивается границами экрана, позиционируется по
низу ячейки и сбрасывается при перерисовке области или очистке экрана,
что убирает артефакты и застрявший курсор
boot.asm: при отсутствии LBA или ошибке чтения выводится код сбоя,
раньше загрузка просто зависала без диагностики
cpuid.c: неверный аргумент --raw больше не парсится как leaf 0;
топология читается с корректным суб-листом (0xB/1), а не через
подстановку в EAX; замер частоты проверяет наличие TSC и использует
64-битный счётчик
idt.c: BSOD в графическом режиме больше не использует настройки
шрифта обычной консоли
info.c: на старых процессорах без extended CPUID больше не выводится
пустое имя CPU, показывается legacy-название или vendor