1 puan yazan GN⁺ 2024-11-23 | 1 yorum | WhatsApp'ta paylaş
  • 1984’ün ilk Macintosh oyunlarından biri olan ChipWits, 40. yılı vesilesiyle orijinal Mac ve Commodore 64 FORTH kaynak kodunu açık kaynak olarak yayımladı
  • Yayının amacı, oyunun mirasını korumak ve 1984’te 8 bit mikrobilgisayarlarda çapraz platform geliştirmenin nasıl yapıldığını paylaşmak
  • Doug Sharp’ın sakladığı 40 yıllık disklerden veriler kurtarıldı; bazı bozuk sektörler olsa da disklerin çoğu sorunsuz okundu
  • Mac sürümünün tüm kaynağı yaklaşık 3.000 satır FORTH iken modernleştirilmiş port 35.000 satır C# seviyesinde; bu da dönemin kodundaki sıkılığı ve kısıtları gösteriyor
  • Proje, orijinal disk imajlarını ve çıkarılmış kodu GitHub’da yayımladı; en güncel kaynakların belirlenmesi, derleme yöntemlerinin yazılması ve sprite çıkarma çalışmaları toplulukla birlikte yürütülmek isteniyor

ChipWits’in orijinal kodunun yayımlanması

  • ChipWits’in 40. yılı anısına orijinal Mac ve Commodore 64 FORTH kaynak kodu açık kaynak olarak yayımlandı
  • Kurtarılan orijinal kod ve disk imajları chipwits/chipwits-forth deposunda düzenlendi
  • Yayının amacı, ChipWits’in mirasını korumak ve 1984’te 8 bit mikrobilgisayarlar için çapraz platform geliştirme deneyimini paylaşmak
  • Orijinal sistemlere aşina olanlar kaynakların incelenmesine ve düzenlenmesine katılabilir; proje, iş birliği için ChipWits Discord Server üzerinden çağrı yapıyor

1984’te neden FORTH seçildi?

  • ChipWits, 1984’te Macintosh için çıkan ilk oyunlardan biriydi
  • Ortak yaratıcılar Doug Sharp ve Mike Johnston, eğitim amaçlı oyunları 8 bit mikrobilgisayarlar arasında port ederken ilk özgün oyunları ChipWits’i tasarladı
  • Oyun, Rocky’s Boots, Logo gibi dönemin programlama oyunlarından etkilenen bir robot programlama oyunu
  • 1984’te Mac geliştirme ortamı sınırlıydı ve başlıca geliştirme yöntemi bir Apple Lisa satın almaktı
    • Apple Lisa’nın orijinal fiyatı $9.995 idi; bugünkü değerle $30.373’e karşılık geliyor
    • Bağımsız bir oyun stüdyosu için karşılanması zor bir maliyet olduğundan Doug ve Mike, doğrudan Mac üzerinde çalışan MacForth Plus ile geliştirme yaptı
  • O dönem birçok 8 bit mikrobilgisayarda FORTH varyantları bulunduğu için, ileride port etme düşünülerek uygun bir dil seçimiydi
  • Geliştirme Nisan 1984’te başladı; ilk sürümün geliştirilmesi ve yayımlanması yaklaşık 7 ay sürdü ve Noel sezonuna yetiştirildi

Commodore 64 ve Apple II portları

  • Epyx, ChipWits’in yayıncısı olacaktı ve Commodore 64 en büyük pazardı
  • Epyx’in Mac oyunu yoktu; Brainworks ise o dönemde Apple’ın güçlü olduğu eğitim pazarını hedeflediğinden Epyx yalnızca Commodore 64 sürümünü yayımladı
  • C64 portu 1985’te tamamlandı ve Super Forth 64 ile yazıldı
  • Commodore 64’e port etmek zordu çünkü Mac ile aynı genel UI tasarımını korumak gerekiyordu
    • Fare yerine joystick ile çalışan bir pull-down menü sistemi geliştirilmeliydi
    • Renkli grafikler ve SID çipi sesi eklendi
    • Mac diskinin 400KB kapasitesi yerine her şey 165KB diske sığdırılmalıydı
    • Mac’in 128KB RAM’i yerine 64KB RAM ve daha yavaş bir işlemci kullanılmalıydı
  • Commodore 64 sürümünün başarısından sonra Apple II sürümü de yapıldı; o da bir FORTH varyantıyla yazıldı

Çıkış sonrası değerlendirmeler ve orijinal sürümün çalıştırılması

  • ChipWits, çıktıktan sonra çeşitli incelemeler ve ödüller aldı
  • MacUser Editor’s Choice 1986 Award, ChipWits’i “programlama kavramlarına en keyifli giriş” olarak değerlendirdi; ikon tabanlı dilini ve eğitim tasarımını övdü
  • Macazine, ChipWits’in Macintosh kullanıcıları ve çocuklar arasında kült bir hit olacağını öngördü
  • MacWorld, programlamayı seviyorsanız ChipWits’i seveceğinizi yazdı
  • Creative Computing, sabah 4.30’da çizgi film robotuna küfredilen bir sahne içeren bir inceleme yayımladı
  • 2008’de Maclife.com, ChipWits’i tüm zamanların Top 10 Apple II / Mac Games listesine aldı
  • Orijinal sürüm, açık kaynak projeleri Emularity ve Apple2js aracılığıyla tarayıcı emülatöründe çalıştırılabilecek şekilde hazırlandı

40 yıllık disklerin kurtarılması

  • Yeni ChipWits sürümü üzerinde çalışılırken Doug Sharp’ın sakladığı orijinal diskler bulundu
  • 3,5 inç disketler ve 5,25 inç floppy diskler 40 yıl boyunca ev ortamında saklanmıştı; yine de disklerin çoğu bozuk sektör olmadan okundu
  • Commodore 64 disklerinin kurtarılmasında eBay’den satın alınan 1541 Commodore 64 Disk Drive kullanıldı
    • Veriler, USB XoomFloppy adaptörü aracılığıyla modern PC’de okundu
  • Mac 3,5 inç disketleri, Mac’in kendine özgü sektör yerleşimi nedeniyle modern sürücülerin standart yöntemiyle okunamıyordu
    • Mac, disk kapasitesini 800KB’a çıkarmak için kendine özgü bir sektör düzeni kullanıyordu
    • PowerMac G3 WallStreet, 3,5 inç sürücüye ve ağ yığınına sahip olduğu için köprü sistem olarak kullanıldı; ancak yeni MacOS’ta 400KB desteği devre dışı bırakıldığından yalnızca 800KB diskleri okuyabildi
    • Daha sonra bir hayranın önerisiyle USB disk sürücüsü kontrolü için özel donanım denetleyicisi GreaseWeazle kullanıldı ve bu yöntem sorunsuz çalıştı
  • Tüm diskler blok düzeyinde imajlanıp GitHub deposunda düzenlendi
    • Dosya adlarında disk etiketleri kullanıldı
    • Bozuk sektör algılandığında dosya adının başına bad eklendi
    • Modern bilgisayarlarda daha kolay okunması için bloklar Python betiğiyle çıkarıldı ve UTF-8 ASCII dosyaları olarak yeniden biçimlendirildi
    • Commodore 64’e özgü karakter kodlaması PETSCII, ASCII’ye dönüştürüldü

FORTH kaynaklarında görülen geliştirme biçimi

  • Tüm orijinal disk imajları ve kod chipwits/chipwits-forth adresinde görülebilir
  • Mac için ChipWits’in tüm kaynağı yaklaşık 3.000 satır FORTH
  • Modernleştirilmiş port şimdiden 35.000 satır C# seviyesine ulaştı; bu da orijinal FORTH kodunun ne kadar yoğun olduğunu öne çıkarıyor
  • Ayrı bir yazı olan Forth Code for Electrocrabs in 1984 ChipWits Deciphered, elektrik yengeçlerini (electrocrabs) kontrol eden FORTH kodundan bir “screen”i analiz ediyor
  • FORTH, yığın tabanlı bir dildir ve Reverse Polish Notation’a benzer
    • 1 + 1 yerine 1 1 + biçiminde yazılır
    • if random(3) == 1 yerine 3 irnd 1 = if biçimi kullanılır

Kod örnekleriyle 1984’te oyun gerçekleştirme

  • Mac sürümündeki robot hareket kodu, modern oyun geliştirmedeki gibi kare bazlı render döngüsünü ayrı tutmuyor
    • Oyun mantığı ve grafik render etme emirsel kod içinde birlikte iç içe geçmiş durumda
    • Animasyon, döngü içinde pikselleri doğrudan render ederek uygulanıyor
    • Boş zemin karesine mi gidildiği, duvara mı çarpıldığı, bombaya mı temas edildiği birkaç kelimelik kodla işleniyor
    • ?boom tanımı, bombaya temas edildiğinde oyunun bitip bitmeyeceğine kadar karar veriyor
    • Robotun konumuna bağlı olarak skora 0 ekleniyor; böylece robot geçerken silmiş olabileceği skor göstergesinin zorla yeniden çizilmesi sağlanıyor
  • Commodore 64 sürümündeki sprite tanımları, kod ve asset verilerinin birlikte iç içe geçtiği yaklaşımı gösteriyor
    • FORTH kaynağı dosya olarak değil, numaralandırılmış screen birimleri olarak saklanıyor ve gereken sırayla yükleniyor
    • C64 siyah-beyaz sprite’ları 24×21 piksel; bir ekranda yalnızca 8 sprite kullanılabiliyordu
    • 4 renkli sprite seçildiğinde çözünürlük 12×21’e düşüyor ve pikseller iki kat genişliğe çıkıyor
    • ChipWit karakteri, birden fazla sprite üst üste bindirilerek render ediliyor; bu, vintage çizgi filmlerdeki cel animasyonuna benzer bir yöntem
    • Bu tercih, mevcut sprite’ların çoğunu ChipWit için kullanma pahasına daha net bir görüntü ve parça bazlı animasyon sağladı
  • Mac sürümündeki eşya puan tablosunda veriler tek bir screen’e sığacak şekilde sıkıştırılmış
    • ( 110584 dws) gibi notasyonlar screen’in tarih damgasıdır; 110584, 5 Kasım 1984’ü, dws ise Douglass Walter Sharp’ı ifade eder
    • Söz konusu screen, nihai sürümden önce son değiştirilen screen’lerden biri gibi görünüyor; son değiştirilen screen 8 Kasım tarihli
    • d,, değerleri 10 ile çarpıp saklayacak şekilde tanımlanmıştı; böylece 150 puan 15 d gibi ifade edilebiliyordu
    • Bu yöntem, tablo hizalamasını koruyarak tek bir screen’e sığdırmaya yardımcı oldu ve sürümden önce puan dengesi yapılırken tüm puan değerlerini ayarlamayı kolaylaştırmış olabilir

Reboot ve topluluk çalışmaları

  • Ekip, orijinal FORTH sürümünün yayımlanmasından ayrı olarak modernleştirilmiş ChipWits üzerinde de çalışıyor
  • Reboot sürümü, orijinalin eğlencesini ve bilgisayar bilimi ciddiyetini korurken öğrenme eğrisinden rekabetçi küresel liderlik tablosuna kadar birçok yönü iyileştirmeyi hedefliyor
  • ChipWits’i Steam’de istek listenize eklerseniz final sürümünün çıkış bildirimini alabilirsiniz
  • Orijinal FORTH koduyla ilgili mevcut GitHub issue’larının kısa vadeli hedefleri şöyle
    • raw disk image’lardan ilgili tüm kaynak kodun çıkarılıp çıkarılmadığını doğrulamak
    • Bazı kaynak dosyalarındaki hizalama sorunlarını düzeltmek
      • Bazıları 40 karakter genişliğinde, bazıları 64 karakter genişliğinde
    • Hangi diskin en güncel kaynak kodu içerdiğini belirlemek
    • Mac ve C64’te kaynaktan nasıl derleneceğini yazmak
    • Disklerden raw sprite ve görüntüleri çıkarıp .png dosyalarına dönüştürmek
  • Nihai hedef, modern PC’ler için topluluk tarafından sürdürülen FORTH sürümü ChipWits

1 yorum

 
GN⁺ 2024-11-23
Hacker News yorumları
  • ChipWits'in neden FORTH ile yapıldığına dair 1984 tarihli bir yazı var
    https://chipwits.com/2023/04/08/forth-programming-language-g...

    • ChipWits, 1984'te 6 yaşındayken ilk bilgisayarı olan Apple Macintosh'ta oynadığı ilk oyunlardan biriymiş
      Sevdiğim bir oyunu yaptığınız için teşekkürler; yeni demoyu da indirdim ve Steam istek listeme ekledim
  • Forth, birkaç yıldır öğrenmek istediğim bir dil
    Eski bilgisayarlarda hızlı program istiyorsanız assembly, yavaş olması sorun değilse BASIC kullanırdınız; Forth'un ise oldukça yüksek seviyeli görünüp bir yandan da “orta hızda” bir dil olarak arada kalması ilginç

    • Forth, uzun süre C ile birlikte donanım geliştirme ve sürücüler tarafında standart dildi ve bugün de birçok yerde kullanılıyor
      Yığın tabanlı bir dil
      https://www.forth.com/starting-forth/
    • Forth'u yerel olarak çalıştıran tek kartlı bilgisayarlar satın alabilirsiniz
      USB kablosunu bilgisayarınıza takıp yalnızca bir terminal programı açmanız yeterli; böylece dile tamamen dalmak için çok uygun oluyor
      Ancak Avustralya'dan gelen ürünlerin ulaşması aylar sürebilir, bu yüzden önce daha yakın bir tedarikçi aramak iyi olabilir
      Bir diğer iyi yöntem de 1984'teki gibi öğrenmek: modern bir bilgisayarda Commodore 64 veya Apple ][ emülatörü çalıştırıp içine bir Forth geliştirme ortamı kurabilirsiniz
      O dönemin belgeleri tamamen yeni başlayanlara yönelik yazıldığından takip etmesi çok kolay ve internette ücretsiz taranmış PDF'ler de bolca var
    • Oyuncak bir Forth yorumlayıcısı yapmayı, dili öğrenmenin iyi bir yolu olarak görüyorum
      Kolay ve eğlenceliydi ama belli bir noktaya kadar saçma derecede kolay olduğundan, bazılarına fazla temel gelebilir ya da oyuncak bir uygulamanın ötesine geçme isteği yaratabilir
    • Forth çok hızlıdır; naif biçimde yazılmış assembly'den bile hızlı olabilir, ama kesinlikle yüksek seviyeli bir dil değildir
      Yığını elle yönetmeniz gerekir, bu da epey zahmetlidir; yine de FORTH'u kendiniz yazmak eğlencelidir. Bunu mutlaka assembly ile yapmanız gerekmez; geçmişte C++ ile Forth benzeri bir betik dili yazmışlığım da var
    • Eski 8 bit ev bilgisayarları, gençler ve çocuklar düşünülerek tasarlanmıştı; Alan Kay'in etkisi de olmuş olabilir
      BASIC, “Beginner's All-purpose Symbolic Instruction Code” açılımıyla buna gayet uyuyordu
      Amstrad CPC 6128 için eğitim amaçlı bir Lisp lehçesi olan Logo'nun uygulaması da ayrı bir diskle verilirdi ve çocukken o association list beni gerçekten sarsmıştı
      O dönemde “açık kaynak” yaygın bir kavram değildi; çeşitli dillerin derleyici ve yorumlayıcıları ise profesyonel ticari araçlardı
      [1] https://en.wikipedia.org/wiki/Amstrad_CPC#Other_languages
      [2] https://en.wikipedia.org/wiki/An_Open_Letter_to_Hobbyists
  • Oldukça havalı görünüyor
    Bununla bağlantılı olarak http://tumbleforth.hardcoded.net/ da var; bence ona bakmak da oldukça keyifli. Bunu sonuna kadar bitiren biri varsa, deneyimin nasıl olduğunu merak ediyorum

    • İşlerin sakin olduğu bir haftada bunun yaklaşık yarısına kadar ilerledim ve bana üniversitedeki donanım dersimi hatırlattı
      Hesaplamaya farklı bir gözle bakmamı sağladı
      Hâlâ genç ve deneyimsizim ama geriye dönüp bakınca, geçmişte donanım kısıtları yüzünden belirli soyutlamaların seçildiğini ve bugünkü programlama dillerinin “evrim dallarında” iyi yaşlanmamış soyutlamaların birikip yük taşıyan bir ıvır zıvır katmanı oluşturduğunu düşünüyorum. Diğer mühendislik projelerine benziyor
      Collapse OS bugün pratik olmayabilir, ama birden fazla soyutlama katmanından kurtulmanın verdiği bir özgürlük hissi var. Korkunç bir geliştirici deneyimi yaşamadan 1960'lar tarzı hesaplamanın tadını çıkarmanın bir yolu gibi geliyor
      Şu anki gösterişli projem, bunların izinden gidip Dusk OS'yi bir sanal makinede derlemek, sonra fiziksel bir makineye taşımak, ardından C ile Dusk OS için bir Scheme yorumlayıcısı yazıp dilediğim gibi genişletmek
      Ama oraya gelmeden önce aşılması gereken birkaç nehir var. Python ile birkaç saat içinde bir Scheme yorumlayıcısı yaptım, sonra birkaç saat daha harcayıp scanner/tokenizer kısmını geliştirdim. Şimdi C ile bir Scheme yorumlayıcısını nasıl uygulamam gerektiğini görmek için Crafting Interpreters okuyorum. C yorumlayıcısını yaptıktan sonra bu kılavuza tekrar dönüp DuskOS'un içine balıklama dalmayı düşünüyorum
    • Daha yeni bakmaya başladım, paylaştığın için teşekkürler
      Yazarın üslubu şimdiden hoşuma gitti
      Mesela:

      Much terser than the C version right?
      This little assembler crash course gives us a better understanding of what is compiled by the C compiler, but not how it compiles it. We don't know how it's ran either. To know that, we'd have to dig through software that weighs millions of lines of code. Maybe you'd have the patience to do it, I don't, so let's continue tumbling down the rabbit hole. We'll go bare metal and then build an operating system of our own, with a C compiler of our own. It's simpler this way.
      What’s a linker? Aw, forget about it, it’s another piece of overcomplicated software that has convinced the world that it’s essential. We won’t need one in what’s coming.

    • Tumble Forth serisinin yazarı Virgil Dupras, tamamen özel bir Forth ile yazılmış DuskOS adlı bir işletim sistemi de geliştiriyor
      İstikrarlı ve muazzam üretkenliği etkileyici. Collapse felsefesine tamamen katılmıyorum ama DuskOS mailing list'i, sadece takip etmek için tam uygun yoğunlukta bir trafiğe sahip
      Virgil'in çalışmalarını görünce ben de biraz Forth denedim ve geçen yıl SmithForth[1]'u elle decompile etmeye zaman ayırdım
      Bir dili bootstrap etmek için gereken assembly miktarının gerçekten çok az olması şaşırtıcı. Forth'un gömülü ortamlarda REPL sunabilmesini artık tamamen anlıyorum ve bu, sık duyduğumuz standart geliştirme döngüsünden çok daha eğlenceli görünüyor
      [0]:https://duskos.org/
      [1]:https://dacvs.neocities.org/SF/
    • İlk başta bu, Forth tabanlı gerçek bir şey gördüğüm için heyecanla yazdığım bir tepkiydi
      Sonrasında ChipWits'in Wikipedia sayfasını ve blog yazısını okudum; orijinal oyun gerçekten çok havalı görünüyor. Wikipedia kılavuzundaki logo da çok güzel
      Son zamanlarda bulmaca ve programlama ögeleri içeren eski/yeni oyunların bir listesini yapıyordum; bunu da ekleyeceğim. Hatta ketman assembly “oyununu” bitirdikten hemen sonra deneyebilirim. Gerçi ona oyun demek de biraz zor
      Yeni ChipWits'in çok başarılı olmasını umuyorum
  • Valpar'ın ValForth'u, Atari ST ekosistemindeki ilk çapraz platform FORTH uygulamalarından biriydi ve oyunlar için akıllıca genişletmelere de sahipti
    https://www.atarimagazines.com/rom/issue1/jumping_forth.php
    Yazıda dendiği gibi, 8-bit tarafta da Elcomp'un FORTH'u vardı ve https://www.atarimania.com/documents/FORTH-on-the-Atari-Lear... gibi kitaplar da bulunuyordu. Leo Brodie'nin “Starting FORTH” kitabı bugün bile harika bir giriş kaynağı
    Herkes BASIC öğrendi ama bu alternatif diller, cihazları programlamaya dair bambaşka mecazların gerçekten var olduğunu gösterdi
    80'lerdeki bir çocuk için bu, ufku ciddi biçimde genişleten bir şeydi

  • Forth, Perl gibi bir kez yazdıktan sonra okunması zor olan dillerden biri gibi görünüyor
    Yazması ve bir şeyler üretmesi kolay, ama yaklaşık 1 yıl sonra koda geri dönünce ne yaptığını anlamak zor olacakmış gibi geliyor
    Yine de gerçekten hızlı ve verimli

    • Perl'in böyle bir üne sahip olmasının tamamen haksızlık olduğunu düşünüyorum
      Az önce 3 yıldan uzun süredir el sürmediğim, oldukça büyük bir Perl programını rastgele açıp kaynak koduna göz gezdirdim ve ne yaptığını anlamakta hiçbir sorun yaşamadım
      Perl kodunun, diğer çoğu programlama diline kıyasla yeniden okunmasının daha zor olduğunu düşünmüyorum. Zorluk daha çok geliştiricinin o dilde ne kadar yetkin olduğuna ve o dille en son ne kadar zaman önce kod yazdığına bağlı
      Dile dair bilginiz epey paslanmışsa ya da zaten çok yetkin değilseniz, hangi dil olursa olsun eski kodunuza tekrar bakmak zorlaşır
      Elbette kod size ait değilse daha da zordur ve kodun ne kadar iyi yazıldığı da büyük fark yaratır. Her dilde bolca kötü kod vardır ve baştan kötüyse zaman geçince daha iyi hale gelmez
    • Benim kişisel hissim bunun tam tersi
      Forth yazması zor ama okuması kolaydır diye düşünüyorum
  • Çocukken bunu Commodore 64'te çok oynadım
    Benzersiz, ilginç ve eğlenceli bir oyundu

    • Yeni oyunda da orijinalin oynanışı neredeyse tamamen korunmuş
      Hacker News'te spam yapmak istemem ama orijinali oynadıysanız reboot hakkındaki görüşlerinizi gerçekten duymak isterim: https://chipwits.com
  • Çocukken bu oyunu gerçekten çok istemiştim
    Ne kadar yaşlandığımı düşündürüyor

  • Modern ChipWits'in neyle yazıldığını merak ediyorum

    • Yazıya göre C# ile yazılmış ve kod miktarı en az 10 kat fazla
      Bu oyunu gerçekten çok severdim. C64 için bir Forth paketi de vardı bende ama bu oyunun onunla yapıldığını hiç bağdaştıramamıştım
    • Unity ve C#
  • Human Resource Machine satın alıp büyük ölçüde keyifle oynamıştım. Fazla zorlaşana kadar
    ChipWits ile aynı konsepte, yani yığın tabanlı programlamayı oyuna dönüştürme fikrine sahip gibi görünüyor
    İkisini de oynamış biri varsa nasıl karşılaştırıldıklarını merak ediyorum