Bagaimana file executable Quake (`quake.exe`) bisa memiliki stack TCP/IP
(fabiensanglard.net)- Quake yang dirilis pada 1996 menghadapi tiga perubahan teknologi sekaligus: akselerator 3D, internet, dan transisi dari MS-DOS ke Windows 95
- id Software memanfaatkan kompiler
djgppdan struktur kompatibel DPMI untuk membuat satu file executable yang dapat berjalan baik di DOS maupun Windows 95 - Melalui sistem ‘Chunnel’ dari Mpath, Quake versi DOS dibuat agar bisa mengakses stack Winsock TCP/IP milik Windows 95
- Struktur ini terdiri dari komponen seperti
quakeudp.dll,genvxd.dll, danmgenvxd.vxd, yang bertindak sebagai perantara agar executable DOS dapat berkomunikasi dengan API jaringan Win32 - Setelah itu, id Software beralih ke executable khusus Win32 (WinQuake, GLQuake) sehingga struktur rumit ini pun menghilang
Quake dan masa transisi sistem operasi
- Antara 1996 hingga 1997, pangsa pasar MS-DOS turun setengahnya, dan Microsoft mendorong transisi ke Windows 95 dan NT
- Sebagian pengembang (misalnya Blizzard North) membuat game khusus Windows 95, tetapi id Software mendukung DOS dan Windows sekaligus lewat satu executable (
quake.exe) quake.exedirancang agar kompatibel dengancwsdpmi.exeuntuk DOS atau server DPMI bawaan Windows 95, dengan menggunakan klien DPMI dari DJGPP- Insinyur Microsoft Raymond Chen menyebutnya sebagai “contoh menakjubkan dari program yang tetap berjalan normal di extender yang sangat berbeda”
Menjalankan Quake di lingkungan DOS
- Untuk menjalankan Quake di DOS, hanya diperlukan empat file:
quake.exe,config.cfg,pak0.pak, dancwsdpmi.exe - Mode multipemain mendukung empat cara: modem, NullModem, IPX, dan TCP/IP
- IPX digunakan untuk LAN, sedangkan TCP/IP untuk internet, tetapi DOS tidak menyediakan stack TCP/IP secara bawaan
- Satu-satunya TSR TCP/IP untuk DOS adalah BWNFS dari Beame & Whiteside, dengan harga 395 dolar AS (pada 1996), sehingga sangat mahal
Menjalankan di lingkungan Windows 95
- Saat
quake.exedijalankan di virtual DOS box (dos-box) milik Windows 95, ia bekerja dengan cara yang sama - Karena menggunakan server DPMI Windows 95,
cwsdpmi.exetidak lagi diperlukan - Eksekusinya berjalan lancar, tetapi membutuhkan RAM minimal 16MB, dengan overhead memori yang lebih besar dibanding DOS
- Akses VGA diizinkan secara langsung, sehingga dapat berjalan di layar penuh tanpa penurunan performa
q95.bat dan Chunnel dari Mpath
q95.batbukan sekadar skrip untuk menjalankan Quake, tetapi juga mengaktifkan koneksi TCP/IP melalui sistem tunneling Winsock (Chunnel) milik Mpath- Mpath Interactive mengoperasikan layanan game online (Mplayer) dan mendukung permainan internet untuk berbagai game termasuk Quake dan Unreal
- Pada masa itu, insinyur Mpath Larry Hastings menceritakan pengalaman bermain internet deathmatch melawan tim id Software pada build awal Quake
- Mpath menerima source code Quake, lalu memodifikasinya agar dapat berkomunikasi dengan stack jaringan Mplayer, dan melisensikan teknologi Chunnel kepada id
Struktur teknis Chunnel
q95.batmenjalankanqlaunch.exe, yang kemudian memuatquakeudp.dllquakeudp.dllberfungsi sebagai jembatan ke Winsock (wsock32.dll)- Melalui
genvxd.dll, ia memuat driver perangkat virtualmgenvxd.vxddan berkomunikasi dengan Win32 lewat interupsi0x48
- Implementasi soket BSD di Quake (
mpplc.c) adalah kode dari Mpath, yang meneruskan panggilan jaringan melalui interupsi perangkat lunak genvxd.dllkemudian melakukan unmarshalling atas panggilan tersebut dan meneruskannya ke Winsock- Simbol di
mgenvxd.vxdmemuat nama John Cash - Teknologi ini merupakan teknologi berpaten milik Mpath, dan source code-nya tidak dibuka
- Setelah Desember 1996, id Software beralih ke executable khusus Win32 (WinQuake, GLQuake, QuakeWorld) sehingga struktur Chunnel ditinggalkan
Kesimpulan
- Dukungan TCP/IP di Quake diwujudkan lewat struktur kreatif yang membuat executable DOS secara tidak langsung memanggil stack jaringan Windows 95
- Ini adalah teknologi hibrida yang bekerja di batas antara DOS dan Windows, sekaligus contoh masa transisi jaringan game pada pertengahan 1990-an
- Setelah peralihan penuh ke Win32, semuanya menjadi lebih sederhana, tetapi pada masanya struktur ini melambangkan tantangan teknis dan inovasi di era transisi sistem operasi
4 komentar
Pada masa itu, jika bicara soal John Carmack, dia benar-benar pengembang jenius di atas para jenius.
Saya sangat menikmati membaca tulisan yang bagus ini.
Haha, lucu ya.
Komentar Hacker News
Mengingatkan pada masa dulu bereksperimen langsung dengan DJGPP dan DPMI
Waktu itu rasanya benar-benar seperti teknologi masa depan
Terutama saat memainkan Star Wars: Dark Forces, loading-nya terlalu lambat jadi aku mencoba mengganti DOS/4GW dengan DOS extender lain, dan ternyata 3–5 kali lebih cepat
Mungkin karena extender yang baru bisa memanggil perangkat keras disk langsung dari protected mode tanpa berpindah ke real mode
Pada awal-awal Linux, saat belum ada networking, kami memakai KA9Q TCP/IP stack
Tautan kode KA9Q
Ini berjalan di DOS, tetapi mudah di-port ke Linux
Belakangan ini aku juga mencoba klien CWSDPMI, yang memungkinkan program 32-bit berjalan di DOS dan Windows
Wiki CWSDPMI
Alasan aku belajar menyolder waktu kecil adalah untuk membuat kabel null-modem sendiri
Setelah itu aku jadi tahu keberadaan resistor, lalu membuat sendiri kartu suara untuk port paralel, Covox Speech Thing
Masa-masa itu benar-benar menyenangkan
Aku membeli banyak resistor besar di Maplin dan menyoldernya dengan agak asal, tapi tetap langsung berfungsi sempurna
Aku membuatnya supaya bisa main OMF2097 bareng teman-teman, dan enak karena tidak perlu berebut satu keyboard
Bisa memutar file Mod dengan perangkat rakitan sendiri lalu mendengarkannya lewat speaker portabel terasa sangat keren
Setelah mengenal flux, menyolder jadi jauh lebih mudah
Melihat ungkapan “para engineer DJGPP” membuatku teringat bahwa pada dasarnya itu adalah satu orang, DJ Delorie
Mem-port seluruh toolchain GCC ke DOS/Windows benar-benar pencapaian yang luar biasa
Aku tidak tahu apakah dia menambahkan fitur atas permintaan id Software atau hanya untuk bersenang-senang, tetapi tetap sangat mengagumkan
Dia adalah penulis CWSDPMI dan memang bekerja langsung dengan id
Ungkapannya memang agak aneh untuk proyek open source, tapi kemungkinan besar memang benar
Dan kalau ada yang heran Quake bisa berjalan di VM, mungkin itu karena mereka tidak tahu mode VM86
Aku jadi penasaran apakah kelas olahraga seperti itu umum di Amerika Serikat
Nama “Chunnel” tampaknya diambil dari Channel Tunnel
Aku ingat dulu membaca TECHINFO.TXT saat mencoba menyiapkan multiplayer TCP/IP untuk Quake
Di sana tertulis bahwa game itu memakai Beame & Whiteside TCP/IP stack
Aku mengambil perangkat lunaknya dari ftp.cdrom.com dan memasangnya, tetapi waktu itu pengetahuanku soal jaringan masih kurang jadi konfigurasinya sangat sulit
Pada akhirnya latensinya tinggi dan performanya buruk, jadi bermain NetQuake lewat WinQuake jauh lebih baik
Rasanya Fabian mulai melakukan riset terkait Quake
Aku juga ingin mendapatkan bantuannya untuk menyelesaikan masalah OpenGL di fork chocolate Doom 3 BFG milikku
Tetapi Quake adalah dunia yang jauh lebih kompleks daripada Doom, jadi sulit membahas semuanya hanya dalam satu buku
Ironisnya, pada era 90-an kita bisa dengan mudah bermain multiplayer Quake atau Doom hanya dengan menghubungi nomor telepon teman lewat modem,
sedangkan sekarang hampir mustahil tanpa server
Awalnya belum ada TCP/IP, tetapi kemudian bisa diatasi dengan driver iDOOM TCP
Saat diuji di asrama kampus, itu terasa benar-benar revolusioner
Konsepnya semacam Hamachi di dalam engine
Hanya saja sekarang banyak perusahaan game memblokir server pribadi demi pendapatan dari penjualan skin
Valve cukup jadi pengecualian karena masih mengizinkan server kustom TF2, dan Minecraft juga masih bisa dimainkan bareng teman dengan autentikasi dimatikan
Ketika Windows 95 mulai menyertakan TCP/IP secara bawaan, berakhirlah masa ketika kita harus menginstal TCP secara terpisah
Dunia berubah ketika kartu jaringan mulai tersebar ke konsumen
Namun Windows tidak akan memasang TCP/IP kalau tidak ada kartu jaringan, dan bahkan perintah ping pun tidak ada
Aku penasaran bagaimana perilaku Windows 11 sekarang jika dipasang tanpa jaringan
Sampai sekarang tutorial DJGPP/NASM yang kutulis 25 tahun lalu masih muncul di hasil pencarian Google