VSTOS — это легковесная 32-битная операционная система с монолитным ядром, написанная на C++ и ассемблере x86. Проект создан как образовательная площадка для изучения низкоуровневой разработки и как готовый шаблон (boilerplate) для тех, кто хочет начать свой путь в создании OS.
- Собственное Ядро: Написано на C++ с использованием
-ffreestanding. - VGA Драйвер: Полноценный вывод текста на экран, поддержка цветов, скроллинг и управление аппаратным курсором.
- Драйвер клавиатуры: Обработка скан-кодов через порты ввода-вывода (
0x60,0x64). - Интерактивный Shell: Поддержка команд (
help,about,clear,ascii). - Управление питанием: Команды перезагрузки (
reboot) и программного выключения для QEMU. - Hardware Interaction: Прямое управление светодиодами клавиатуры (Caps/Num/Scroll Lock).
- Языки: C++ (Kernel), Assembly x86 (Bootloader).
- Загрузчик: Multiboot-compliant (GRUB).
- Инструменты: GCC (g++), NASM, LD (Linker).
- Среда тестирования: QEMU / Bochs.
Для сборки вам понадобится gcc-multilib, nasm и grub-common.
# Компиляция ассемблерного загрузчика
nasm -f elf32 boot.asm -o boot.o
# Компиляция ядра C++
g++ -m32 -c kernel.cpp -o kernel.o -ffreestanding -O2 -fno-stack-protector -fno-rtti -fno-exceptions
# Линковка в исполняемый бинарный файл
ld -m elf_i386 -T linker.ld -o VST_OS.bin boot.o kernel.omkdir -p iso/boot/grub
cp VST_OS.bin iso/boot/
# Создание конфигурации GRUB и генерация образа
grub-mkrescue -o VST_OS.iso isoqemu-system-i386 -cdrom VST_OS.isoПроблема с обработкой прерываний и вводом:
Одной из главных сложностей была реализация корректного ввода с клавиатуры. В начале разработки при нажатии одной клавиши символ выводился бесконечно или система зависала.
Решение: Я изучил работу контроллера клавиатуры 8042 и реализовал проверку статусного регистра порта 0x64 (проверка бита 0 перед чтением данных из 0x60). Также пришлось вручную реализовать таблицу маппинга скан-кодов в символы ASCII, что дало понимание того, как аппаратура общается с драйвером.
- Реализация GDT (Global Descriptor Table) и IDT (Interrupt Descriptor Table).
- Поддержка динамической памяти (Memory Allocator).
- Файловая система (например, простая FAT или RAMDisk).
- Больше примеров работы с ассемблерными вставками (Inline ASM) для прямого доступа к регистрам CPU.
Разработчик: Valentin Stars
Цель проекта: Демонстрация работы Hardware C++ и основ системного программирования.
