- ChipWits, um dos primeiros jogos do Macintosh em 1984, teve seu código-fonte FORTH original para Mac e Commodore 64 lançado como open source em seu 40º aniversário
- O objetivo da divulgação é preservar o legado do jogo e compartilhar como o desenvolvimento multiplataforma era feito em microcomputadores de 8 bits em 1984
- Os dados foram recuperados de discos de 40 anos guardados por Doug Sharp; embora houvesse alguns setores defeituosos, a maioria dos discos pôde ser lida normalmente
- Enquanto o código completo da versão para Mac tem cerca de 3.000 linhas de FORTH, a versão modernizada portada chega a 35.000 linhas de C#, destacando a concisão e as limitações do código da época
- O projeto publicou no GitHub as imagens originais dos discos e o código extraído, e quer trabalhar com a comunidade na identificação do código-fonte mais recente, na documentação de como compilar e na extração dos sprites
Divulgação do código original de ChipWits
- Para comemorar os 40 anos de ChipWits, o código-fonte FORTH original para Mac e Commodore 64 foi lançado como open source
- O código original recuperado e as imagens dos discos estão organizados em chipwits/chipwits-forth
- O objetivo da divulgação é a preservação do legado de ChipWits e o compartilhamento da experiência de desenvolvimento multiplataforma para microcomputadores de 8 bits em 1984
- Pessoas familiarizadas com os sistemas originais podem participar da exploração e organização do código-fonte, e o projeto convida à colaboração por meio do ChipWits Discord Server
Por que escolher FORTH em 1984
- ChipWits foi um dos primeiros jogos lançados para o Macintosh em 1984
- Os coautores Doug Sharp e Mike Johnston projetaram ChipWits, seu primeiro jogo original, depois de portar jogos educacionais entre microcomputadores de 8 bits
- O jogo é um jogo de programação de robôs influenciado por títulos de programação da época como Rocky’s Boots e Logo
- O ambiente de desenvolvimento para Mac em 1984 era limitado, e a principal forma de desenvolver era comprar um Apple Lisa
- O preço original do Apple Lisa era US$ 9.995, o que corresponde hoje a US$ 30.373
- Como era um custo difícil de bancar para um estúdio indie, Doug e Mike desenvolveram usando o MacForth Plus, que rodava diretamente no Mac
- Na época, havia variantes de FORTH em vários microcomputadores de 8 bits, o que fazia da linguagem uma escolha adequada pensando em ports futuros
- O desenvolvimento começou em abril de 1984, e levou cerca de 7 meses até a primeira versão ser desenvolvida e publicada, ficando pronta para a temporada de Natal
Port para Commodore 64 e Apple II
- A Epyx seria a publicadora de ChipWits, e o Commodore 64 era o maior mercado
- A Epyx não tinha jogos para Mac, e como a Brainworks mirava o mercado educacional em que a Apple era forte na época, a Epyx publicou apenas a versão de Commodore 64
- O port para C64 foi concluído em 1985 e escrito em Super Forth 64
- O port para Commodore 64 foi desafiador porque precisava manter o design geral da interface do Mac
- Foi necessário desenvolver um sistema de menus suspensos operado por joystick em vez de mouse
- Foram adicionados gráficos coloridos e som com o chip SID
- Tudo precisava caber em um disco de 165 KB em vez dos 400 KB do disco do Mac
- Era preciso usar 64 KB de RAM e um processador mais lento, em vez dos 128 KB de RAM do Mac
- Depois do sucesso da versão para Commodore 64, também foi feita uma versão para Apple II, escrita igualmente em uma variante de FORTH
Avaliação após o lançamento e execução do original
- ChipWits recebeu várias análises e prêmios após o lançamento
- O MacUser Editor’s Choice 1986 Award definiu ChipWits como “a introdução mais divertida aos conceitos de programação” e elogiou sua linguagem baseada em ícones e seu design educacional
- A Macazine previu que ChipWits se tornaria um título cult entre usuários de Macintosh e crianças
- A MacWorld avaliou que, se você gosta de programação, vai gostar de ChipWits
- A Creative Computing deixou uma resenha com uma cena de alguém xingando um robô de desenho às 4h30 da manhã
- Em 2008, a Maclife.com selecionou ChipWits como um dos Top 10 Apple II / Mac Games de todos os tempos
- As versões originais estão sendo preparadas para rodar em emuladores no navegador por meio dos projetos open source Emularity e Apple2js
Recuperação de discos de 40 anos
- Enquanto trabalhava em uma nova versão de ChipWits, Doug Sharp encontrou os discos originais que havia guardado
- Os disquetes de 3,5 polegadas e os floppies de 5,25 polegadas ficaram armazenados em casa por 40 anos, mas a maioria pôde ser lida sem setores defeituosos
- Para recuperar os discos de Commodore 64, foi usado um 1541 Commodore 64 Disk Drive comprado no eBay
- Os dados foram lidos em um PC moderno por meio de um adaptador USB XoomFloppy
- Os disquetes Mac de 3,5 polegadas não podiam ser lidos do modo padrão por drives modernos por causa da disposição proprietária de setores do Mac
- O Mac usava um layout próprio de setores para aumentar a capacidade do disco até 800 KB
- Um PowerMac G3 WallStreet foi usado como sistema-ponte por ter drive de 3,5 polegadas e pilha de rede, mas como o suporte a 400 KB foi desativado no MacOS mais recente, ele só conseguia ler discos de 800 KB
- Depois, por sugestão de um fã, foi usado o controlador de hardware customizado GreaseWeazle para controlar drives USB, e esse método funcionou corretamente
- Todos os discos foram convertidos em imagens bloco a bloco e organizados no repositório do GitHub
- Os nomes dos arquivos usam os rótulos dos discos
- Quando setores defeituosos eram detectados, era adicionado
badno início do nome do arquivo - Para facilitar a leitura em computadores modernos, os blocos foram extraídos com scripts em Python e reformatados como arquivos ASCII UTF-8
- O PETSCII, codificação de caracteres proprietária do Commodore 64, foi convertido para ASCII
O que o código FORTH revela sobre o desenvolvimento
- As imagens completas dos discos originais e o código podem ser vistos em chipwits/chipwits-forth
- Todo o código de ChipWits para Mac tem cerca de 3.000 linhas de FORTH
- O port modernizado já chega a 35.000 linhas de C#, o que evidencia a concisão do código FORTH original
- O texto separado Forth Code for Electrocrabs in 1984 ChipWits Deciphered analisa uma “screen” de código FORTH que controla os electrocrabs
- FORTH é uma linguagem baseada em pilha, semelhante à Reverse Polish Notation
- Em vez de
1 + 1, escreve-se1 1 + - Em vez de
if random(3) == 1, usa-se3 irnd 1 = if
- Em vez de
Implementação de jogo em 1984 vista em exemplos de código
- O código de movimentação do robô na versão para Mac não separa um loop de renderização por quadro como no desenvolvimento moderno de jogos
- Lógica do jogo e renderização gráfica ficam misturadas dentro de código imperativo
- A animação é implementada renderizando pixels diretamente dentro do loop
- Mover para um bloco vazio, bater na parede ou tocar em uma bomba é tratado com poucas palavras de código
- A definição
?boomdecide até mesmo se o jogo termina ao tocar em uma bomba - Dependendo da posição do robô, soma-se 0 à pontuação para forçar o redesenho da exibição de pontos, que pode ter sido apagada pela passagem do robô
- A definição dos sprites da versão de Commodore 64 mostra como código e dados de assets ficavam misturados
- O código-fonte FORTH não era salvo em arquivos, mas em unidades numeradas chamadas screen, carregadas na ordem necessária
- Os sprites monocromáticos do C64 tinham 24×21 pixels, e apenas 8 sprites podiam ser usados por tela
- Ao escolher sprites de 4 cores, a resolução caía para 12×21, e os pixels passavam a ter o dobro da largura
- O personagem ChipWit é renderizado sobrepondo vários sprites, em um método semelhante à animação em cel de desenhos vintage
- Essa escolha consumia mais sprites disponíveis no ChipWit, mas permitia imagens mais nítidas e animações por partes
- A tabela de pontuação dos itens na versão para Mac comprime os dados para caber em uma screen
- Uma notação como
( 110584 dws)é o carimbo de data da screen;110584significa 5 de novembro de 1984, edwsse refere a Douglass Walter Sharp - Essa screen parece ser uma das últimas modificadas antes do lançamento final, e a última screen alterada é de 8 de novembro
d,é definido para armazenar o valor multiplicado por 10, permitindo representar 150 pontos como15 d- Esse método ajudava a manter o alinhamento da tabela e fazê-la caber em uma screen, além de possivelmente facilitar o ajuste dos valores de pontuação durante o balanceamento final antes do lançamento
- Uma notação como
Reboot e trabalho da comunidade
- Separadamente da divulgação da versão FORTH original, a equipe também está trabalhando em uma versão modernizada de ChipWits
- A versão reboot quer manter a diversão e o rigor de ciência da computação do original, ao mesmo tempo em que melhora vários aspectos, da curva de aprendizado até um leaderboard global competitivo
- Ao adicionar ChipWits à wishlist na Steam, será possível receber aviso quando a versão final for lançada
- Os objetivos imediatos das issues atuais no GitHub relacionadas ao código FORTH original são os seguintes
- confirmar se todo o código-fonte relevante foi extraído das imagens brutas dos discos
- corrigir problemas de alinhamento em alguns arquivos-fonte
- alguns têm largura de 40 caracteres, outros de 64
- identificar quais discos contêm o código-fonte mais recente
- documentar como compilar a partir do código no Mac e no C64
- extrair sprites e imagens brutas dos discos e convertê-los em arquivos
.png
- O objetivo final é uma versão de ChipWits em FORTH mantida pela comunidade para PCs modernos
1 comentários
Comentários do Hacker News
Há um texto explicando por que ChipWits foi criado em FORTH em 1984
https://chipwits.com/2023/04/08/forth-programming-language-g...
Obrigado por terem criado um jogo de que eu gostava; também baixei a nova demo e o adicionei à minha lista de desejos no Steam
Forth é uma linguagem que eu queria aprender há alguns anos
Nos computadores antigos, se você queria programas rápidos, a opção era assembly; se não se importasse que fossem lentos, usava BASIC. Acho curioso que Forth pareça bastante de alto nível, mas ainda assim tenha ficado como uma linguagem de “velocidade intermediária”
É uma linguagem baseada em pilha
https://www.forth.com/starting-forth/
Basta conectar um cabo USB ao computador e abrir um programa de terminal para começar na hora, o que é ótimo para mergulhar totalmente na linguagem
Mas produtos vindos da Austrália podem levar meses para chegar, então é melhor procurar primeiro um fornecedor mais próximo
Outra boa forma é aprender como em 1984: rodar um emulador de Commodore 64, Apple ][ ou parecido em um computador moderno e colocar nele um ambiente de desenvolvimento Forth
A documentação da época foi escrita para iniciantes completos, então é muito fácil de acompanhar, e há muitos PDFs escaneados gratuitos na internet
Foi fácil e divertido, mas até certo ponto é tão absurdamente fácil que, para algumas pessoas, pode parecer básico demais, ou aumentar a tentação de ir além de uma implementação de brinquedo
É preciso gerenciar a pilha manualmente, o que dá bastante trabalho, e criar o próprio FORTH é divertido. Não precisa necessariamente ser em assembly; no passado, já criei em C++ uma linguagem de script parecida com Forth
BASIC significava “Beginner's All-purpose Symbolic Instruction Code”, então combinava bem
O Amstrad CPC 6128 também oferecia, em um disco separado, uma implementação de Logo, um dialeto de Lisp voltado à educação, e aquelas listas associadas realmente me impressionaram quando eu era criança
Na época, “open source” não era um conceito comum, e compiladores e interpretadores de várias linguagens eram ferramentas comerciais profissionais
[1] https://en.wikipedia.org/wiki/Amstrad_CPC#Other_languages
[2] https://en.wikipedia.org/wiki/An_Open_Letter_to_Hobbyists
Parece muito legal
Relacionado a isso, também existe http://tumbleforth.hardcoded.net/, e acho bem interessante. Se alguém já chegou até o fim, tenho curiosidade de saber como foi a experiência
Fez eu pensar sobre computação de outra forma
Ainda sou jovem e tenho muito a aprender, mas olhando para trás, parece que antes certas abstrações eram escolhidas por causa das limitações de hardware, e que nos “ramos evolutivos” das linguagens de programação atuais se acumularam muitas abstrações que não envelheceram bem, criando várias camadas de tralha sustentando o peso. É parecido com outros projetos de engenharia
O Collapse OS pode não ser prático hoje, mas há uma sensação de libertação em se livrar de várias camadas de abstração. Parece uma forma de curtir computação ao estilo dos anos 1960 sem uma experiência de desenvolvimento horrível
Meu projeto fantasioso atual é acompanhar essas coisas, compilar o Dusk OS em uma máquina virtual, depois migrar para uma máquina física, escrever em C um interpretador Scheme para o Dusk OS e então expandi-lo à vontade
Antes de chegar lá, há alguns rios a atravessar. Implementei um interpretador Scheme em Python em algumas horas e gastei mais algumas horas melhorando o scanner/tokenizer. Agora estou lendo Crafting Interpreters para ver como implementar um interpretador Scheme em C. Depois de criar o interpretador em C, pretendo voltar a este guia e mergulhar de cabeça no DuskOS
Já gostei do jeito como o autor escreve
Por exemplo:
A produção constante e enorme dele é impressionante. Não concordo totalmente com a filosofia do Collapse, mas a lista de e-mails do DuskOS tem exatamente o volume de tráfego ideal para acompanhar só lendo
Depois de ver o trabalho do Virgil, experimentei um pouco de Forth, e no ano passado passei um tempo descompilando manualmente o SmithForth[1]
É surpreendente como é pouca a linguagem assembly necessária para fazer o bootstrap da linguagem. Dá para entender perfeitamente como o Forth consegue oferecer um REPL em ambientes embarcados, e isso parece muito mais divertido do que o ciclo de desenvolvimento comum de que se ouve falar
[0]:https://duskos.org/
[1]:https://dacvs.neocities.org/SF/
Depois li a página da Wikipedia e o post do blog sobre ChipWits, e o jogo original parece realmente muito legal. O logo no manual da Wikipedia também é ótimo
Recentemente eu vinha montando uma lista de jogos antigos/novos com elementos de quebra-cabeça e programação, e pretendo incluí-lo nela. Talvez eu jogue logo depois de terminar o “jogo” de assembly ketman. Na verdade, é meio duvidoso chamar aquilo de jogo
Espero que o novo ChipWits se saia muito bem
O ValForth, da Valpar, foi uma das primeiras implementações FORTH multiplataforma no ecossistema do Atari ST e tinha extensões inteligentes para jogos
https://www.atarimagazines.com/rom/issue1/jumping_forth.php
Como o artigo diz, também havia o FORTH da Elcomp nos 8 bits, além de livros como https://www.atarimania.com/documents/FORTH-on-the-Atari-Lear.... “Starting FORTH”, de Leo Brodie, ainda é uma excelente introdução
Todos nós aprendemos BASIC, mas essas linguagens alternativas mostravam que realmente existiam metáforas totalmente diferentes para programar dispositivos
Para uma criança dos anos 80, isso ampliava muito os horizontes
Forth parece ser uma daquelas linguagens difíceis de ler depois que você escreve uma vez, como Perl
É fácil escrever e criar coisas nela, mas, se você voltar ao código cerca de um ano depois, parece que não vai conseguir entender o que ele faz
Ainda assim, é realmente rápida e eficiente
Acabei de abrir aleatoriamente um programa em Perl bem grande, no qual eu não mexia havia mais de 3 anos, e dei uma passada pelo código-fonte; não tive nenhum problema para entender o que ele fazia
Não acho que código Perl seja mais difícil de reler do que o da maioria das outras linguagens de programação. A dificuldade depende principalmente de quão proficiente o desenvolvedor é naquela linguagem e de quanto tempo faz desde a última vez que escreveu código nela
Se você está muito enferrujado na linguagem, ou se nunca teve muita proficiência nela para começo de conversa, fica difícil revisitar código antigo em qualquer linguagem
Claro que é ainda mais difícil quando o código não é seu, e a qualidade com que ele foi escrito também pesa muito. Há muito código lixo em qualquer linguagem, e, se ele já era lixo desde o início, não melhora com o tempo
Acho que Forth é difícil de escrever, mas fácil de ler
Joguei muito no Commodore 64 quando era criança
Era um jogo único, interessante e divertido
Não quero fazer spam no Hacker News, mas, se você jogou o original, eu adoraria ouvir sua reação ao reboot: https://chipwits.com
Quando eu era criança, eu queria muito ter esse jogo
Isso me faz sentir bem velho
Fico curioso para saber em que foi escrita a versão moderna de ChipWits
Eu adorava esse jogo. Também tinha um pacote Forth para o C64, mas nunca associei que esse jogo tivesse sido feito com ele
Comprei Human Resource Machine e me diverti bastante com ele, pelo menos até ficar difícil demais
Parece o mesmo conceito de ChipWits, ou seja, programação baseada em pilha transformada em jogo
Fico curioso para saber como eles se comparam, se alguém tiver jogado os dois