eski oyunlara...

14 August 08, Thursday @ 16:06

Amiga 500'de, Balance of Power adında 85 yapımı bir strateji oyunuyla epey bir boğuşmuştum. Aradan yıllar geçtikten sonra oyunun yapım aşamasını anlatan bir tasarım belgesini görüp okudum. Eğer oyun tasarımıyla yada geopolitik ile en ufak bir ilginiz varsa, mutlaka okumanızı tavsiye ederim.

Oyunda bir dünya haritası üzerinde, iki süper güçten birini yönetiyorduk, ve asker göndererek, teröristlere para ve silah yardımı yaparak, darbeleri destekleyerek, ambargolar koyarak kendi etki alanımızı genişletmeye çalışıyorduk. Oyunun niye güncel bilgilerle yeni bir sürümünün çıkmadığına ilişkin "bilgiler değişti ama süreçler hala aynı" yorumu çok ilginç. Chris Crawford, Tukyididesten bir alıntı yapıp "Savaşı kaçınılmaz kılan, Atinanın gücünün artışı, ve bunun Sparta'da uyandırdığı korkuydu" sözünde Atina ve Sparta'yı rahatlıkla tarihteki herhangi bir andaki iki devletle değiştirebileceğimizi söylüyor.

Bir diğer enteresan nokta, daha ziyade bellek sıkıntısı yüzünden oyundan çıkarılmış olan çok kutupluluk. Oyunda yalnızca iki süper güç karar veriyor, geri kalan devletler buna göre piyon olarak hareket ediyor. Özellikle güncel tarihe ve etrafımıza bakınca aslında çok daha gerçekçi olmuş bence. Neyse...

Geçenlerde firmware yüklemesi yapmak için dandik Windows istemcisine mecbur kaldığımız bir alet vardı. Biraz ters mühendislik ile Linux istemcisini yazıverdim. Benzer bir sorun yaşayan olursa diye bazı tiyoları buraya yazıyorum:

İlk önce, eldeki yazılımın USB işlemlerinin bir logunu -maalesef Windows üzerinde- almaya ihtiyacımız var. Bu işte en iyi sonucu sniffusb ile aldım. Bağlantıdan 1.8 sürümünü çekip, sniffusb.exe yi çalıştırın. Önce sürücüsünü yerleştirecek; sonra çıkan pencerede log alacağınız donanımı seçip, Install tuşuna basın. Aleti çıkarıp geri takın (yoksa devreye girmiyor), istemci yazılımınızı çalıştırıp bir süre aleti kullanın. Şimdi View ile logu görebilirsiniz.

Logu analiz edebilmek için USB spec belgesini el altında tutun. Çok kabaca ele alırsak; her takılan aygıtın (device) bir üretici (vendor) ve ürün (product) değeri var. Aygıtlar birden fazla yapılandırma (configuration) içerebiliyorlar. Flash disk + wireless stick gibi donanımlar, üzerindeki anahtarla yada yazılım yoluyla bu iki yapılandırmadan birine geçebiliyor mesela. Her yapılandırma bir veya birden fazla arayüz (interface) içeriyor. Bu arayüzler de, mesela mikrofonlu bir webcam'in görüntü ve ses işlemlerine karşılık gelebilir. Her arayüzün de, bir veya daha fazla bitim noktası (endpoint) var. Bu noktalar bir nevi soket gibi, datayı bu noktalara yolluyor ve alıyoruz.

Sıfır numaralı bitim noktası, sistemin kontrol iletişimi için kullanılıyor. Diğer noktalar ise bulk (yavaş ve garantili büyük boyutlu veri aktarımı), interrupt (mouse vb gibi sürekli ve önemli küçük veriler) yada isochronous (hızlı ve sabit bant genişlikte, garanti istemeyen veriler) iletişim modlarında veri aktarmak için kullanılabilmekteler. Eğer lsusb -v komutunu verirseniz, aygıtların bütün bu bitim noktalarını ve aktarım tipi, bant genişliği vb gibi özelliklerini görebilirsiniz.

Bu noktada çeşitli tahminlerde bulunmak gerekiyor. Mesela yükleyici logunda, firmware boyutundan bi parça büyük bir bulk transferin firmware ve başlık bilgileri içerdiğini anlamak kolay. Aynı boyda değişik içerikli iki firmware yollayınca değişen küçük kısım, bize başlıkta bir kontrol toplamı olduğu bilgisini veriyor. Değerlere çeşitli endianness hallerinde rastlamak mümkün olduğu için dikkatli olmak gerekiyor. Buradan sonrası çeşitli işlemlerin ne loglar oluşturduğuna bakmak, şekil tanıma yetenekleriniz ve bolca deneme yanılmaya dayanıyor. Benzeri işler yapan açık protokollerde ne yapıldığını bilmek de işinize yarayabilir. Hadi hayırlı ters mühendislikler :D

Post a comment

Text: