Skip to content

v0.3.6

Latest

Choose a tag to compare

@TheCawa TheCawa released this 25 Oct 16:19

CawOS v0.3.6

Прокачанные команды

  • 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