- 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
O zamanlar John Carmack dendi mi, dâhiler arasında bile dâhi bir geliştiriciydi.
Güzel bir yazıydı, okumaktan gerçekten keyif aldım.
Haha, eğlenceliymiş.
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ı
Maplin’den bir sürü büyük direnç alıp özensizce lehimledim ama ilk seferde kusursuz çalıştı
Arkadaşlarla OMF2097 oynamak için yapmıştım; tek bir klavye için kavga etmek zorunda kalmamak güzeldi
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
Kendisi CWSDPMI’nin yazarıydı ve id ile doğrudan çalışmıştı
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
ABD’de böyle beden eğitimi dersleri yaygın mı merak ediyorum
“Chunnel” adı muhtemelen Channel Tunnel’dan geliyor
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
Ben de kendi chocolate Doom 3 BFG fork’umda OpenGL sorunlarını çözme konusunda yardım almak isterdim
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
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
Bir bakıma oyun motorunun içine gömülü Hamachi gibi
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
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
25 yıl önce yazdığım DJGPP/NASM tutorial hâlâ Google aramalarında çıkıyor