Skip to content
ValentinStarsPublic

About

An example of an operating system in C++, ASM, and Grub

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

15 Commits

Folders and files

Repository files navigation

VSTOS (Valentin Stars Operating System)

VSTOS Demo

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.

1. Сборка компонентов

# Компиляция ассемблерного загрузчика
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.o

2. Создание ISO образа

mkdir -p iso/boot/grub
cp VST_OS.bin iso/boot/
# Создание конфигурации GRUB и генерация образа
grub-mkrescue -o VST_OS.iso iso

3. Запуск в QEMU

qemu-system-i386 -cdrom VST_OS.iso

Чему я научился (Lessons Learned)

Проблема с обработкой прерываний и вводом: Одной из главных сложностей была реализация корректного ввода с клавиатуры. В начале разработки при нажатии одной клавиши символ выводился бесконечно или система зависала. Решение: Я изучил работу контроллера клавиатуры 8042 и реализовал проверку статусного регистра порта 0x64 (проверка бита 0 перед чтением данных из 0x60). Также пришлось вручную реализовать таблицу маппинга скан-кодов в символы ASCII, что дало понимание того, как аппаратура общается с драйвером.

Планы на будущее

  • Реализация GDT (Global Descriptor Table) и IDT (Interrupt Descriptor Table).
  • Поддержка динамической памяти (Memory Allocator).
  • Файловая система (например, простая FAT или RAMDisk).
  • Больше примеров работы с ассемблерными вставками (Inline ASM) для прямого доступа к регистрам CPU.

Разработчик: Valentin Stars
Цель проекта: Демонстрация работы Hardware C++ и основ системного программирования.

About

An example of an operating system in C++, ASM, and Grub

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Contributors

Languages