1982 yapımı ZX Spectrum'a masaüstü: 48 kilobayta sığan pencereli arayüz

Z80 assembly ile yazılan ZXdesk, üst üste binen pencereleri ve uygulamaları 48 kilobayta sığdırıyor. Projenin asıl değeri ise otuz yıllık bir hız kabulünü ölçerek çürütmesi.

1982 yapımı ZX Spectrum'a masaüstü: 48 kilobayta sığan pencereli arayüz
Teknoloji 21 Eylül 2026 5 dk okuma 3 okunma

Bir pencereyi fareyle tutup ekranda gezdirmek bugün kimsenin düşünmediği bir şey. 1982 yapımı bir ZX Spectrum'da ise bu iş, saniyede elli kez tekrarlanan ve tam 69.888 saat darbesi süren tek bir ekran karesinin içine sığdırılmak zorunda. ZXdesk adlı proje, tamamı Z80 assembly ile yazılmış bir masaüstü arayüzünü o kareye sığdırmayı başarmış: üst üste binen pencereler, açılır menüler, not defteri, saat, takvim ve iki bölmeli dosya yöneticisi — hepsi 48 kilobaytın içinde.

Projeyi mindbox77 takma adıyla yazan geliştirici, kodu MIT lisansıyla GitHub'da yayımladı; haber ilk kez donanım sitesi Hackaday'de duyuruldu. Ama projeyi ilginç kılan, çalışan bir masaüstünün varlığından çok geliştiricinin deponun içine bıraktığı şey: ölçüm defteri. Depodaki uzun teknik notlar, otuz yıldır Spectrum camiasında doğru bilinen birkaç rakamın aslında yanlış olduğunu, gerçek makinede ölçerek gösteriyor.

Sığdırılacak yer: 48 kilobayt ve hile yapan bir video yongası

Sinclair'in 1982'de piyasaya sürdüğü ZX Spectrum, 3,5 MHz hızında bir Z80 işlemci, 48 kilobayt bellek ve 256'ya 192 piksellik tek bitlik bir ekran taşıyordu. "Tek bit" şu demek: her piksel ya açık ya kapalı. Renk bilgisi piksele değil, 8'e 8'lik hücrelere veriliyordu ve bir hücre aynı anda yalnız iki renk taşıyabiliyordu. Spectrum'un efsanevi attribute clash (renk çakışması) sorunu buradan gelir: iki farklı renkteki nesne aynı hücreye düştüğünde biri ötekinin rengini bozar.

İkinci sorun daha sinsi. Ekran belleği, makinenin alt 16 kilobaytında duruyor ve görüntüyü çizen ULA yongası ekranı boyarken işlemciden çevrim çalıyor. Yani kodun nerede durduğu, ne kadar hızlı çalıştığını değiştiriyor.

ZXdesk bu iki sınırı aşmıyor — etrafından dolaşıyor. Geliştirici belleği ikiye bölmüş: 0x6000 ile 0x727C arası "yavaş bölge", yani ULA'nın çevrim çaldığı alan. Oradaki kuralı tek cümleyle yazmış: bu bölgedeki hiçbir kod bir kare içinde çalışmayacak. Sürükleme yolu, imleç yolu ve kesme işleyicisinin tamamı 0x8000 üzerindeki "hızlı bölge"de duruyor.

Folklor %50 diyordu, makine %14,7 dedi

Projenin bütün hız bütçesi, ekrana yazmanın yüzde 50 pahalıya geldiği varsayımıyla kurulmuş. Bu rakam Spectrum camiasında yıllardır dolaşan bir kabul. Geliştirici 1.024 baytlık bir dolguyu karenin farklı noktalarına kaydırarak ölçtüğünde başka bir sonuç çıkmış: en kötü durumda 13.473 saat darbesi, kenarlıktaki temiz ölçüm ise 11.744. Aradaki fark yüzde 14,7.

Bu, "bütçelerim üçte bir fazla temkinliymiş" demek. Depoda buna benzer birkaç ders daha var; hepsi aynı yöntemle, makinenin kendi saatine karşı ölçülerek bulunmuş.

Bir kare69.888 saat darbesi (48K), 70.908 (128K)
Ekran yazma cezası%14,7 (folklordaki değer %50)
Pencere çizimi71.274 darbe; yarısı yalnız 27 karakterlik metin
Sürükleme, önce96.010 darbe — bir karenin %137'si, 25 Hz
Sürükleme, sonra59.858 darbe, kare içinde, 50 Hz
Yığın (heap)8.112 bayt

Sürüklemeyi kareye sığdıran dört değişiklikten en büyüğü, pencereyi ekran dışı bir arabellekte bir kez kurup her karede blok halinde kopyalamak olmuş: 71.274 darbelik yeniden çizim 26.048'e inmiş. Pahalı olan taşımak değil, kurmakmış. Geliştiricinin "asıl sorun budur" diye baktığı dolgular ise toplam maliyetin yalnız beşte biri çıkmış — bir hafta boyunca yanlış yeri optimize etmekten ölçüm sayesinde kurtulduğunu yazıyor.

ZX Spectrum'un sekiz renkli ekran cikisini gosteren ornek gorsel
ZX Spectrum'un sekiz renkli ekran cikisini gosteren ornek gorsel — Z80Spectrum, CC BY-SA 4.0 (Wikimedia Commons)

Kesme ertelenmez, kaybolur

Deponun en öğretici bulgusu bu. Spectrum'un hızlı ekran doldurma yöntemi, yığın göstericisi SP'yi ekran belleğinin içinde yürüterek çalışır; bu sırada SP artık bir yığın olmadığı için kod kesmeleri kapatır. Yaygın kanı, kapalı kesmenin yalnız geciktiği yönünde. Geliştiricinin ölçtüğü şey bunun doğru olmadığı: Spectrum kesme sinyalini yalnız 32 saat darbesi boyunca tutup geri çekiyor. O 32 darbeyi kapalı geçiren bir kod, kesmeyi ertelemiyor — yok ediyor.

Bulgu önce bir tuhaflık olarak görülmüş: kare sınırını açıkça geçen bir dolgu, geçmediğini bildirmiş. Sonra doğrudan ölçülmüş — bir dolgu rutininde 500 komut sınırının 458'inde, ötekinde 752'nin 710'unda kesme reddediliyormuş.

Akla gelen çözüm, satır aralarında kesmeleri kısa süre açmak. Geliştirici bunun işe yaramadığını yazıyor, çünkü kesme bekleyen bir yerde durmuyor, gitmiş oluyor; dar bir açıklık onu ancak otuz satırda bir yakalıyor. Çalışan çözüm daha tuhaf: dolgu zinciri satırdan bir itme kısa tutuluyor, en soldaki iki bayt "borçlanıyor" ve bir tur sonra, SP artık oraya erişemeyecek konuma geçtiğinde ödeniyor. Böylece kesmeler baştan sona açık kalabiliyor. Bedeli satır başına yaklaşık 48 darbe; karşılığında kesme kaybı sıfıra iniyor.

Bölme işlemi olmayan bir makinede takvim

Aynı zorlama takvimde de görülüyor. Z80'de bölme komutu yok, oysa haftanın gününü bulmanın bilinen yöntemleri 4, 100 ve 400'e bölmek ister. ZXdesk bunun yerine 1 Ocak 1980'den — bir salı gününden — ileri sayıyor. Görüntüleyebildiği 1.200 ayın tamamı Python'un takvim kitaplığına karşı denetlenmiş.

Saat de benzer bir inceliğe sahip. Spectrum'un kesme hızı tam 50 Hz değil, 50,0801 Hz. Her elli kesmede bir saniye saymak günde iki dakika on sekiz saniye kaydırıyor. ZXdesk bunun yerine saniyeyi kimi zaman elli bir kesmeden sayıyor; bir saatlik ölçümde sapma günde yarım saniyeye iniyor.

Neyin bittiği, neyin bitmediği

ZXdesk bir işletim sistemi değil. Temel 48K Spectrum'da disk sürücüsü olmadığı için uygulamalar ayrı ayrı yüklenmiyor, arayüzün içine gömülü geliyor; yani çok görevli bir çekirdek yok, bir masaüstü kabuğu var. 128K makinede fazladan bellek bankaları RAM disk olarak kullanılıyor, kaset yüklemesi makinenin kendi ROM yordamıyla yapılıyor ve esxDOS desteği eylül 2026'da gerçek bir kart görüntüsüyle sınanıp çalışır duruma gelmiş.

Geliştirici eksikleri de yazmış: arkada kalan bir saat penceresi öne getirilene kadar son saatinde donuyor, çünkü pencere arabellekleri ekrandan kopyalanıyor. Not defterinde metin seçme, pano, geri alma ve satır kaydırma yok. Fare varlığını anlama yöntemi hâlâ bir tahmin ve faresiz makinesi olmadığı için sınayamıyor. Renk çakışmasının kendisi de çözülmüş değil: masaüstü, hücre sınırlarını bilerek çizen dolgularla o sınırla uyum içinde yaşıyor.

Sıradaki soru ZX Spectrum Next. Geliştirici 48K sistemi baştan taşınabilir olacak şekilde kurmuş ve depolama, uygulama modeli, ayarlar katmanı taşınmış. Taşınmayan tek şey pencere modeli olmuş: 28 MHz'lik, donanım katmanları ve sprite'ları olan Next'te pencereleri üst üste bindirmek yerine döşemek daha doğru geldiği için üst üste binmeyi çözen bütün makine orada işsiz kalıyor. Next sürümü ayrı bir depo olarak duruyor ve yayımlanmadı — geliştirici elinde Next olmadığı için, çalıştırmadığı kodu yayımlamama kuralına uyarak makinenin gelmesini bekliyor.

Fotoğraf: Bill Bertram, CC BY-SA 2.5, Wikimedia Commons

Haberi beğendin mi?
Paylaş WhatsApp X Facebook
Teknoloji Masası

Bu içerik, Yudum Teknoloji Masası editör ekibi tarafından derlenip yayına hazırlanmıştır. Güncel gelişmeler için haber akışını takip edebilirsiniz.

İlgili haberler

Yudum

1998'den beri, dünyanın her yerinden — sohbet, radyo, oyunlar ve daha fazlası.

Sohbete katıl Ücretsiz üye ol

Yalnız 18 yaş ve üstü — Yudum üzerindeki canlı sohbet, sesli ve görüntülü görüşmeler yetişkinler içindir. Neden?

2482
haber
5982
kimdir
836
tarif
383
rüya tabiri
34
test
204
üye