Msx ergonomi ve kullanım kolaylığı olarak belki de en başarılı 8-bit makina olabilir. Sadece fişe takıp bir tablet ya da telefondan oyun dosyalarını yükleyip yön tuşları ve boşluk tuşu ile oynamaya başlayabilirsin. Adaptör yok, joystick yok, kablo karmaşası yok.
Üretim, malzeme ve klavye kalitesi de üst düzeyde diyebilirim, üretim maliyetleri rakip oldukları markalardan çok daha yüksek muhtemelen, en azından canlı gördüğüm Vestel ve Sony modellerinde böyleydi.
Vestel fc-200 özeline gelirsek çocukken saatlerce konami's soccer oynadığımızı hatırlarım eğlenceliydi de, tek kötü tarafı msx'in bu ilk jenerasyonunda hardware smooth scroll yok, sayılı oyunlarda yazılımsal olarak çözümler üretilmiş ama genelinde ekran bir yana doğru 8 piksel atlayarak kayıyor, oynanabilirliği ve gözü olumsuz etkiliyor. Özellikle shoot em up oyunlarında çok göze batıyor. İkinci nesilden sonra bu durum biraz düzeliyor, üçüncü nesilde tam çözülüyor, japonlar baya bir ayak diremiş gibi bu konuda 🙂
MSX aldatmacasını açıklıyorum!
Şaka şaka, adamlar 70'lerin sonunda hazırlıyorlar spec'i. O dönemde ellerinde bir grafik çipi var, c64'e örnek olmuş başta ama sonra neyse ki komodorcular ve spectrumcular kendilerini kurtarıp ikinci nesile geçmişler, oric eski sistem, amstrad'ı bilmiyorum, büyük olasılıkla yeni sistemdir.
Şöyle ki, bir grafik çipi var, VDP diyorlar. Bu çipin kendi ram'i var. Şahane bişey, kendi başına ayrı bilgisayar gibi takılıyor. Spectrum'da contention ve c64'de bad linelar falan var ama MSX'in çipi ayrı makine olduğundan o kendi ram'inden okuyup ekrana basıyor, cpu bomboş yatıyor.
Ayrı makine diyorum çünkü cpu ile ekran belleği arasında herhangi bir bağ yok. İşte sıkıntı da burda. Grafik çipinin bir i/o portu var, eğerki ram'a bişey yazacaksanız, önce bir registerine nereye yazacağınızı bildiriyorsunuz, sonra hangi değeri yazacağınızı, sonra da yaz komutu gönderiyorsunuz, grafik çipi registerindeki değeri video ram'e yazıyor. Yani elden ele elden ele data aktarıyorsunuz.
Zx Spectrumda şu komutla küt diye ekran belleğine cpu ilk elden yazar datayı ekranda anında görürsün. C64'de de durum aynı.
LD (hl),a
MSX'de de aynı cpu z80 var, ama ekrana yazmak için şöyle işlem var, kodu
şurdan aldım:
SetVdp_Write:
rlc h
rla
rlc h
rla
srl h
srl h
di
out (#99),a
ld a,14 + 128
out (#99),a
ld a,l
out (#99),a
ld a,h
or 64
ei
out (#99),a
ret
neyse ki her byte için bunu yapmak gerekmiyor, ardışık byteları yazmak için otomaik bir yöntemi var, bu byte'ı yazınca pointer otomatik olarak bir ileri gidiyor, bir sonra sadece yazılacak byte'ı veriyorsun, oraya koyuyor, ama bunlar hala outi outir gibi port komutları ile yapılıyor. fakat outi 16/21 ts. Spectrumda kullanılan en yavaş komut LD (HL),r 7ts. Pop/Push yöntemi ile 2 byte'ı 10ts'de yazıyorsun, byte başına 5ts zaman alıyor.
Hadi 3 kat yavaş out komutuna katlandık diyelim, eğerki ardışık adres basmıyorsanız şu yukarıdaki setupı yeni adres için yeniden yapmanız gerekiyor. Yetmiyor grafik çipiyle konuşurken sıra beklemek gerekiyor, işlemci hızı 3.3mhz'e düşüyormuş. Eee o zaman bütün avantajlar gitti, spectrumdan bile yavaş kaldın.
Bu da z80 kendi başına hayvan gibi çalışsa da, bir frame içinde o kadar byte göndermeyi mümkün kılmıyor. Düşük FPS garanti gibi, smooth scroll zaten hayal alemi.
Yani teoride tamam ama pratikte oyun oynamayı hedeflememişler gibi. MSX2'de de standard gerekleri sebebiyle bu durum düzelemiyor tabi, ama işlemci 4 kat hızlı olduğundan anca bir kısım rahatlamışlar. TurboR ile oralara birkaç yama yapmışlar, yardımcı kartuşlar kullanarak çözümler getirmişler ama sıkıntı z80 ile grafik çipi arasındaki bus darboğazında boğulmuşlar.
The end.