5 pontos por GN⁺ 2024-11-02 | 1 comentários | Compartilhar no WhatsApp
  • NandGame é um jogo educativo de puzzles que parte de componentes lógicos simples até, por fim, montar um computador programável
  • Cada nível propõe a tarefa de criar um componente que funcione conforme a especificação, e a peça concluída se torna um bloco de construção para a etapa seguinte
  • Não é necessário conhecimento prévio de arquitetura de computadores ou software, e matemática no nível de adição e subtração é suficiente, embora algumas tarefas possam levar tempo
  • A primeira tarefa é implementar, com fios e relés, um componente nand cuja saída seja 0 apenas quando as entradas a e b forem ambas 1
  • Os componentes da caixa de ferramentas são arrastados para a área azul, e a barra de espaço, as setas e Escape controlam o arraste e o cancelamento

Dos componentes básicos ao computador

  • NandGame avança combinando componentes básicos para criar peças cada vez mais poderosas e, no fim, montar um computador programável
  • Ele é dividido em vários níveis, e em cada etapa é preciso criar um componente que funcione de acordo com a especificação dada
    • O componente concluído se torna uma peça que pode ser usada nos níveis seguintes
    • O ponto de partida é o componente lógico mais simples

Conhecimento prévio necessário e dificuldade

  • Não é necessário conhecimento prévio de arquitetura de computadores ou software
  • A matemática não exige mais do que adição e subtração
  • Algumas tarefas podem levar tempo para resolver, então é preciso paciência

Primeira tarefa: criar um nand

  • A primeira tarefa é implementar um componente nand usando fios e relés
  • É preciso conectar as entradas a e b à saída, mas montar o circuito de modo que produza o comportamento especificado
  • 1 significa o estado em que a corrente está fluindo, e 0 significa o estado em que a corrente não está fluindo
  • A entrada V transmite uma corrente constante que é sempre 1

Especificação do nand

  • A saída de nand só se torna 0 quando as duas entradas são 1
  • A especificação exata de entrada e saída é a seguinte
a b saída
0 0 1
0 1 1
1 0 1
1 1 0

Como controlar

  • Arraste os componentes da caixa de ferramentas para a área azul
  • Para pegar um item arrastável, pressione a barra de espaço
  • Durante o arraste, use as setas para mover o item
  • Pressione a barra de espaço novamente para colocá-lo na nova posição, ou Escape para cancelar

1 comentários

 
GN⁺ 2024-11-02
Opiniões no Hacker News
  • Gostei tanto deste jogo que comprei uma pequena placa de desenvolvimento FPGA e criei por conta própria um conjunto de instruções e uma CPU soft.
    Não é prático, mas foi um exercício divertido; escolhi uma placa iCE40 porque o ecossistema open source é razoável e o preço é baixo: https://www.digikey.com/en/products/detail/lattice-semicondu...
    Hoje talvez existam opções melhores.

    • Niklaus Wirth também fez algo parecido, sob a desculpa de que não conseguia encontrar uma caixa comercial que se comunicasse com seu mouse de lembrança da Xerox PARC favorito.
      Em geral, alguém teria improvisado um conversor USB, mas Wirth quis fazer direito: pegou uma placa FPGA, criou uma CPU soft e colocou em cima dela um SO, um sistema de janelas, um toolchain de linguagem etc.
      Com isso, pôde rodar um app de design de hardware e um editor de texto, e experimentar mais designs de CPU soft usando seu mouse favorito.
    • O próximo passo parece ser o Tiny Tapeout: https://www.tinytapeout.com/
  • Joguei um jogo parecido, Turing Complete, e foi realmente divertido: https://store.steampowered.com/app/1444480/Turing_Complete/
    É muito parecido com o livro Nand2Tetris.

    • Só depois de dedicar 30 horas ao Turing Complete é que percebi o que tinha acontecido.
      Eu tinha feito um upgrade da máquina para instruções de 32 bits e até escrito a documentação da linguagem assembly correspondente.
      Mesmo ainda em acesso antecipado, é um ótimo jogo.
    • Turing Complete é definitivamente recomendável.
      É bonito, bem-acabado e bem viciante.
      É bom que também esteja no GOG: https://www.gog.com/game/turing_complete
  • Posts relacionados:
    NandGame – Build a Computer from Scratch - https://news.ycombinator.com/item?id=36862274 - julho de 2023
    NandGame – Build a Computer from Scratch - https://news.ycombinator.com/item?id=31055307 - abril de 2022
    NandGame – Build a Computer from Scratch - https://news.ycombinator.com/item?id=25282507 - dezembro de 2020
    Show HN: Online challenge: Build a CPU from scratch - https://news.ycombinator.com/item?id=17508151 - julho de 2018

    • Não sei como deixei passar os posts antigos, mas li o livro e também implementei o computador por conta própria.
      É um exercício realmente divertido.
  • Ver isto me deixa um pouco amargo, porque me lembra o quanto eu esqueci.
    Fiz engenharia elétrica na faculdade há mais de 20 anos e me especializei em arquitetura de computadores, mas profissionalmente nunca usei isso e fui para a área de software.
    Eu não lembrava de absolutamente nada sobre como fazer as coisas daqui e, depois de tentativa e erro, mal consegui criar um meio somador.

    • Entendo essa reação, mas acho que o estudo que você fez antes provavelmente ajudou você a tomar repetidamente decisões na direção certa.
      É parecido com se culpar por não lembrar quem aprovou as Leis dos Cereais, ou quem iniciou o transporte refrigerado nos EUA.
      Quando se tem uma compreensão do pano de fundo — a narrativa central, por exemplo que guerras exigem engenharia, que a Revolução Agrícola leva à Revolução Industrial, e que a história é luta de classes —, novas informações se encaixam no lugar como fragmentos dentro de um campo magnético.
      Então não se culpe tanto; dá para ser um pouco mais generoso consigo mesmo.
  • Só depois de fazer tanto este jogo quanto o curso Nand2Tetris é que percebi que os dois implementam o mesmo computador.
    Este jogo é a versão gráfica interativa, enquanto o Nand2Tetris original usa HDL textual em vez de clicar e arrastar conexões entre portas lógicas.
    Ambos foram divertidos e educativos, mas o NandGame foi mais divertido.
    Ainda assim, é bom saber da conexão entre eles. Depois de terminar o NandGame, você pode seguir para as tarefas posteriores do Nand2Tetris, ou seja, trabalhar nas camadas mais altas de software do computador; e também fica mais fácil compartilhar experiências e conteúdo com pessoas que fizeram a outra versão.

    • Tentei o nand2tetris e, mesmo tendo ido bem em disciplinas de hardware na faculdade, esse curso e o livro me pareceram muito um caso de “desenhe o resto da coruja”.
      Para fazer as tarefas, tive de procurar de novo livros-texto e provas da faculdade, e desisti por volta do ponto em que era preciso quase terminar as partes centrais da CPU.
      Sinceramente, achei as aulas e o texto bastante insuficientes; não sei se isso é normal na era da internet, mas eu esperava que o curso e o material didático fossem, em certa medida, autocontidos.
    • Existe pelo menos mais um simulador de arrastar e soltar compatível com Nand2Tetris.
      É o LogicSimX/Logic Simulator 2, baseado em desktop, de Andrew Wilkes: https://logicsimx.com/about/ https://andrew-wilkes.itch.io/logic-simulator-2
      Parece bom, mas não conheço o suficiente para avaliá-lo direito.
  • Como ponto para reflexão, se excluirmos a parte de realmente construir uma porta NAND na primeira etapa, ao final desse processo o que surge acaba sendo algo muito parecido com uma rede neural
    Para representar uma única porta NAND são necessários 2 neurônios, e a estrutura parece ter n camadas de profundidade, muitos zeros na matriz de pesos e um pouco de espaço de armazenamento
    A pergunta é: dadas apenas as semânticas de entrada e saída em nível de assembly, seria possível treinar uma rede neural vazia para que ela se tornasse algo como essa estrutura? Backpropagation obviamente não funcionaria, mas talvez algum tipo de busca direcionada fosse possível?

    • Tentei fazer isso com um amigo no ano passado
      Testamos uma porta de maioria de 3 entradas e várias outras portas, mas, depois de mais de uma camada, o backpropagation não funcionava bem, provavelmente por falta de precisão de bits
      O problema de “treinar sem backpropagation” é, na prática, bem difícil, e acabamos desistindo
      Existe algum bom método para treinar redes neurais sem backpropagation? Parece haver algum grau de gargalo de informação, mas é difícil avaliar a informação mútua sem uma rede neural
    • Algumas das primeiras experiências com redes neurais, décadas atrás, buscavam mostrar que elas conseguiam modelar portas lógicas com sucesso
  • Não tenho nenhuma experiência nessa área, então gostaria que explicassem o que cada componente faz
    Não sei o que um relé faz, nem o que são c e in
    Também fico confuso sobre por que, existindo uma fonte de alimentação separada, basta conectar a ou b à alimentação e ligar para que isso por si só receba energia

    • Um relé é um interruptor controlado eletricamente
      Quando a bobina (c) é energizada, o estado do interruptor muda do estado padrão para o estado oposto
      Um interruptor normalmente fechado passa o valor de in para a saída quando c = 0, mas, se c = 1, a bobina é energizada e o interruptor se abre, ou seja, desliga
      Um interruptor normalmente aberto funciona ao contrário
      c é a bobina e, quando recebe energia, alterna o interruptor
      in é o valor que passa quando o interruptor está fechado; aqui, é 1 ou 0
      A fonte de alimentação separada é necessária para obter um valor 1 independentemente dos dois valores de entrada
      Por exemplo, se as duas entradas forem 0 e você quiser sempre emitir 1, é preciso ter um valor alto para puxar a saída para cima, e a fonte de alimentação cumpre esse papel
    • C provavelmente é o C de coil ou control
      Um relé é um interruptor mecânico controlado por um eletroímã feito com uma bobina enrolada em um núcleo de ferro
      Quando passa corrente pela bobina, ela puxa uma mola metálica e, como resultado, pode permitir que a corrente flua de in para a saída ou, ao contrário, interrompê-la
      Os dois tipos de componentes de relé fornecidos representam exatamente essas duas ações
  • Muito legal. Recomendo que todos também deem uma olhada ou joguem MHRD
    https://store.steampowered.com/app/576030/MHRD/

  • Parece interessante. É uma pena eu não ter conseguido terminar o livro, e fiquei com vontade de tentar mais com isso