Skip to content

Commit e3c16af

Browse files
committed
update readme
1 parent 8885762 commit e3c16af

3 files changed

Lines changed: 62 additions & 12 deletions

File tree

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
commit 88857627fa38095275cd92352038d99a6e325a43
2+
Author: Alexeev Bronislav <alexeev.dev@mail.ru>
3+
Date: Mon Feb 9 07:00:24 2026 +0700
4+
5+
create logical terminal screen and support scrolling, fix 54-sectors error, fix FS
6+
17
commit c9d2bc3d3d99a196c42dbee0672a5855035c7a58
28
Author: Alexeev Bronislav <alexeev.dev@mail.ru>
39
Date: Sun Feb 8 21:22:36 2026 +0700

README.md

Lines changed: 54 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ KintsugiOS — это минималистичная x86 операционна
2929
> [!CAUTION]
3030
> KintsugiOS еще в активной стадии разработки и многие решения не финальные или нестабильные.
3131
32-
> Также я занимаюсь [переводом OSDEV-Notes](https://github.com/alexeev-prog/Osdev-Notes-RU)
32+
> Также я занимаюсь [переводом OSDEV-Notes](https://github.com/alexeev-prog/Osdev-Notes-RU)
3333
3434
![](https://raw.githubusercontent.com/alexeev-prog/KintsugiOS/refs/heads/main/gallery/screenshot.png)
3535

@@ -68,11 +68,18 @@ KintsugiOS — это минималистичная x86 операционна
6868
- Автоматическая прокрутка при заполнении экрана
6969
- Позиционирование курсора через порты 0x3D4/0x3D5
7070
- Функции: kprint(), kprint_at(), kprint_colored()
71+
- **Терминальный слой (terminal.h/terminal.c)** — логическая абстракция над экраном
72+
- Виртуальный буфер 80x200 символов с атрибутами
73+
- Поддержка автоскролла и ручной прокрутки
74+
- Отложенный рендеринг (dirty flag)
75+
- Функции для работы с вводом: backspace, enter, стрелки
76+
- Управление цветом и позицией курсора
7177
- Клавиатура (PS/2) с обработкой модификаторов (Shift, Ctrl, Alt, Caps Lock)
7278
- Обработка скан-кодов через порт 0x60
7379
- Таблицы символов для верхнего/нижнего регистра
7480
- Поддержка backspace, enter, специальных комбинаций (Ctrl+C)
7581
- Состояния модификаторов: shift_pressed, ctrl_pressed, alt_pressed, caps_lock
82+
- Интеграция с терминальным слоем для обработки стрелок и модификаторов
7683
- Таймер с программными прерываниями
7784
- Настройка PIT на частоту 50 Гц
7885
- Глобальный счётчик тиков
@@ -224,10 +231,11 @@ KintsugiOS — это минималистичная x86 операционна
224231
- Аллокатор кучи с best-fit алгоритмом
225232
- Разделение и слияние блоков
226233
- Диагностика и отладка памяти
227-
- [x] Чувствительность к регистру
228-
- Обработка Caps Lock состояния
229-
- Таблицы символов для обоих регистров
230-
- Корректная работа модификаторов
234+
- [x] Терминальный слой абстракции
235+
- Виртуальный буфер 80x200 символов
236+
- Отложенный рендеринг
237+
- Управление прокруткой и вводом
238+
- Интеграция с драйверами клавиатуры и экрана
231239
- [x] Драйвер ATA PIO
232240
- LBA-адресация 28-бит
233241
- Идентификация устройств
@@ -242,6 +250,23 @@ KintsugiOS — это минималистичная x86 операционна
242250
- Интеграция с файловой системой
243251
- Управление памятью и системой
244252

253+
## Архитектурные изменения
254+
255+
### Терминальный слой
256+
В системе появился новый уровень абстракции — терминальный слой (`terminal.h/terminal.c`). Это логический слой между низкоуровневым доступом к видеопамяти и высокоуровневыми функциями ввода-вывода ядра. Ключевые преимущества:
257+
258+
- **Виртуальный буфер**: Теперь экран — это лишь окно в логический буфер размером 80x200 символов, что позволяет реализовать прокрутку истории.
259+
- **Отложенный рендеринг**: Обновление экрана происходит только когда это необходимо (флаг `dirty`), что оптимизирует производительность.
260+
- **Унифицированный API**: Все функции вывода (`kprint`, `kprintln`, `kprint_colored`) теперь используют единый интерфейс, который может работать либо напрямую с экраном, либо через терминальный слой.
261+
- **Управление вводом**: Добавлены функции для обработки специальных клавиш (backspace, enter, стрелки) в контексте терминала.
262+
263+
### Система вывода
264+
Реализован механизм переключения между режимами вывода (`screen_output_switch.h`):
265+
- `OUTPUT_MODE_SCREEN` — прямой вывод в видеопамять (совместимость со старым кодом)
266+
- `OUTPUT_MODE_TERMINAL` — вывод через терминальный слой
267+
268+
Это позволяет постепенно мигрировать код на использование новой системы без полного переписывания.
269+
245270
## Требования
246271

247272
Для сборки и запуска KintsugiOS необходим следующий инструментарий:
@@ -252,6 +277,8 @@ KintsugiOS — это минималистичная x86 операционна
252277
- GDB для отладки
253278
- MTools и Xorriso
254279
- QEMU или Bochs
280+
- Make
281+
- Python
255282

256283
Проверить готовность окружения можно скриптом:
257284
```bash
@@ -262,7 +289,7 @@ KintsugiOS — это минималистичная x86 операционна
262289

263290
### Базовая сборка
264291
```bash
265-
make
292+
make quick
266293
```
267294

268295
### Создание образа диска (hdd) и запуск в QEMU
@@ -275,6 +302,11 @@ make run
275302
make run_fda
276303
```
277304

305+
### Создание образа диска флоппи с fat12
306+
```bash
307+
make run_fat12
308+
```
309+
278310
### Очистка проекта
279311
```bash
280312
make clean # Удаление бинарных файлов
@@ -297,15 +329,15 @@ make debug_fda # образ диска fda
297329
Загрузчик KintsugiOS — это критически важный компонент, написанный на ассемблере, который выполняет следующие задачи:
298330

299331
+ Инициализация и переход в защищенный режим: Загрузчик начинает работу в реальном режиме (16-бит), инициализирует стек, загружает GDT (Глобальную таблицу дескрипторов) и переключает процессор в 32-битный защищенный режим.
300-
+ Загрузка ядра: С помощью функций BIOS загрузчик считывает ядро с диска в память по адресу 0x1000.
332+
+ Загрузка ядра: С помощью функций BIOS загрузчик считывает ядро с диска в память по адресу 0x007e00.
301333
+ Подготовка к выполнению ядра: После перехода в защищенный режим управление передается ядру.
302334

303335
Компоненты загрузчика:
304336

305337
+ bootsector.asm — основной загрузочный сектор, который загружается BIOS по адресу 0x7c00. Устанавливает стек, загружает ядро и переключается в защищенный режим.
306338
+ diskload.asm — содержит функцию disk_load для чтения секторов с диска с помощью прерываний BIOS.
307339
+ gdt.asm — определяет GDT (Глобальную таблицу дескрипторов) для защищенного режима, включая дескрипторы для сегментов кода и данных.
308-
+ switch_to32.asm — код переключения в защищенный режим, включая отключение прерываний, загрузку GDT и установку бита в регистре cr0.
340+
+ switch_to32.asm — код переключения в защищенном режиме, включая отключение прерываний, загрузку GDT и установку бита в регистре cr0.
309341
+ puts_chars.asm и puts_chars32.asm — функции для вывода строк в реальном и защищенном режимах соответственно. В защищенном режиме вывод осуществляется напрямую в видеопамять VGA.
310342
+ puts_hex.asm — функция для вывода чисел в шестнадцатеричном формате (используется для отладки).
311343
+ kernel_entry.asm — точка входа для ядра, которая вызывает функцию kmain из ядра.
@@ -314,9 +346,9 @@ make debug_fda # образ диска fda
314346

315347
1. BIOS загружает первый сектор диска (512 байт) по адресу 0x7c00 и передает управление на его начало.
316348
2. Загрузчик инициализирует стек и выводит сообщение о запуске в реальном режиме.
317-
3. Загрузчик загружает ядро с диска в память по адресу 0x1000, используя функции BIOS.
349+
3. Загрузчик загружает ядро с диска в память по адресу 0x007e00, используя функции BIOS.
318350
4. Загрузчик загружает GDT и переключает процессор в защищенный режим.
319-
5. В защищенном режиме загрузчик выводит сообщение об успешном переходе и передает управление ядру по адресу 0x1000.
351+
5. В защищенном режиме загрузчик выводит сообщение об успешном переходе и передает управление ядру по адресу 0x007e00.
320352

321353
## Команды оболочки
322354

@@ -328,13 +360,18 @@ KintsugiOS включает оболочку "Keramika Shell" со следую
328360
- `free <address>` - освобождение памяти
329361
- `info` - информация о системе
330362
- `memdump` - дамп памяти
331-
- `echp <text>` - вывод текста
363+
- `echo <text>` - вывод текста
332364
- `help` - справка по командам
333-
- `sleep <ms>` - ожидать N секунд
365+
- `sleep <ms>` - ожидать N миллисекунд
334366
- `reboot` - перезагрузка
335367
- `rand <seed>` - генерация случайного числа по алгоритму xorshift32
336368
- `randrange <seed> <min> <max>` - генерация случайного числа в диапазоне при помощи xorshift32
337369
- `binpow <base> <exponent>` - бинарное возведение в степень
370+
- `ls` - список файлов в корневой директории FAT12
371+
- `cat <filename>` - вывод содержимого файла
372+
- `load <filename> [address]` - загрузка файла в память по адресу (по умолчанию 0x007e0000)
373+
- `fat12info` - информация о файловой системе FAT12
374+
- `qemushutdown` - выключение QEMU через порт 0x604
338375

339376
## Kintsugi Kernel LibC
340377
KKLibc — это собственная реализация стандартной библиотеки языка C, разработанная специально для нужд ядра Kintsugi OS. В отличие от пользовательских libc (вроде glibc), она тесно интегрирована с архитектурой ядра, лишена избыточности и содержит только самые необходимые функции для работы в пространстве ядра.
@@ -385,6 +422,11 @@ KKLibc является живым, развивающимся проектом
385422
+ **Новые модули:** По мере необходимости будут добавляться новые структуры данных (связные списки, хэш-таблицы), функции для работы со строками в кодировке UTF-8 и другие утилиты, требуемые развивающейся операционной системой.
386423

387424
### Для ядра
425+
- **Улучшение терминального слоя:**
426+
- Реализация истории команд
427+
- Поддержка вкладок и нескольких виртуальных терминалов
428+
- Цветовая палитра и темы
429+
- Поддержка мыши в текстовом режиме
388430
- **Файловые системы:** Реализация FAT12 и ext2
389431
- **Многозадачность:** Планировщик задач и механизмы IPC
390432
- **Пользовательский режим:** Разграничение привилегий

check-env.sh

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,8 @@ echo "Utilities:"
7676
check_tool "GDB" "gdb --version"
7777
check_tool "MTools" "mtools --version"
7878
check_tool "Xorriso" "xorriso --version"
79+
check_tool "Python 3" "python3 --version"
80+
check_tool "Make" "make --version"
7981

8082
# Summary
8183
echo

0 commit comments

Comments
 (0)