· kaynak Hacker News – Front Page (hnrss.org)
ZX Desk, 48K ZX Spectrum'a üst üste binen pencereler ve tam bir masaüstü getiriyor
ZX Desk, 48K ZX Spectrum'a üst üste binen pencereler, açılır menüler ve birlikte gelen uygulamalar getiren, Z80 assembly ile yazılmış bir GUI işletim sistemi; pencere sürükleme işlemlerini tek bir video kare içinde tamamlıyor.
48K'ya sığan bir masaüstü
mindbox77 adıyla yayın yapan bir geliştirici, ZX Desk'i yayınladı: 48K ZX Spectrum için tamamen Z80 assembly ile yazılmış, kaynağı GitHub'da bulunan grafiksel bir işletim ortamı. Depo, 19 Eylül 2026'da Hacker News ana sayfasına ulaştı. Projenin readme'sine göre sistem, odak (focus) desteğine sahip üst üste binen ve z-sıralı pencereler, açılır menülü kalıcı bir menü çubuğu, diyalog kutuları, bir not defteri, bir saat, bir takvim, iki panelli bir dosya yöneticisi ve davranışı gerçekten değiştiren bir ayarlar paneli sunuyor — hepsi 1982'de çıkmış bir makinenin 48K belleği içinde. Yazar, sistemin yalnızca emülasyon altında değil gerçek donanımda da çalıştığını ve bir pencere sürükleme işleminin 69.888 T-state'lik tek bir video kare içinde tamamlandığını bildiriyor.
Fikrin nereden geldiği
Readme, projeyi 1980'lerden kalmış tamamlanmamış bir hayal olarak sunuyor. Yazar, GEM için bir Atari ST istiyordu — masaüstü, pencereler, her an hazır bulunan menü çubuğu, bilgisayarı bir komut satırı değil bir ortam olarak hissettiren o duygu — ama sadece bir Spectrum alabiliyordu ve benzer bir şeyin parçalarını yazmaya başladı, bitirmeden. ZX Desk açıkça bir GEM portu değil; bu fikrin 3,5 MHz'lik bir Z80, 48K RAM, attribute clash'e yatkın tek bitlik bir ekran ve boyarken CPU'dan çevrim çalan bir video çipiyle sınırlanınca ne hâle geldiğinin ifadesi. Yazının boyunca süren metodolojik bir iddia var: neredeyse her cevap, makine hakkında akıl yürüterek değil onu ölçerek geldi ve bu sayılar, bu donanımı hedefleyenlerin işi tekrarlamak zorunda kalmaması için belgelendi.
Sistemin sundukları
Kempston fare, Kempston joystick ya da tam klavye matrisinden gelen girdi, on altı yuvalı bir olay halkasına yönlendiriliyor; readme, ana döngünün pencereye özgü hiçbir kod içermediğini belirtiyor. Depolama, altı vektörle açığa çıkarılan, değiştirilebilir backend'lerin bir kayıt defterinin arkasında duruyor: RAM, makinenin gerçek ROM rutinleri üzerinden banttan yükleme ve RAM disk olarak kullanılan 128K Spectrum'un yedek bankları; esxDOS için ayrılmış bir tanımlayıcı da mevcut. Bellek yönetimi gerçek bir heap — sahip baytlı 8.112 bayt — pencere arabelleklerini pencerelerinin boyutuna göre ayırıyor. Not defteri, saat, takvim, iki panelli commander dosya yöneticisi ve bir hakkında ekranı gibi uygulamalar; init, olay ve çizim (paint) rutinlerine artı örnek başına takas edilen duruma sahip tanımlayıcılardan oluşuyor. Ayarlar, bir sihirli bayt ve sürüm numarasıyla depolamaya kalıcı olarak yazılıyor ve açılışta geri okunuyor.
Altındaki mühendislik
Birkaç seçenek öne çıkıyor. Ana döngü kesmede (interrupt) bekliyor, işaretçi işini üst kenar boşluğunda yapıyor, bir pencere taşındığında video huzmesini bekliyor, yeniden çiziyor ve girdiyi yalnızca karenin sonunda okuyor — yazarın dediğine göre bu sıralama, huzme beklemeden önceki işi sabit tutuyor ve kare zamanlayıcısını tam olarak doğru kılan da bu. İsabet testi, her kontrol için beş baytlık satırları z sırasına göre önden arkaya doğru geziyor ve her aramadan önce modelden yeniden üretiliyor; böylece pencere konumlarının kopyası eskiyemiyor. Backend dağıtımı, bir backend seçildiğinde operandları yamalanmış elle yerleştirilmiş jump komutları kullanıyor; readme maliyeti hiçbir yazmacı (register) bozmadan on T-state olarak veriyor. Kontroller bilinçli olarak tekdüze — bir onay kutusu sınırı iki olan bir döngü kontrolü, bir radyo grubu sınırı N olan aynı kontrol — böylece ayarlar paneli, dosya listesi ve kayıt kutusu tek bir kod yolunu izliyor. Tam bellek haritası da yayımlandı: yavaş alt bölgeden $DF50'deki heap'e ve $FEFF'e kadar, üst sayfa ise bilinçli olarak kullanılmamış bırakılmış.
İnşası ve bir emülatör tuhaflığı
Araç zinciri bilinçli olarak küçük: pasmo assembler, tek bir assembly kaynak dosyasını bir build script'i aracılığıyla bant görüntüsüne dönüştürüyor; 128K modeli için bir makine bayrağı ve demo kayıtları, sentetik girdili koşular ile ham fare tanısı için build seçenekleri de mevcut. Readme dikkat çekici bir emülatör hatasını belgeliyor: macOS üzerinde Fuse 1.9.2, bir düğme basılı tutulurken Kempston fare hareketini iletmeyi durduruyor; bu yüzden oradaki pencere sürüklemede boşluk çubuğu kullanılıyor. Yazar bunun emülatörün suçu olduğunu açıkça belirtiyor, bunu adanmış bir tanı build'iyle gösteriyor ve gerçek bir Kempston farenin normal şekilde sürüklediğini söylüyor. Script destekli bir mod, etkileşimleri sentetik girdiden yeniden oynatıyor; böylece bir menü açıp bir pencereyi bir başkasının üzerinden sürükleme gibi bir eylem her seferinde aynı şekilde çalışıyor ve izlenmek yerine önceki koşumla karşılaştırılabiliyor.
Neden önemli
ZX Desk, masaüstü metaforunun — üst üste binen pencereler, menüler, olay kuyrukları, sanallaştırılmış depolama — modern donanım gerektirmeyip yalnızca disiplinli mühendislik ve dürüst ölçüm gerektirdiğinin kanıtı. Spectrum sınıfı makinelerde çalışan herkes için depo aynı zamanda bir başvuru malzemesi: kare bütçeleri, çekişme (contention) maliyetleri ve varsayımlara değil gerçek silisyum üzerinde hesaplanmış bir bellek düzeni. Daha geniş ders retro bilgisayarların da ötesine uzanıyor. Tekdüze soyutlamalar, katı bir kare çizelgesi ve sezgi yerine ölçüme dayandırılmış tasarım kararları, çok daha büyük ve hızlı sistemleri tutarlı tutan uygulamaların ta kendisi.
- #zx-spectrum
- #retro-computing
- #z80
- #assembly
- #gui