- 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
badeklendi - 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 + 1yerine1 1 +biçiminde yazılırif random(3) == 1yerine3 irnd 1 = ifbiç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
?boomtanı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’ü,dwsise 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 puan15 dgibi 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
.pngdosyaları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
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...
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ç
Yığın tabanlı bir dil
https://www.forth.com/starting-forth/
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
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
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
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
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
Yazarın üslubu şimdiden hoşuma gitti
Mesela:
İ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/
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
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
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
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
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
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