Skip to content

YGCODES1/YG-OS

Repository files navigation

YG-OS

YG-OS; C, C++ ve x86 Assembly dilleri kullanılarak sıfırdan yazılmış 32-bitlik bir x86 hobi işletim sistemidir. Gömülü donanımlar için ham metal (bare-metal) multimedya alıcısı bellenimi (firmware) olarak başlayan bu proje; zamanla gerçek bir dosya sistemine, sürücü yığına ve yerleşik uygulamalara sahip tam grafiksel bir masaüstü ortamına dönüşmüştür.

Proje, i386 uyumlu işlemcileri hedef alır ve QEMU emülatörünün yanı sıra VGA/VESA arka bellek (framebuffer) çıkışı yapabilen gerçek donanımlar üzerinde de çalışabilir. Harici herhangi bir işletim sistemi servisine, standart C kütüphanesine (libc) veya çalışma zamanına (runtime) ihtiyaç duymaz. Önyükleyiciden (bootloader) grafiksel kabuğa (shell) kadar her şey kurum içi (in-house) olarak geliştirilmiştir.


Geliştirme Felsefesi ve Özgünlük

YG-OS, düşük seviyeli sistem mimarisine duyulan derin bir tutkunun ürünüdür. Gerçek mod (real-mode) önyükleyicisinden pencere kompozitörüne (window compositor) kadar bu depodaki her bir kod satırı manuel olarak yazılmış, hata ayıklanmış ve insan eliyle optimize edilmiştir. Bu proje; Intel mimarisi kılavuzlarını okuyarak, üçlü hataları (triple faults) ayıklayarak, VESA arka bellek piksellerini tek tek hesaplayarak ve özel fiziksel bellek yöneticisindeki işaretçi (pointer) hatalarını takip ederek zor yoldan inşa edilmiştir.

Geliştirme Süreci: Proje, Kasım 2024 tarihinde ham metal gömülü bir bellenim deneyi olarak başlamıştır. Yaklaşık 18 aylık yoğun ve düzenli bir çalışma sürecinin ardından, ham 512 baytlık önyükleme sektöründen bugün görülen çoklu görev destekli grafiksel pencere yöneticisi, sürücü yığını ve 10 uygulamalı ekosisteme katman katman genişletilmiştir.

Projede yapay zekayla üretilmiş hazır kodlar, kopyala-yapıştır yapılmış jenerik çekirdekler ve harici C kütüphanelerine (libc) en ufak bir bağımlılık bulunmamaktadır veya çok azdır . Geleneksel, uygulamalı sistem programcılığının ve sıfırdan bir işletim sistemi yazmanın getirdiği zorlu ama ödüllendirici yolun canlı bir kanıtıdır.


Ekran Görüntüleri

Masaüstü Ortamı

Masaüstü Ortamı

Önyükleme Sırası (Boot Sequence)

Önyükleme Ekranı

3D Motor Demosu

3D Motoru

Ajanda Uygulaması

Ajanda

Paint Uygulaması

Paint


Mimari Genel Bakış

YG-OS
├── boot/           x86 gerçek mod önyükleyici (NASM)
│   ├── boot.asm    Aşama 1 MBR, A20 hattı, GDT, VESA mod ayarı ve çekirdeğe geçiş
│   ├── vesa.asm    VESA BIOS çağrı sırası (mod 0x118, 800x600x32)
│   └── padding.asm İmajın 1 MB sınırına hizalanması için dolgu
│
├── kernel/
│   ├── kernel_entry.asm   Yığın kurulumu ve kmain() çağrısı
│   ├── kmain.cpp          Çekirdek ana giriş noktası, donanım başlatma ve ana döngü
│   ├── boota.cpp          Donanım keşfi, PCI listeleme ve önyükleme günlüğü oluşturucu
│   ├── config.h           Derleme zamanı özellik bayrakları
│   ├── dashboard/         Pencereli grafiksel masaüstü ortamı
│   ├── fs/                YGFS özel düz dosya bellek içi dosya sistemi
│   ├── hal/               Donanım Soyutlama Katmanı (port I/O)
│   ├── mm/                PMM bit eşlem fiziksel bellek yöneticisi + VMM sayfalama
│   └── security/          Şifre doğrulama ve RAM şifreleme modülü
│
├── drivers/
│   ├── bga/        Bochs Grafik Adaptörü (donanımsal arka bellek)
│   ├── vga/        Eski VGA metin ve grafik geri dönüşü
│   ├── graphics/   Yazılımsal çizim (dikdörtgen, çizgi, daire, 8x8 ve 8x16 yazı tipleri)
│   ├── pci/        PCI konfigürasyon alanı listeleme
│   ├── ata/        ATA/IDE disk okuma ve yazma
│   ├── mouse/      PS/2 fare sürücüsü (IRQ12, paket çözümleyici)
│   ├── audio/      PC hoparlörü / temel ses çıkışı
│   ├── hdmi/       HDMI DDC varlık tespiti
│   ├── scart/      15 kHz SCART PAL/NTSC senkronize çıkış
│   ├── tuner/      Analog TV alıcı desteği
│   ├── usb/        USB-C cihaz kontrolü ve ESP32 yardımcı işlemci köprüsü
│   ├── gpu/        GPU soyutlama katmanı
│   └── power/      Pil gömülü denetleyici arayüzü
│
├── apps/
│   ├── calc/       Tüm operatörleri destekleyen tamsayı hesap makinesi
│   ├── paint/      Palet, fırça, doldurma ve silme araçlarına sahip piksel tuval
│   ├── term/       LS, MK, DEL, CLR, REB, CHK komutlarına sahip sistem terminali
│   ├── agenda/     Not tutma ve etkinlik listesi uygulaması
│   ├── explorer/   Dosya ve sistem gezgini penceresi
│   ├── scanner/    Antivirüs dosya bütünlüğü tarayıcısı
│   ├── settings/   Ekran çözünürlüğü, dil ve tema yapılandırması
│   ├── setup/      İlk açılış sistem kurulum sihirbazı
│   ├── clock/      Gerçek zamanlı saat (RTC) okuyucu ve analog gösterge
│   └── game/       Yerleşik oyun uygulaması
│
├── sys/
│   ├── cpu.cpp     CPU kullanım takibi
│   └── watchdog.asm Sistem bekçi köpeği (watchdog) zamanlayıcısı
│
└── linker.ld       ELF32 bağlayıcı (linker) betiği (yükleme adresi 0x10000)

Özellikler

Çekirdek

  • 800x600x32 çözünürlükte VESA mod ayarı yapabilen özel x86 gerçek mod önyükleyicisi
  • C++11 ve C11 ile yazılmış 32-bit korumalı mod (protected mode) çekirdeği (standart kütüphane bağımsız)
  • Blok seviyesinde tahsis takibi yapan bit eşlemli fiziksel bellek yöneticisi
  • Sayfa eşlemeli iki seviyeli yazılımsal sanal bellek yöneticisi
  • Zamanlayıcı kesmesi (timer interrupt) ile çalışan sistem bekçi köpeği
  • Bellekteki hassas veriler için RAM şifreleme modülü
  • Oturum yönetimli şifre korumalı giriş ekranı

Grafik Arayüzü

  • Çift tamponlu (double-buffered) yazılımsal arka bellek işleyici (32-bit ve 24-bit renk derinlikleri)
  • 8x8, 8x16 ve 2x ölçeklenmiş 8x16 piksel boyutlarında yazı tipi oluşturma
  • Temel çizimler: dolu dikdörtgen, yatay/dikey çizgiler, Bresenham çizgileri, Orta Nokta daireleri, yuvarlatılmış dikdörtgenler
  • Pencere yöneticisi: sürükleme desteği, kapatma düğmeleri, başlık çubukları, katmanlı z-sırası
  • 24-bit sprite/görüntü çizimi

Masaüstü Ortamı

  • Düz gri tonlamalı iş istasyonu temalı grafiksel kabuk
  • Başlat menüsü, canlı saat göstergesi, RAM kullanım ölçer ve fare koordinat okuyucusuna sahip görev çubuğu
  • Saat, dakika ve saniye kollarına sahip analog saat bileşeni
  • Tek tıkla uygulama başlatan masaüstü ikon ızgarası
  • Bildirim bindirme sistemi
  • Masaüstü dosya işlemleri için sağ tık bağlam menüsü
  • İşlemci kullanım gösterge çubuğu

Dosya Sistemi (YGFS)

  • Özel düz dosya bellek içi dosya sistemi
  • Terminal üzerinden dosya oluşturma, silme ve listeleme
  • Oluşturulan dosyaların masaüstünde otomatik simgelendirilmesi

Önyükleme Sırası

  • Gerçek zamanlı PCI veriyolu listeleme çıkışına sahip Linux tarzı kayan önyükleme günlüğü
  • PMM'den dinamik olarak raporlanan fiziksel bellek kapasitesi
  • Donanım keşfi sırasında çift renkli (kırmızı/turuncu) büyük boyutlu ASCII logo çizimi

Yerelleştirme

  • Tam İngilizce ve Türkçe kullanıcı arayüzü dil desteği
  • Ayarlar uygulamasında kalıcı dil seçimi
  • Tüm yerleşik uygulamaları kapsayan merkezi çeviri sözlüğü

Yerleşik Uygulamalar

Uygulama Açıklama
Hesap Makinesi +, -, *, /, +/-, geri silme ve yüzde işlemlerini destekleyen hesap makinesi
Paint 16 renkli palet, ayarlanabilir fırça boyutu, sel doldurma ve tuval temizleme özellikli piksel çizim tuvali
Terminal YGFS dosya sistemine bağlı LS, MK, DEL, CLR, REB, CHK komutlarına sahip kabuk
Ajanda Not alma ve etkinlik listesi yöneticisi
Gezgin Sistem dosya ve dizin tarayıcısı
Antivirüs Dosya bütünlüğü kontrolü ve temel tehdit tarayıcısı
Ayarlar Ekran çözünürlüğü seçici, dil seçimi (EN/TR) ve tema yapılandırması
Kurulum İlk kurulum sihirbazı
Saat Gerçek zamanlı analog ve dijital saat
Oyun Yerleşik etkileşimli 3D oyun motoru demosu

Sürücü Yığını

  • ATA/IDE disk sektörü okuma ve yazma (wrthdd arayüzü)
  • IRQ12 kesmesi ve üç baytlık paket çözümlemeli PS/2 fare sürücüsü
  • Bus 0-1, slot 0-31 aralığında çalışan PCI veri yolu tarayıcısı
  • HDMI DDC varlık tespiti
  • SCART 15 kHz PAL/NTSC senkronize sinyal çıkışı
  • USB-C cihaz kontrolü ve ESP32 yardımcı işlemci UART köprüsü
  • Pil gömülü denetleyici arayüzü
  • PC hoparlörü ses çıkış desteği
  • Analog TV alıcısı başlatma

Derleme Gereksinimleri

Bağımlılık Minimum Sürüm Notlar
GCC (i386 çapraz veya yerel) 9.x -m32 -ffreestanding desteklemelidir
G++ 9.x GCC ile aynı araç zinciri
NASM 2.14 x86 çoklu derleyicisi
GNU LD 2.32 ELF32 bağlayıcısı (-m elf_i386)
GNU Make 4.x Yapı otomasyonu
QEMU 5.x Test için qemu-system-i386

Windows üzerinde en kolay yöntem, WSL2 ile Ubuntu kurup gerekli paketleri yüklemektir.

sudo apt update
sudo apt install build-essential nasm gcc-multilib g++-multilib qemu-system-x86

Derleme

Depoyu klonlayın ve WSL içinden derleme yapın (Windows sürücünüz yapılandırmanıza bağlı olarak /mnt/k/ veya benzeri bir konumda olacaktır):

# Proje kök dizinine gidin
cd /mnt/k/YGEmmbedded

# İşletim sistemi imajını derleyin
make

# Çıktı dosyası os-image.bin (1 MB ham disk imajı) olacaktır

Sıfırdan yeniden derlemek için:

make clean
make

clean hedefi build/ dizinini ve oluşturulan tüm ikili (binary) dosyaları temizler. Kaynak dosyalara dokunmaz.


QEMU Üzerinde Çalıştırma

Yöntem 1 — Windows toplu iş dosyası (önerilen)

Windows Gezgini'nden run.bat dosyasına çift tıklayın veya PowerShell üzerinden çalıştırın:

.\run.bat

Bu betik otomatik olarak WSL aracılığıyla QEMU'yu çağırır. os-image.bin dosyasını ham IDE disk imajı olarak QEMU'ya aktarır.

Yöntem 2 — WSL üzerinden manuel QEMU çağrısı

qemu-system-i386 -drive format=raw,if=ide,file=/mnt/k/YGEmmbedded/os-image.bin

Yöntem 3 — Hata ayıklama çıktıları ile çalıştırma

qemu-system-i386 \
  -drive format=raw,if=ide,file=/mnt/k/YGEmmbedded/os-image.bin \
  -d int,cpu_reset \
  -no-reboot \
  -serial stdio

Gerçek Donanımda Çalıştırma

Disk imajını Linux veya WSL üzerinde dd komutunu kullanarak bir USB belleğe veya sabit diske yazın. Bu işlem hedef cihazdaki tüm verileri silecektir.

# /dev/sdX kısmını hedef sürücünüzle değiştirin — çalıştırmadan önce lsblk ile doğrulayın
sudo dd if=os-image.bin of=/dev/sdX bs=512 status=progress

Önyükleyici, VGA uyumlu bir ekran ve bir PS/2 fare bekler. USB HID fare desteği, sistem belleniminin (BIOS/UEFI) USB legacy emülasyonu sağlamasına bağlıdır.


Yapılandırma

Modüller, derleme zamanında kernel/config.h dosyası düzenlenerek etkinleştirilebilir veya devre dışı bırakılabilir:

#define INCLUDE_EXPLORER  1   // Dosya gezgini uygulaması
#define INCLUDE_SECURITY  1   // Şifreli oturum açma ekranı
#define INCLUDE_GAME      1   // Yerleşik oyun
#define INCLUDE_TERMINAL  1   // Sistem terminali
#define INCLUDE_SETUP     1   // İlk kurulum sihirbazı (kurulu değilse gösterilir)
#define INCLUDE_SCANNER   1   // Antivirüs tarayıcısı
#define INCLUDE_AGENDA    1   // Ajanda / not uygulaması
#define INCLUDE_SETTINGS  1   // Ayarlar paneli

İstediğiniz değeri 0 yapıp yeniden derleyerek ilgili modülü çekirdek ikili dosyasından çıkarabilirsiniz.


Dizin Yapısı Özeti

YGEmmbedded/
├── apps/           Yerleşik kullanıcı alanı uygulamaları
├── boot/           Gerçek mod önyükleyici ve VESA başlatma
├── drivers/        Donanım sürücüleri
├── kernel/         Çekirdek çekirdeği (bellek, dosya sistemi, güvenlik, masaüstü)
├── sys/            CPU takipçisi ve bekçi köpeği
├── FONT/           Yazı tipi varlıkları ve gömülü görsel veriler
├── Makefile        Derleme sistemi
├── linker.ld       ELF32 bağlayıcı betiği
└── run.bat         Windows QEMU başlatma yardımcısı (WSL üzerinden)

Bilinen Sınırlamalar

  • Çekirdek imajı 1 MB ham disk imajına sığmalıdır. Bağlayıcı betiği yükleme adresini 0x10000 olarak zorunlu kılar.
  • YGFS dosya sistemi tamamen bellek içindedir. Dosyalar, ATA sürücüsü aracılığıyla diske yazılmadığı sürece kalıcı olmaz.
  • USB desteği, ana kart belleniminin USB legacy klavye/fare emülasyonu sağlamasını gerektirir. Yerel USB HID yığınları henüz uygulanmamıştır.
  • SCART ve alıcı (tuner) sürücüleri koşulsuz olarak başlatılır. Bu arayüzlere sahip olmayan donanımlarda başlatma rutinleri, önyükleme sırasında raporlanan ancak yürütmeyi durdurmayan hata kodları döndürür.
  • Ses çıkışı yalnızca PC hoparlörü (PC speaker) ile sınırlıdır. AC97 veya HDA ses sürücüsü mevcut değildir.

Lisans

Bu proje, eğitim ve araştırma amacıyla olduğu gibi (as-is) sunulmaktadır. Herhangi bir garanti verilmemektedir.

DİKKAT BU İŞLETİM SİSTEMİNDE ÇOK AZDA OLSA YAPAY ZEKA KULLANILMIŞTIR TEŞEKKÜRLER