TEKNİK YAZI / NOTLAR

JS-DOS: Web Tarayıcıda DOS Oyunlarını Çalıştırmak

JS-DOS ile klasik DOS oyunlarını web tarayıcıda nasıl çalıştırırsınız? Emülasyon teknolojisinin web'deki mucizesi.

js-dos, DOSBox tabanlı bir çalışma ortamını WebAssembly ve tarayıcı API’leri üzerinden sunarak DOS uygulamalarını web sayfasında çalıştırmayı sağlar. Oyunlar en görünür kullanım örneği olsa da paketleme, giriş eşleme, kalıcı durum ve lisans sınırları genel emülasyon deneyiminin parçasıdır.

JS-DOS Nedir? Neden Bu Kadar Etkileyici?

js-dos, DOSBox emülasyonunu JavaScript/WebAssembly katmanıyla tarayıcıya taşır. Böylece x86/DOS yazılımı sunucu tarafında yürütülmeden istemcide çalışabilir.

Bu yalnızca oyun başlatıcısı değildir; paket içeriğine bağlı olarak DOS komutları, batch dosyaları ve farklı uygulamalar aynı çalışma ortamında yürütülebilir.

Emülasyon vs Simülasyon - Fark Önemli!

Çoğu kişi bu ikisini karıştırıyor. Simülasyon, bir sistemin davranışını taklit eder. Emülasyon ise o sistemin kendisi gibi davranır, instruction level’da çalışır.

JS-DOS emülasyon yapıyor. Yani x86 CPU instruction’larını tek tek yorumlayıp çalıştırıyor. VGA graphics card’ı, Sound Blaster ses kartını, keyboard controller’ı… Hepsini emüle ediyor. Bu yüzden orijinal DOS programları hiçbir değişiklik yapmadan çalışıyor!

WebAssembly’nin Gücü

JS-DOS’un bu kadar performanslı çalışmasının sırrı WebAssembly (WASM). Pure JavaScript ile DOS emülasyonu çok yavaş olurdu. WASM sayesinde native’e yakın performans elde ediliyor.

DOSBox’ın C++ kodu, Emscripten ile WASM’a compile ediliyor. Browser bu WASM kodunu neredeyse native hızda çalıştırıyor. 486 DX2 66MHz’lik bir bilgisayarı rahatça emüle edebiliyor - ki bu 90’ların ortası için gayet güçlü bir sistem!

Nasıl Çalışıyor? Mimari Bakış

JS-DOS’un katmanlı bir yapısı var:

DOS Layer: MS-DOS 6.22 compatible bir DOS implementation. File system, memory management, interrupt handling… Hepsi var.

Hardware Emulation Layer: CPU (x86), VGA, Sound Blaster, keyboard, mouse, joystick emülasyonu. Her hardware component JavaScript/WASM’da implement edilmiş.

Browser Integration Layer: Canvas’a render, Web Audio API ile ses, Gamepad API ile joystick desteği. Modern web API’larını DOS dünyasına bağlıyor.

File System: EmscriptenFS kullanarak virtual file system oluşturuyor. ZIP dosyalarından otomatik extract edebiliyor.

Basit Kullanım Örnekleri

En basit HTML embed:

<!doctype html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <link rel="stylesheet" href="https://v8.js-dos.com/latest/js-dos.css" />
    <title>My Awesome Website</title>
  </head>

  <body>
    <h1>My Awesome game</h1>
    <div id="dos" style="width: 100vw; height: 60vw;"></div>
  </body>
  <script src="https://v8.js-dos.com/latest/js-dos.js"></script>
  <script>
    Dos(document.getElementById("dos"), {
      url: "https://v8.js-dos.com/bundles/digger.jsdos",
    });
  </script>
</html>

Performans ve Optimizasyon

JS-DOS şaşırtıcı derecede performanslı ama tabii ki native DOSBox kadar değil. Performansı etkileyen faktörler:

CPU Cycles: Emüle edilen CPU hızı. “auto” genelde ideal ama bazı oyunlar için manuel ayar gerekebilir.

Graphics Mode: VGA modları (320x200) hızlı, SVGA modları (640x480+) daha yavaş.

Sound Emulation: Sound Blaster emülasyonu CPU intensive. Ses kalitesini düşürmek performans artırabilir.

Browser Engine: Chrome/Edge en hızlısı (V8 engine). Firefox da iyi. Safari biraz daha yavaş.

Oyun Uyumluluğu

Çoğu DOS oyunu mükemmel çalışıyor:

Mükemmel çalışanlar: Doom, Wolfenstein 3D, Prince of Persia, Commander Keen, Jazz Jackrabbit, Warcraft, Dune 2…

Minor issue’ları olanlar: Some Sierra adventure games (timing issues), bazı FMV oyunlar (video codec sorunları)

Çalışmayanlar: Protected mode extender kullanan bazı geç dönem oyunlar, Windows 95 gerektiren oyunlar

Mobile Desteği

JS-DOS mobile browser’larda da çalışıyor! Touch control overlay’i var. Virtual keyboard, virtual mouse, hatta virtual joystick bile var. Tabii ki performans desktop’a göre düşük ama playable.

iPad’de Doom oynamak… 1993’te hayal bile edemezdik!

Save/Load State

Durum kaydetme/yükleme desteği, emülatör belleğini ve çalışma durumunu daha sonra geri yüklemek üzere saklayabilir. Kalıcılığın tarayıcı depolaması, paket sürümü ve uygulama yapılandırmasıyla nasıl sınırlandığını ayrıca test etmek gerekir.

State’ler IndexedDB’de saklanıyor. Birden fazla save slot’u destekliyor. Cloud sync bile yapabilirsiniz (manuel olarak).

Network Play?

Original DOS oyunları modem/serial port üzerinden multiplayer destekliyordu. JS-DOS bunları WebRTC üzerinden emüle edebiliyor! Doom deathmatch browser’da… İnanılmaz değil mi?

Tabii ki setup biraz karmaşık ve latency var ama çalışıyor!

JS-DOS’un Alternatifleri

EM-DOSBox: Daha eski, daha basit. JS-DOS’un öncülü.

v86: x86 emulator, full OS boot edebiliyor (Linux, Windows 95). Daha güçlü ama daha karmaşık.

RetroArch: Multi-platform emulator. DOS dahil birçok sistemi destekliyor ama web versiyonu limited.

Archive.org DOS Collection: Binlerce DOS oyunu, browser’da oynanabilir. JS-DOS kullanıyor!

Kendi DOS Archive’ınızı Oluşturun

JS-DOS ile kendi retro gaming sitenizi yapabilirsiniz:

  1. Oyunları ZIP’leyin
  2. Autoexec.bat ile otomatik başlatma ayarlayın
  3. Custom configuration ile optimize edin
  4. Web sayfanıza embed edin

Hatta electron ile desktop app bile yapabilirsiniz!

Gelecek ve Potansiyel

js-dos, eski yazılımları inceleme ve programlama tarihini öğretme açısından da değerlidir. Dijital koruma kullanımında yalnızca emülatörün çalışması değil, dağıtım hakkı, özgün dosyaların bütünlüğü ve uzun vadeli paket formatı da önemlidir.

WebGPU gelince performans daha da artacak. WebXR desteği ile VR’da DOS oyunları oynamak mümkün olabilir.

Sonuç

JS-DOS, web teknolojilerinin ne kadar güçlü olduğunun mükemmel bir örneği. 40 yıllık software’i modern browser’da çalıştırmak… Bu teknik bir başarı!

Nostalji faktörü bir yana, emulation teknolojisi ve web platform’unun yeteneklerini göstermesi açısından çok değerli. Hem eğlenceli hem eğitici.

Eğer 90’ları özlüyorsanız ya da o dönemi merak ediyorsanız, JS-DOS ile o günlere geri dönebilirsiniz. Üstelik install, setup, compatibility derdi olmadan!

Tarayıcı tabanlı emülasyon erişimi kolaylaştırır; ancak performans, giriş gecikmesi, mobil uyumluluk ve yazılım lisansı her paket için ayrı doğrulanmalıdır.