11 puan yazan GN⁺ 2025-11-19 | 4 yorum | WhatsApp'ta paylaş
  • 1996'da çıkan Quake, üç teknolojik değişimle aynı anda karşılaştı: 3D hızlandırıcılar, internet ve MS-DOS'tan Windows 95'e geçiş
  • id Software, hem DOS hem de Windows 95'te çalışabilen tek bir yürütülebilir dosya oluşturmak için djgpp derleyicisini ve DPMI uyumlu yapıyı kullandı
  • Mpath'in 'Chunnel' sistemi sayesinde DOS için Quake'in Windows 95'in Winsock TCP/IP yığınına erişmesi sağlandı
  • Bu yapı quakeudp.dll, genvxd.dll, mgenvxd.vxd gibi bileşenlerden oluşuyor ve DOS yürütülebilir dosyasının Win32 ağ API'siyle iletişim kurmasına aracılık ediyordu
  • Daha sonra id Software yalnızca Win32'ye özel yürütülebilir dosyalara (WinQuake, GLQuake) geçince bu karmaşık yapı ortadan kalktı

Quake ve işletim sistemi geçiş dönemi

  • 1996~1997 arasında MS-DOS'un pazar payı yarıya indi, Microsoft ise Windows 95 ve NT'ye geçişi hızlandırdı
  • Bazı geliştiriciler (ör. Blizzard North) yalnızca Windows 95'e özel oyunlar geliştirirken, id Software tek bir yürütülebilir dosyayla (quake.exe) hem DOS'u hem Windows'u destekledi
  • quake.exe, DJGPP'nin DPMI istemcisini kullanarak DOS'taki cwsdpmi.exe ya da Windows 95'in DPMI sunucusuyla uyumlu çalışacak şekilde tasarlandı
  • Microsoft mühendisi Raymond Chen bunu, “programın birbiriyle uyumsuz genişleticiler üzerinde düzgün çalışmasının şaşırtıcı bir örneği” olarak anlattı

DOS ortamında Quake'i çalıştırmak

  • DOS'ta Quake'i çalıştırmak için yalnızca dört dosya gerekiyordu: quake.exe, config.cfg, pak0.pak, cwsdpmi.exe
  • Çok oyunculu mod modem, NullModem, IPX, TCP/IP olmak üzere dört yöntemi destekliyordu
    • IPX LAN içindi, TCP/IP ise internet içindi; ancak DOS'ta varsayılan olarak bir TCP/IP yığını yoktu
  • DOS için mevcut tek TCP/IP TSR, Beame & Whiteside'ın BWNFS ürünüydu ve fiyatı 395 dolardı (1996 itibarıyla); bu oldukça pahalıydı

Windows 95 ortamında çalışma

  • quake.exe, Windows 95'in sanal DOS kutusunda (dos-box) çalıştırıldığında da aynı şekilde davranıyordu
  • Windows 95'in DPMI sunucusunu kullandığı için cwsdpmi.exe gerekmiyordu
  • Çalışma sorunsuzdu, ancak en az 16 MB RAM gerekiyordu; bellek ek yükü DOS'a göre daha fazlaydı
  • VGA erişimine doğrudan izin verildiğinden tam ekranda da performans kaybı olmadan çalışabiliyordu

q95.bat ve Mpath'in Chunnel'ı

  • q95.bat, yalnızca Quake'i başlatan bir betik değildi; Mpath'in Winsock tünelleme sistemi (Chunnel) üzerinden TCP/IP bağlantısını etkinleştiriyordu
  • Mpath Interactive, çevrimiçi oyun hizmeti (Mplayer) işletiyordu ve Quake ile Unreal dahil birçok oyunda internet üzerinden oynamayı destekliyordu
  • Dönemin Mpath mühendisi Larry Hastings, Quake'in ilk derlemelerinde id Software ekibiyle internet üzerinden deathmatch yaptıkları bir anıyı paylaştı
  • Mpath, Quake kaynak kodunu alıp Mplayer ağ yığınıyla iletişim kuracak şekilde değiştirdi ve Chunnel teknolojisini id'ye lisansladı

Chunnel'ın teknik yapısı

  • q95.bat, quakeudp.dll dosyasını yükleyen qlaunch.exe'yi çalıştırıyordu
    • quakeudp.dll, Winsock (wsock32.dll) ile köprü görevi görüyordu
    • genvxd.dll üzerinden sanal aygıt sürücüsü mgenvxd.vxd yükleniyor ve Win32 ile 0x48 kesmesi üzerinden iletişim kuruluyordu
  • Quake'in BSD soket uygulaması (mpplc.c), Mpath tarafından sağlanan koddur ve ağ çağrılarını yazılım kesmeleri üzerinden iletiyordu
  • genvxd.dll, bu çağrıları unmarshalling işlemiyle açıp Winsock'a iletiyordu
  • mgenvxd.vxd içindeki sembollerde John Cash adı geçiyor
  • Bu teknoloji Mpath'in tescilli patentli teknolojisiydi; kaynak kodu yayımlanmadı
  • Aralık 1996'dan sonra id Software yalnızca Win32'ye özel yürütülebilir dosyalara (WinQuake, GLQuake, QuakeWorld) geçince Chunnel yapısı terk edildi

Sonuç

  • Quake'in TCP/IP desteği, DOS yürütülebilir dosyasının Windows 95'in ağ yığınını dolaylı olarak çağırdığı özgün bir yapıyla hayata geçirildi
  • Bu, DOS ile Windows sınırında çalışan hibrit bir teknolojiydi ve 1990'ların ortasındaki oyun ağ teknolojilerinin geçiş dönemini gösteren bir örnek oldu
  • Daha sonra yalnızca Win32'ye geçişle sadeleşse de, o dönem için işletim sistemi geçişinde yaşanan teknik zorlukları ve yeniliği simgeleyen bir yapıydı

4 yorum

 
bungker 2025-11-21

O zamanlar John Carmack dendi mi, dâhiler arasında bile dâhi bir geliştiriciydi.

 
thinkpad 2025-11-20

Güzel bir yazıydı, okumaktan gerçekten keyif aldım.

 
ipuris 2025-11-20

Haha, eğlenceliymiş.

 
GN⁺ 2025-11-19
Hacker News görüşleri
  • Eskiden DJGPP ve DPMI ile doğrudan denemeler yaptığım günleri hatırlattı
    O zamanlar gerçekten gelecekten gelmiş bir teknoloji gibi hissettiriyordu
    Özellikle Star Wars: Dark Forces oynarken yükleme çok yavaştı diye DOS/4GW’yi başka bir DOS extender ile değiştirmeyi denemiştim; şaşırtıcı biçimde 3-5 kat hızlanmıştı
    Muhtemelen yeni extender gerçek moda geçmeden korumalı modda doğrudan disk donanımını çağırdığı içindi

  • Linux’un ilk zamanlarında, ağ desteği yokken KA9Q TCP/IP stack kullanıyorduk
    KA9Q kod bağlantısı
    Bu DOS’ta çalışıyordu ama Linux’a kolayca port edilebiliyordu
    Yakın zamanda yine bir CWSDPMI istemcisi kullandım; 32 bit programların hem DOS hem Windows’ta çalışmasını sağlıyor
    CWSDPMI wiki

  • Çocukken lehim yapmayı öğrenmemin nedeni null modem kablosunu kendim yapmak istememdi
    Sonra direnç diye bir şey olduğunu öğrendim ve paralel port için bir ses kartı olan Covox Speech Thing’i kendim yaptım
    Gerçekten çok keyifli zamanlardı

    • O paralel port ses kartı bir süre benim ana ses kartım oldu
      Maplin’den bir sürü büyük direnç alıp özensizce lehimledim ama ilk seferde kusursuz çalıştı
    • Lehim havyası kullanmama izin verilmediği için normal bir seri kabloyu kesip null modeme dönüştürdüm
      Arkadaşlarla OMF2097 oynamak için yapmıştım; tek bir klavye için kavga etmek zorunda kalmamak güzeldi
    • Ben de o dönemde lehim yapmayı öğrendim
      Kendi yaptığım cihazla Mod dosyaları çalmak ve onları taşınabilir hoparlörden duymak gerçekten harikaydı
      Sonradan flux’ı öğrenince lehim yapmak çok daha kolaylaştı
  • “DJGPP mühendisleri” ifadesini görünce, bunun aslında neredeyse tamamen DJ Delorie’den ibaret olduğunu hatırladım
    Tüm GCC toolchain’ini DOS/Windows’a port etmek gerçekten muazzam bir başarıydı
    Bunu id Software’in isteğiyle mi yaptı yoksa sadece eğlencesine mi bilmiyorum ama saygı duyuyorum

    • O zamanlar DJGPP’nin epey büyük bir topluluğu vardı ve Quake optimizasyonunda Charles Sandmann’ın da payı çok büyüktü
      Kendisi CWSDPMI’nin yazarıydı ve id ile doğrudan çalışmıştı
    • Ben de ikisi arasında gerçekten CWSDPMI hakkında iletişim olduğunu hatırlıyor gibiyim
      Açık kaynak bir proje için ifade biraz tuhaf kaçıyor ama doğru olma ihtimali yüksek
      Ayrıca Quake’in VM içinde çalışmasına şaşıranlar muhtemelen VM86 modunu bilmiyordur
    • DJ Delorie ile yapılmış bir röportajı gerçekten görmek isterim
    • Web sitesine baktım; üniversitedeyken atıcılık dersi aldığı yazıyordu
      ABD’de böyle beden eğitimi dersleri yaygın mı merak ediyorum
    • Programlamayı ilk kez DJGPP sayesinde öğrendim
  • “Chunnel” adı muhtemelen Channel Tunnel’dan geliyor

    • Ya da 1995’te yayınlanan Seinfeld’in “The Pool Guy” bölümündeki hayali ‘Chunnel’ filminden esinlenilmiş olabilir
  • Eskiden Quake’in TCP/IP multiplayer ayarlarını yapmak için TECHINFO.TXT okuduğumu hatırlıyorum
    Orada Beame & Whiteside TCP/IP stack kullanıldığı yazıyordu
    Yazılımı ftp.cdrom.com’dan bulup kurdum ama o zamanlar ağ bilgim yetersizdi, bu yüzden yapılandırması çok zordu
    Sonuçta gecikme yüksekti ve performans da kötüydü; WinQuake ile NetQuake oynamak çok daha iyiydi

  • Fabian’ın Quake ile ilgili araştırmalara başlamış gibi göründüğünü düşünüyorum

    • Gerçekten de chocolate-quake projesine katkı yaptı ve bug report da bıraktı
      Ben de kendi chocolate Doom 3 BFG fork’umda OpenGL sorunlarını çözme konusunda yardım almak isterdim
    • Sanırım o yöne gidiyor
      Ama Quake, Doom’dan çok daha karmaşık bir dünya, bu yüzden tek bir kitapta ele almak zor
  • 90’larda bir arkadaşın telefon numarasını çevirip modem bağlantısı kurarak Quake ya da Doom’u kolayca çok oyunculu oynayabiliyordunuz;
    bugün ise sunucu olmadan bunun neredeyse imkânsız hale gelmesi ironik

    • DOOM, Aralık 1993’ten itibaren seri multiplayer destekliyordu ve 1994’te IPX ağ desteği de gelmişti
      Başta TCP/IP yoktu ama sonra bu iş iDOOM TCP driver ile çözüldü
      Üniversite yurdunda test ettiğimde gerçekten devrim gibi gelmişti
    • Bugünlerde NAT sorununu çözmek için STUN sunucuları ya da Steam’in Steam Datagram Relay sistemi kullanılıyor
      Bir bakıma oyun motorunun içine gömülü Hamachi gibi
    • Acaba Tailscale ile bunu eskisi kadar kolay yapmanın bir yolu var mı merak ediyorum
    • Aslında router üzerinde port forwarding yapmak yeterli
      Ama artık birçok oyun şirketi skin satış gelirini korumak için özel sunucuları engelliyor
      Valve istisna olarak TF2 özel sunucularına izin verdi; Minecraft’ta da doğrulamayı kapatıp arkadaşlarla oynamak hâlâ mümkün
  • Windows 95 TCP/IP’yi yerleşik getirdiğinde, eskiden TCP’yi ayrıca kurma dönemi de kapanmış oldu

    • O zamanlar ağlar daha çok kurumsal dünyanın işiydi; evde kurulum yapmak neredeyse inek işi bir hobi sayılıyordu
      Ağ kartlarının tüketici tarafında yaygınlaşmasıyla dünya değişti
      Yine de Windows, ağ kartı yoksa TCP/IP’yi kurmuyordu ve ping komutu bile yoktu
      Bugün Windows 11’i ağ olmadan kurarsanız ne olur merak ediyorum
    • Windows 3.1 döneminde Trumpet Winsock kullanıyorduk
    • Windows 95’in TCP/IP stack’inin FreeBSD’den alındığı da söylenirdi
  • 25 yıl önce yazdığım DJGPP/NASM tutorial hâlâ Google aramalarında çıkıyor