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
- Поддержка backspace, enter, специальных комбинаций (Ctrl+C)
75
81
- Состояния модификаторов: shift_pressed, ctrl_pressed, alt_pressed, caps_lock
82
+
- Интеграция с терминальным слоем для обработки стрелок и модификаторов
76
83
- Таймер с программными прерываниями
77
84
- Настройка PIT на частоту 50 Гц
78
85
- Глобальный счётчик тиков
@@ -224,10 +231,11 @@ KintsugiOS — это минималистичная x86 операционна
224
231
- Аллокатор кучи с best-fit алгоритмом
225
232
- Разделение и слияние блоков
226
233
- Диагностика и отладка памяти
227
-
-[x] Чувствительность к регистру
228
-
- Обработка Caps Lock состояния
229
-
- Таблицы символов для обоих регистров
230
-
- Корректная работа модификаторов
234
+
-[x] Терминальный слой абстракции
235
+
- Виртуальный буфер 80x200 символов
236
+
- Отложенный рендеринг
237
+
- Управление прокруткой и вводом
238
+
- Интеграция с драйверами клавиатуры и экрана
231
239
-[x] Драйвер ATA PIO
232
240
- LBA-адресация 28-бит
233
241
- Идентификация устройств
@@ -242,6 +250,23 @@ KintsugiOS — это минималистичная x86 операционна
242
250
- Интеграция с файловой системой
243
251
- Управление памятью и системой
244
252
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
+
245
270
## Требования
246
271
247
272
Для сборки и запуска KintsugiOS необходим следующий инструментарий:
@@ -252,6 +277,8 @@ KintsugiOS — это минималистичная x86 операционна
252
277
- GDB для отладки
253
278
- MTools и Xorriso
254
279
- QEMU или Bochs
280
+
- Make
281
+
- Python
255
282
256
283
Проверить готовность окружения можно скриптом:
257
284
```bash
@@ -262,7 +289,7 @@ KintsugiOS — это минималистичная x86 операционна
262
289
263
290
### Базовая сборка
264
291
```bash
265
-
make
292
+
make quick
266
293
```
267
294
268
295
### Создание образа диска (hdd) и запуск в QEMU
@@ -275,6 +302,11 @@ make run
275
302
make run_fda
276
303
```
277
304
305
+
### Создание образа диска флоппи с fat12
306
+
```bash
307
+
make run_fat12
308
+
```
309
+
278
310
### Очистка проекта
279
311
```bash
280
312
make clean # Удаление бинарных файлов
@@ -297,15 +329,15 @@ make debug_fda # образ диска fda
297
329
Загрузчик KintsugiOS — это критически важный компонент, написанный на ассемблере, который выполняет следующие задачи:
298
330
299
331
+ Инициализация и переход в защищенный режим: Загрузчик начинает работу в реальном режиме (16-бит), инициализирует стек, загружает GDT (Глобальную таблицу дескрипторов) и переключает процессор в 32-битный защищенный режим.
300
-
+ Загрузка ядра: С помощью функций BIOS загрузчик считывает ядро с диска в память по адресу 0x1000.
332
+
+ Загрузка ядра: С помощью функций BIOS загрузчик считывает ядро с диска в память по адресу 0x007e00.
301
333
+ Подготовка к выполнению ядра: После перехода в защищенный режим управление передается ядру.
302
334
303
335
Компоненты загрузчика:
304
336
305
337
+ bootsector.asm — основной загрузочный сектор, который загружается BIOS по адресу 0x7c00. Устанавливает стек, загружает ядро и переключается в защищенный режим.
306
338
+ diskload.asm — содержит функцию disk_load для чтения секторов с диска с помощью прерываний BIOS.
307
339
+ gdt.asm — определяет GDT (Глобальную таблицу дескрипторов) для защищенного режима, включая дескрипторы для сегментов кода и данных.
308
-
+ switch_to32.asm — код переключения в защищенный режим, включая отключение прерываний, загрузку GDT и установку бита в регистре cr0.
340
+
+ switch_to32.asm — код переключения в защищенном режиме, включая отключение прерываний, загрузку GDT и установку бита в регистре cr0.
309
341
+ puts_chars.asm и puts_chars32.asm — функции для вывода строк в реальном и защищенном режимах соответственно. В защищенном режиме вывод осуществляется напрямую в видеопамять VGA.
310
342
+ puts_hex.asm — функция для вывода чисел в шестнадцатеричном формате (используется для отладки).
311
343
+ kernel_entry.asm — точка входа для ядра, которая вызывает функцию kmain из ядра.
@@ -314,9 +346,9 @@ make debug_fda # образ диска fda
314
346
315
347
1. BIOS загружает первый сектор диска (512 байт) по адресу 0x7c00 и передает управление на его начало.
316
348
2. Загрузчик инициализирует стек и выводит сообщение о запуске в реальном режиме.
317
-
3. Загрузчик загружает ядро с диска в память по адресу 0x1000, используя функции BIOS.
349
+
3. Загрузчик загружает ядро с диска в память по адресу 0x007e00, используя функции BIOS.
318
350
4. Загрузчик загружает GDT и переключает процессор в защищенный режим.
319
-
5. В защищенном режиме загрузчик выводит сообщение об успешном переходе и передает управление ядру по адресу 0x1000.
351
+
5. В защищенном режиме загрузчик выводит сообщение об успешном переходе и передает управление ядру по адресу 0x007e00.
320
352
321
353
## Команды оболочки
322
354
@@ -328,13 +360,18 @@ KintsugiOS включает оболочку "Keramika Shell" со следую
328
360
-`free <address>` - освобождение памяти
329
361
-`info` - информация о системе
330
362
-`memdump` - дамп памяти
331
-
-`echp <text>` - вывод текста
363
+
-`echo <text>` - вывод текста
332
364
-`help` - справка по командам
333
-
-`sleep <ms>` - ожидать N секунд
365
+
-`sleep <ms>` - ожидать N миллисекунд
334
366
-`reboot` - перезагрузка
335
367
-`rand <seed>` - генерация случайного числа по алгоритму xorshift32
336
368
-`randrange <seed> <min> <max>` - генерация случайного числа в диапазоне при помощи xorshift32
337
369
-`binpow <base> <exponent>` - бинарное возведение в степень
370
+
-`ls` - список файлов в корневой директории FAT12
371
+
-`cat <filename>` - вывод содержимого файла
372
+
-`load <filename> [address]` - загрузка файла в память по адресу (по умолчанию 0x007e0000)
373
+
-`fat12info` - информация о файловой системе FAT12
374
+
-`qemushutdown` - выключение QEMU через порт 0x604
338
375
339
376
## Kintsugi Kernel LibC
340
377
KKLibc — это собственная реализация стандартной библиотеки языка C, разработанная специально для нужд ядра Kintsugi OS. В отличие от пользовательских libc (вроде glibc), она тесно интегрирована с архитектурой ядра, лишена избыточности и содержит только самые необходимые функции для работы в пространстве ядра.
@@ -385,6 +422,11 @@ KKLibc является живым, развивающимся проектом
385
422
+**Новые модули:** По мере необходимости будут добавляться новые структуры данных (связные списки, хэш-таблицы), функции для работы со строками в кодировке UTF-8 и другие утилиты, требуемые развивающейся операционной системой.
386
423
387
424
### Для ядра
425
+
-**Улучшение терминального слоя:**
426
+
- Реализация истории команд
427
+
- Поддержка вкладок и нескольких виртуальных терминалов
428
+
- Цветовая палитра и темы
429
+
- Поддержка мыши в текстовом режиме
388
430
-**Файловые системы:** Реализация FAT12 и ext2
389
431
-**Многозадачность:** Планировщик задач и механизмы IPC
0 commit comments