Skip to content

Commit 20bb0ee

Browse files
committed
docs: update readme and add docs
1 parent fc36ce4 commit 20bb0ee

File tree

7 files changed

+526
-72
lines changed

7 files changed

+526
-72
lines changed

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
commit fc36ce4c4630d7468c9cc562f977fbc3bcf51146
2+
Author: Alexeev Bronislav <alexeev.dev@mail.ru>
3+
Date: Sat Aug 23 04:14:24 2025 +0700
4+
5+
fix shell prompt bug, fix kernel
6+
17
commit 34f4acc8359288ab92953aaaaa2d1dc4ccf9de50
28
Author: Alexeev Bronislav <alexeev.dev@mail.ru>
39
Date: Sat Aug 23 03:21:09 2025 +0700

README.md

Lines changed: 161 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# KintsugiOS
2-
Минималистичная x86 операционная система на (N)ASM и С.
2+
3+
Минималистичная x86 операционная система на (N)ASM и C, созданная в образовательных целях для глубокого понимания принципов работы операционных систем.
34

45
<div align="center">
56
<img src=https://img.shields.io/github/languages/top/alexeev-prog/KintsugiOS>
@@ -8,96 +9,184 @@
89
<img src="https://img.shields.io/github/issues/alexeev-prog/KintsugiOS">
910
</div>
1011

11-
## Requirements
12-
Этот проект использует [кросс компилятор i386 ELF GCC](http://newos.org/toolchains/i386-elf-15.1.0-Linux-x86_64.tar.xz), FASM 1.73, NASM 2.16 и GDB, MTools, Xorriso.
12+
![KintsugiOS Screenshot](https://via.placeholder.com/800x400/000000/FFFFFF/?text=KintsugiOS+Screenshot)
13+
14+
## Особенности
15+
16+
### Реализовано
17+
- **Загрузчик** с переходом из реального режима в защищённый
18+
- **GDT** (Глобальная таблица дескрипторов)
19+
- **Управление памятью** с двумя аллокаторами:
20+
- Арена-аллокатор (legacy)
21+
- Аллокатор на основе связанных блоков памяти
22+
- **Драйверы**:
23+
- VGA-экран с поддержкой цветного текста
24+
- Клавиатура (PS/2)
25+
- Таймер
26+
- **Система прерываний** (IDT, ISR, IRQ)
27+
- **Командная оболочка** "Keramika Shell" с поддержкой команд:
28+
- `HELP` - список команд
29+
- `CLEAR` - очистка экрана
30+
- `END` - остановка CPU
31+
- `AMALLOC`/`MALLOC` - выделение памяти
32+
- `FREE` - освобождение памяти
33+
- `INFO` - информация о системе
34+
- `MEMDUMP` - дамп памяти
35+
- И другие...
36+
- **Библиотека LibC** включая:
37+
- Работу со строками (string.h)
38+
- Форматированный вывод (stdio.h)
39+
- Функции памяти (mem.h)
40+
41+
### В разработке
42+
- [ ] Виртуальная память (Paging)
43+
- [ ] Файловая система
44+
- [ ] Многозадачность
45+
- [ ] Пользовательский режим
46+
- [ ] Сетевой стек
47+
48+
## Требования
49+
50+
Для сборки и запуска KintsugiOS необходим следующий инструментарий:
51+
52+
- [Кросс-компилятор i386 ELF GCC](http://newos.org/toolchains/i386-elf-15.1.0-Linux-x86_64.tar.xz)
53+
- FASM 1.73.31 или новее
54+
- NASM 2.16 или новее
55+
- GDB для отладки
56+
- MTools и Xorriso для создания образов дисков
57+
- QEMU или Bochs для эмуляции
58+
59+
Проверить готовность окружения можно скриптом:
60+
```bash
61+
./check-env.sh
62+
```
1363

14-
Пожалуйста, скачайте тулчейн компилятора и переместите его в директорию `toolchain/`. Также вы можете изменить `shell.nix`:
64+
## Структура проекта
1565

16-
```nix
17-
let
18-
customToolchainPath = "toolchain/i386-elf-15.1.0-Linux-x86_64/bin"; # ваш путь до бинарников компилятора
19-
in
66+
```
67+
src/
68+
├── bootloader/ # Код загрузчика
69+
│ ├── bootsector.asm # Главная загрузочная запись
70+
│ ├── diskload.asm # Чтение с диска
71+
│ ├── gdt.asm # Глобальная таблица дескрипторов
72+
│ ├── kernel_entry.asm # Точка входа в ядро
73+
│ ├── puts_chars.asm # Вывод текста (16-бит)
74+
│ ├── puts_chars32.asm # Вывод текста (32-бит)
75+
│ ├── puts_hex.asm # Вывод hex-чисел
76+
│ └── switch_to32.asm # Переход в защищённый режим
77+
└── kernel/ # Ядро ОС
78+
├── cpu/ # Центральные модули процессора
79+
│ ├── idt.[ch] # Таблица дескрипторов прерываний
80+
│ ├── interrupt.asm # Обработчики прерываний
81+
│ ├── isr.[ch] # Службы прерываний
82+
│ ├── ports.[ch] # Работа с портами ввода-вывода
83+
│ ├── timer.[ch] # Системный таймер
84+
│ └── type.h # Общие типы данных
85+
├── drivers/ # Драйверы устройств
86+
│ ├── keyboard.[ch] # Драйвер клавиатуры
87+
│ ├── lowlevel_io.[ch] # Низкоуровневый ввод-вывод
88+
│ └── screen.[ch] # Драйвер экрана
89+
├── kernel/ # Основное ядро
90+
│ ├── kernel.[ch] # Главные функции ядра
91+
│ ├── utils.[ch] # Вспомогательные утилиты
92+
└── libc/ # Стандартная библиотека C - KKLIBC (Kintsugi Kernel LibC)
93+
├── function.h # Вспомогательные макросы
94+
├── mem.[ch] # Управление памятью
95+
├── stdio.[ch] # Стандартный ввод-вывод
96+
└── string.[ch] # Работа со строками
2097
```
2198

22-
Перел разработкой, проверьте вывод `check-env.sh`:
99+
## Сборка и запуск
23100

101+
### Базовая сборка
24102
```bash
25-
$ ./check-env.sh
26-
27-
KintsugiOS Development Environment Check
28-
========================================
29-
30-
Cross Compiler Tools:
31-
[PASS] i386-elf-gcc
32-
[PASS] i386-elf-ld
33-
[PASS] i386-elf-objcopy
34-
35-
Assemblers:
36-
[PASS] FASM
37-
[PASS] NASM
38-
39-
Emulators:
40-
[PASS] QEMU i386
41-
[PASS] Bochs
42-
43-
Utilities:
44-
[PASS] GDB
45-
[PASS] MTools
46-
[PASS] Xorriso
47-
48-
Environment Check Summary:
49-
==========================
50-
Total checks: 10
51-
Passed: 10
52-
Environment is fully ready for KintsugiOS development!
103+
make
53104
```
54105

55-
## Сборка и запуск
106+
### Создание образа диска и запуск в QEMU
107+
```bash
108+
make run
109+
```
110+
111+
### Запуск в QEMU с отладкой
112+
```bash
113+
make debug
114+
```
56115

116+
### Очистка проекта
57117
```bash
58-
make # сборка
59-
make run # сборка и запуск в qemu
118+
make clean # Удаление бинарных файлов
119+
make clean_all # Полная очистка
60120
```
61121

62-
## Фичи
122+
## Отладка
63123

64-
+ bootloader:
65-
+ gdt
66-
+ diskload
67-
+ switch to 32
68-
+ kernel:
69-
+ drivers
70-
+ libc
71-
+ CPU
72-
+ basic shell
124+
Для отладки KintsugiOS запустите систему в режиме отладки:
125+
```bash
126+
make debug
127+
```
73128

74-
## Литература, источники
129+
И подключитесь через ваш дебаггер (например gdb).
75130

76-
По языку ассемблера:
131+
## Как работает загрузка
77132

78-
+ Зубков С. В. «Assembler для DOS, Windows и Unix»
79-
+ [Введение в машинный код](http://wasm.ru/article.php?article=1022001)
80-
+ [Программирование на ассемблере под DOS](http://wasm.ru/article.php?article=1022003)
81-
+ [Введение в ассемблер](https://hackware.ru/?p=8654)
82-
+ [ASCII таблица](https://www.asciitable.com/)
83-
+ [Погружение в ассемблер](https://xakep.ru/2017/09/11/asm-course-1/)
84-
+ [От изучающего ассемблер до взломщика программ](https://wasm.in/attachments/skljarov-i-izuchaem-assembler-za-7-dnej-pdf.2906/)
85-
+ [Руководство по ассемблеру MASM intel x86_64](https://metanit.com/assembler/tutorial/)
133+
1. **BIOS** загружает первый сектор диска (512 байт) по адресу 0x7C00
134+
2. **Загрузчик** инициализирует стек, загружает GDT и переключается в защищённый режим
135+
3. **Ядро** загружается по адресу 0x1000 и получает управление
136+
4. **Ядро** инициализирует драйверы, менеджер памяти и командную оболочку
86137

87-
По языку Си:
138+
## Команды оболочки
88139

89-
+ Керниган Б., Ритчи Д. «Язык программирования C»
90-
+ Шилдт Г. «Полный справочник по C»
140+
KintsugiOS включает оболочку "Keramika Shell" со следующими командами:
91141

92-
По устройству операционных систем:
142+
- `END` - остановка процессора
143+
- `CLEAR` - очистка экрана
144+
- `AMALLOC <size>` - выделение памяти (арена)
145+
- `MALLOC <size>` - выделение памяти (куча)
146+
- `FREE <address>` - освобождение памяти
147+
- `INFO` - информация о системе
148+
- `MEMDUMP` - дамп памяти
149+
- `ECHO <text>` - вывод текста
150+
- `HELP` - справка по командам
93151

94-
+ Таненбаум Э. «Современные операционные системы»
95-
+ Таненбаум Э. «Операционные системы: Разработка и реализация»
96-
+ Олифер В., Олифер Н. «Сетевые операционные системы»
97-
+ [OSDEV Wiki](http://osdev.org)
152+
## Литература и источники
98153

99-
По архитектуре ЭВМ:
154+
### Ассемблер
155+
- Зубков С. В. «Assembler для DOS, Windows и Unix»
156+
- [Введение в машинный код](http://wasm.ru/article.php?article=1022001)
157+
- [Программирование на ассемблере под DOS](http://wasm.ru/article.php?article=1022003)
100158

101-
+ Таненбаум Э. «Архитектура компьютера»
102-
+ Гук М. «Аппаратные средства IBM PC. Энциклопедия»
103-
+ Петцольд Ч. «Код. Тайный язык информатики»
159+
### Язык C
160+
- Керниган Б., Ритчи Д. «Язык программирования C»
161+
- Шилдт Г. «Полный справочник по C»
162+
163+
### Операционные системы
164+
- Таненбаум Э. «Современные операционные системы»
165+
- Таненбаум Э. «Операционные системы: Разработка и реализация»
166+
- [OSDEV Wiki](http://osdev.org)
167+
168+
### Архитектура ЭВМ
169+
- Таненбаум Э. «Архитектура компьютера»
170+
- Гук М. «Аппаратные средства IBM PC. Энциклопедия»
171+
172+
## Лицензия
173+
174+
KintsugiOS распространяется под лицензией MIT. Подробнее см. в файле LICENSE.
175+
176+
## Вклад в проект
177+
178+
Приветствуются issues и pull requests. Перед внесением изменений пожалуйста:
179+
1. Обсудите планируемые изменения в issue
180+
2. Следуйте существующему кодстайлу
181+
3. Добавляйте комментарии на русском языке
182+
4. Тестируйте изменения в QEMU и Bochs
183+
184+
## Благодарности
185+
186+
Особая благодарность сообществу OSDev и авторам учебных материалов, указанных в разделе "Литература и источники".
187+
188+
---
189+
190+
<div align="center">
191+
<sub>Название "Kintsugi" отсылает к японскому искусству восстановления керамики золотым лаком — метафора красоты в несовершенстве и постоянного развития.</sub>
192+
</div>

docs/img/device_driver0.png

79.1 KB
Loading

docs/ru/bios-and-os.md

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
# BIOS и ОС | Документация Metalfish OS
2+
3+
## [Главная страница](./index.md)
4+
5+
Когда мы включаем компьютер, он должен каким-то образом загрузить операционную систему. Он может загрузить ее с дискеты, с флэшки, с жесткого диска или с каих-либо других носителей.
6+
Среда, которую дает нам компьютер вне ОС, может предоставить нам не так уж и много. Например, мы имеем BIOS (англ. Basic Input/Output Software), набор програм которые изначально загружены в памят и инициализированы как только компьютер включается. БИОС предоставляет базовый контроль над важными девайсами компьютера: экран, клавиатура, жесткий диск.
7+
Чтобы БИОСу загрузить ОС, ему нужно узнать, есть ли ОС на определенном носителе. Для этого он читает первые 512 байтов носителя которые называются загрузочным сектором (англ. boot sector) и если они кончаются магическим числов 0xaa55,то он загружает код бут сектора в память, а процессор его исполняет.
8+
9+
Чтобы дать понять BIOS, что на текущей флэшке, компакт диске или жестком диске расположена ОС, на этом носителе должен быть загрузочный сектор. BIOS узнает загрузочный сектор по "магическому числу" из 2-х байт, равное 0xaa55 (в шестнадцатеричной системе исчисления). Простейший загрузочный сектор в машинном коде выглядит так:
10+
11+
```bin
12+
e9 fd ff 00 00 00 00 00 00 00 00 00 00 00 00 00
13+
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
14+
*
15+
00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa
16+
```
17+
18+
Как видим, последние 2 байта действительно являются "магическим числом". Первые 3 байта являются машинными инструкциями, которые запускают Бесконечный цикл, а остальное просто заполнено нулями т.к. наша программа должна быть размером ровно 512 байт.
19+
20+
Простейший загрузчик на ассембере для nasm реализован ниже:
21+
22+
```asm
23+
; Бесконечный цикл:
24+
loop: ; Определяем метку "loop"
25+
26+
jmp loop ; Инструкция "jmp" позволяет нам перейти к метке
27+
; "loop" (англ. jump - прыжок), т.е. создается
28+
; бесконечный цикл.
29+
30+
times 510-($-$$) db 0 ; Инструкция "times" заставляет идущую после нее
31+
; команду выполняться опредленное количество раз, т.е.
32+
; times <кол-во раз> <команда>.
33+
; Токен $ высчитывает позицию начала текущей строки,
34+
; токен $$ - позицию начала текущей секции.
35+
; 510-($-$$) = 510-(2-0) = 508 байт. Чтобы лучше понять
36+
; как это работает, рекомендую посмотреть как программа
37+
; выглядит в машинном коде с помощью утилиты ghex.
38+
; Таким образом мы заполняем пространство нулями (db 0),
39+
; приводя нас к 510-му байту.
40+
; db расшифровывается как "declare bytes", т.е.
41+
; "объявить байты"
42+
43+
dw 0xaa55 ; В последние два байта кладем "магическое число",
44+
; чтобы BIOS знал, что это загрузочный сектор
45+
```

0 commit comments

Comments
 (0)