5 puan yazan GN⁺ 2024-11-02 | 1 yorum | WhatsApp'ta paylaş
  • NandGame, basit mantık parçalarından başlayıp sonunda programlanabilir bir bilgisayar monte ettiğiniz eğitici bir bulmaca oyunudur
  • Her seviye, belirtilen özelliklere göre çalışan bir bileşen oluşturma görevidir; tamamlanan parçalar sonraki aşamanın yapı taşları haline gelir
  • Bilgisayar mimarisi veya yazılım konusunda ön bilgi gerekmez; matematikte de toplama ve çıkarma düzeyi yeterlidir, ancak bazı görevler zaman alabilir
  • İlk görev, girişler a ve b ikisi de 1 olduğunda çıktısı yalnızca 0 olan nand bileşenini kablolar ve rölelerle gerçekleştirmektir
  • Araç kutusundaki parçaları mavi alana sürükleyip yerleştirirsiniz; boşluk çubuğu, yön tuşları ve Escape ile sürükleme ve iptal işlemleri yapılır

Temel parçalardan bilgisayara

  • NandGame, temel bileşenleri birleştirerek giderek daha güçlü parçalar oluşturduğunuz ve en sonunda programlanabilir bir bilgisayar kurduğunuz bir yapıda ilerler
  • Birden fazla seviyeye ayrılmıştır; her aşamada verilen spesifikasyona uygun şekilde çalışan bir bileşen yapmanız gerekir
    • Tamamlanan bileşen, sonraki seviyelerde kullanılabilecek bir parça olur
    • Başlangıç noktası en basit mantık bileşenidir

Gerekli ön bilgi ve zorluk

  • Bilgisayar mimarisi veya yazılım hakkında ön bilgi gerekmez
  • Matematikte toplama ve çıkarmadan fazlası istenmez
  • Bazı görevlerin çözümü zaman alabileceğinden sabır gerekir

İlk görev: nand yapmak

  • İlk görev, kablolar ve röleler kullanarak nand bileşenini gerçekleştirmektir
  • a ve b girişlerini çıkışa bağlarken, spesifikasyona uygun davranış üretecek bir devre kurmanız gerekir
  • 1, akımın aktığı durumu; 0, akımın akmadığı durumu ifade eder
  • V girişi her zaman 1 olan sabit akım taşır

nand spesifikasyonu

  • nand çıkışı, yalnızca iki girişin ikisi de 1 olduğunda 0 olur
  • Kesin giriş-çıkış spesifikasyonu şöyledir
a b Çıkış
0 0 1
0 1 1
1 0 1
1 1 0

Kullanım şekli

  • Araç kutusundaki bileşenleri mavi alana sürükleyip yerleştirirsiniz
  • Sürüklenebilir bir öğeyi almak için boşluk çubuğuna basın
  • Sürükleme sırasında öğeyi yön tuşlarıyla hareket ettirin
  • Yeniden boşluk çubuğuna basınca yeni konuma bırakılır, Escape tuşuna basınca iptal edilir

1 yorum

 
GN⁺ 2024-11-02
Hacker News yorumları
  • Bu oyunu sevdiğim için küçük bir FPGA geliştirme kartı satın alıp kendi komut kümesini ve soft CPU’mu yapmayı denedim
    Pratik değildi ama eğlenceli bir alıştırmaydı; açık kaynak ekosistemi iyi ve fiyatı düşük olduğu için iCE40 kartını seçtim: https://www.digikey.com/en/products/detail/lattice-semicondu...
    Şimdi daha iyi seçenekler olabilir

    • Niklaus Wirth de benzer bir şey yaptı; bahanesi, sevdiği Xerox PARC hatıra faresi ile iletişim kuracak ticari bir kutu bulamamasıydı
      Çoğu kişi muhtemelen alelacele bir USB dönüştürücü yapardı, ama Wirth işi düzgün yapmak için bir FPGA kartı alıp bir soft CPU yaptı; sonra bunun üstüne OS, pencere sistemi, dil araç zinciri gibi şeyleri kurdu
      Bu sayede donanım tasarım uygulamaları ve metin editörünü çalıştırıp, sevdiği fareyle daha fazla soft CPU tasarımını deneyebildi
    • Bir sonraki adım muhtemelen Tiny Tapeout olur: https://www.tinytapeout.com/
  • Benzer bir oyun olan Turing Complete'i oynadım ve gerçekten çok eğlenceliydi: https://store.steampowered.com/app/1444480/Turing_Complete/
    Nand2Tetris kitabına çok benziyor

    • Turing Complete'e 30 saat gömdükten sonra ne olduğunu fark ettim
      Makineyi 32 bit komutlara yükselttim ve buna uygun assembly dili dokümantasyonunu bile yazdım
      Hâlâ erken erişimde olmasına rağmen harika bir oyun
    • Turing Complete kesinlikle tavsiye edilir
      Güzel görünüyor, iyi cilalanmış ve oldukça bağımlılık yapıcı
      GOG'da da olması güzel: https://www.gog.com/game/turing_complete
  • İlgili yazılar:
    NandGame – Build a Computer from Scratch - https://news.ycombinator.com/item?id=36862274 - Temmuz 2023
    NandGame – Build a Computer from Scratch - https://news.ycombinator.com/item?id=31055307 - Nisan 2022
    NandGame – Build a Computer from Scratch - https://news.ycombinator.com/item?id=25282507 - Aralık 2020
    Show HN: Online challenge: Build a CPU from scratch - https://news.ycombinator.com/item?id=17508151 - Temmuz 2018

    • Eski gönderileri nasıl kaçırdığımı bilmiyorum ama kitabı okudum ve bilgisayarı da kendim uyguladım
      Gerçekten eğlenceli bir alıştırma
  • Buna bakınca ne kadar çok şey unuttuğumu hatırlayıp buruk hissediyorum
    20 yıldan uzun süre önce üniversitede elektrik mühendisliği okudum ve bilgisayar mimarisi alanında uzmanlaştım, ama meslek hayatımda bunu hiç kullanmayıp yazılım tarafına geçtim
    Buradaki şeylerin nasıl yapıldığını hiç hatırlamıyordum; deneme yanılma sonunda ancak bir yarım toplayıcı yapabildim

    • Böyle hissetmeni anlıyorum ama daha önce yaptığın eğitimin tekrar tekrar doğru yönde kararlar vermene yardımcı olmuş olduğunu düşünüyorum
      Tahıl Yasaları'nı kimin geçirdiğini ya da ABD'de soğutmalı taşımacılığı ilk kimin başlattığını hatırlayamadığın için kendini suçlamaya benziyor
      Esas anlatıyı, örneğin savaşların mühendislik gerektirdiğini, ardından tarım devrimi ve sanayi devriminin geldiğini, tarihin de sınıf mücadelesi olduğunu anlıyorsan; yeni bilgiler manyetik alan içindeki parçalar gibi yerlerine oturur
      O yüzden kendini fazla hırpalama; kendine biraz daha nazik olabilirsin
  • Bu oyunu ve Nand2Tetris kursunu da ancak ikisini birden yaptıktan sonra aynı bilgisayarı hayata geçirdiklerini fark ettim
    Bu oyun etkileşimli, grafiksel bir sürüm; orijinal Nand2Tetris ise mantık kapıları arasındaki bağlantıları tıklayıp sürüklemek yerine metin tabanlı HDL ile yazılıyor
    İkisi de eğlenceli ve eğiticiydi ama NandGame tarafı daha eğlenceliydi
    Yine de aralarındaki bağlantıyı bilmek faydalı. NandGame'i bitirdikten sonra Nand2Tetris'in devam niteliğindeki, yani daha üst katmandaki bilgisayar yazılımı çalışmalarına geçebilirsin; ayrıca ters sürümü yapan insanlarla deneyim ve içerik paylaşmak da daha kolay olur

    • nand2tetris'i denedim; üniversitede donanım derslerim de epey iyiydi ama bu ders ve kitap daha çok “baykuşun geri kalanını çiz” gibiydi
      Ödevleri yapmak için üniversite ders kitaplarımı ve sınav kâğıtlarımı bile tekrar çıkarmam gerekti; CPU'nun kritik kısımlarının neredeyse tamamlanması gereken noktaya gelince de bıraktım
      Dersler ve metin bana açıkçası oldukça yetersiz geldi; internet çağında bunun normal olup olmadığını bilmiyorum ama dersin ve kitabın bir ölçüde kendi içinde yeterli olmasını bekliyordum
    • Nand2Tetris ile uyumlu en az bir tane daha sürükle-bırak simülatörü var
      Andrew Wilkes'in masaüstü tabanlı LogicSimX/Logic Simulator 2 uygulaması: https://logicsimx.com/about/ https://andrew-wilkes.itch.io/logic-simulator-2
      İyi görünüyor ama düzgün değerlendirecek kadar bilmiyorum
  • Düşünmeye değer bir nokta olarak, ilk aşamada NAND kapısını fiziksel olarak yapma kısmını çıkarırsak, bu sürecin sonunda ortaya çıkan şey aslında sinir ağına oldukça benzer bir yapı oluyor
    Tek bir NAND kapısını ifade etmek için 2 nöron gerekiyor; derinliği n olan katmanlar, ağırlık matrisinde çok sayıda 0 ve biraz da depolama alanı olan bir yapı gibi görünüyor
    Soru şu: Yalnızca assembly düzeyindeki giriş/çıkış anlamı verildiğinde, boş bir sinir ağını eğitip böyle bir yapıya dönüştürmek mümkün olur mu? Geri yayılım elbette olmaz ama, bir tür yönlendirilmiş arama mümkün değil mi?

    • Geçen yıl bir arkadaşımla bunu denemiştim
      3-çoğunluk kapısı ve çeşitli başka kapılar kullandık ama bir katmanın ötesine geçince geri yayılım pek çalışmadı; muhtemelen bit hassasiyeti yetersizdi
      “Geri yayılım olmadan eğitim” problemi gerçekten oldukça zor ve sonunda vazgeçtik
      Geri yayılım olmadan sinir ağlarını eğitmek için iyi bir yöntem var mı? Bilgi darboğazı bir yere kadar var gibi görünüyor ama sinir ağı olmadan karşılıklı bilgiyi değerlendirmek zor
    • Onlarca yıl önceki ilk sinir ağı deneylerinin bir kısmı, mantık kapılarının başarılı şekilde modellenebileceğini göstermek içindi
  • Bu konuda hiç deneyimim yok; her bileşenin ne yaptığını açıklarsanız sevinirim
    rölenin ne yaptığını, c ile inin ne olduğunu bilmiyorum
    Ayrı bir güç kaynağı varken neden a ya da byi güç kaynağına bağlayıp açınca bunun tek başına da enerji sağlayabildiği de kafamı karıştırıyor

    • Röle, elektrikle kontrol edilen bir anahtardır
      Bobine (c) enerji verildiğinde anahtarın durumu varsayılan durumunun tersine döner
      Varsayılanı açık olan anahtar, c = 0 iken in değerini çıkışa iletir; ancak c = 1 olduğunda bobin enerjilenir ve anahtar açılır ya da kapanır
      Varsayılanı kapalı olan anahtar ise bunun tersine çalışır
      c, bobindir; enerji verildiğinde anahtarı değiştirir
      in, anahtar kapalıyken içinden geçen değerdir; burada bu değer 1 veya 0'dır
      Ayrı güç kaynağı, iki giriş değerinden bağımsız olarak 1 değerini elde etmek için gereklidir
      Örneğin iki giriş de 0 iken her durumda 1 çıkışı üretmek istiyorsanız, yukarı çekecek yüksek bir değere ihtiyaç vardır; bu görevi güç kaynağı görür
    • C muhtemelen coil veya control kelimelerindeki C'dir
      Röle, demir çekirdek üzerine sarılmış bir bobinden oluşan elektromıknatısın kontrol ettiği mekanik bir anahtardır
      Bobinden akım geçtiğinde metal yayı kendine çeker; bunun sonucunda akımın inden çıkışa akmasına izin verebilir ya da tam tersine kesebilir
      Sunulan iki tür röle bileşeni tam olarak bu iki davranışı temsil ediyor
  • Gerçekten harika. Herkesin MHRD'ye de bir göz atmasını veya oynamasını tavsiye ederim
    https://store.steampowered.com/app/576030/MHRD/

  • Harika görünüyor. Kitabı sonuna kadar bitirememiş olmam üzücü; bunu daha fazla denemek isterim