Mais uma vez, assistindo ao excelente canal do Youtube 8-Bit Show and Tell, tomei gosto pela história ali contada e resolvi replicar o programa, feito pelo Robin para o Commodore 64, no seu primo contemporâneo, o MSX.
Não é a primeira vez que isso acontece. Também me empolguei quando vi o vídeo sobre o "Pitfall Pamphlet", no mesmo canal, e fiz uma versão para MSX, que publiquei aqui uns anos atrás.
Desta vez, o episódio era sobre os "Ladrilhos de Truchet em PETSCII" (Truchet's tiles in PETSCII) que, resumidamente, conta a história do estudo com padrões de ladrilhos feito pelo padre dominicano Sébastien Truchet, em 1704. Em seguida, o apresentador mostra um programa feito por ele que imprime os padrões de Truchet na tela do C64.
Ao trabalho, comecei por obter a publicação original de Truchet, que foi feita no Memoires de l'Academie Royale des Sciences, de 1704, que era uma espécie de um anuário científico com diversos artigos sobre matemática, física, etc. A propósito, acho fantástico que possamos ter acesso a esses tipos de documentos históricos pela internet.
O estudo de Truchet, chamado Memoire Sur Les Combinaisons, inclui 30 padrões diferentes. Mostro aqui os primeiros 12, por brevidade:
![]() |
Primeiros doze padrões do estudo de Truchet. |
Como se pode observar, os padrões são elaborados a partir de um único ladrilho quadrado, dividido diagonalmente, metade preto, metade branco, sendo este ladrilho rotacionado nas quatro posições a seguir:
![]() | |
Ladrilhos, do original |
O MSX não tem os caracteres necessários na sua tabela padrão, como é o caso do Commodore 64 (PETSCII). Por isto, utilizando o meu editor de caracteres "Pixit", redefini os caracteres nºs 192,193,194 e 195 (escolhidos a esmo), para que correspondessem aos ladrilhos nas quatro posições originais.
![]() |
Detalhe da edição no Pixit. |
Como a definição dos 4 caracteres corresponde a apenas 32 bytes, anotei os hexadecimais (descritos na lateral esquerda da grade de edição), para depois passar os dados ao programa.
Em seguida, escrevi um programa no MSX BASIC, onde poderia entrar manualmente com os dados dos padrões (através de linhas data) e, ainda, testar a estrutura dos mesmos, visualmente, na tela. Fui então traduzindo, por análise visual, cada padrão para os dados correspondentes. O padrão "A", por exemplo, é uma matriz de 1 linha por 1 coluna, e o caractere utilizado, na minha convenção, é o 192. A linha data seria:
DATA 1,1,192
O padrão "B", é composto de 2 linhas e 1 coluna, e os caracteres são 192 e 194:
DATA 2,1,192,194
O padrão "C", é composto de 2 linha e 2 colunas, e os caracteres são 192 e 194 na primeira linha, e 194 e 192 na segunda:
E assim por diante. Dá para perceber que o estudo de Truchet vai se tornando mais complexo a cada padrão apresentado.
Claro, é um bocado de dados digitados manualmente. Um dos padrões, sozinho é uma matriz de 12x12, ou seja, só ali são 144 bytes. Mas isso não é nada para quem viveu a experiência oitentista de digitar programas de revistas, cheios de linhas data maçantes e que, frequentemente, continham dados errados. Assim, imbuído da daquela paciência de artesão, que vê com prazer o resultado das minúcias de seu trabalho surgir aos poucos, dei sequência e logo concluí a empreitada.
Acrescentei ainda, no início dos dados de cada padrão, a letra ou número que Truchet utilizou para nomeá-los. Achei que ficaria interessante mostrar a identificação original numa legenda abaixo do padrão. No final, ficou assim o resultado do programa BASIC na tela:
Como se vê, a ideia do programa é, preencher a tela toda com um padrão, tenha ele a dimensão que tiver (1x1, 2x1, 4x4, 10x10). No BASIC, reduzi o tamanho da janela de impressão porque a intenção do programa ali era apenas servir de teste e porque o interpretador demorava um tanto para imprimir cada tela. Na verdade, durante os testes, por questão de agilidade, a janela era ainda menor do que aparece aí na imagem acima. Depois é que dei uma melhorada na estética. Entretanto, na versão definitiva, em assembly, a tela toda viria a ser utilizada, 32x24, na Screen 1.
Encerrada esta etapa do BASIC, era hora de iniciar o programa em assembly. Comecei escrevendo no Mega Assembler o código que mostrasse na tela toda um padrão de 2 linhas por 3 colunas, com dados quaisquer (utilizei as letras ABC e DEF, só para testar o mecanismo).
Com o mecanismo básico funcionando a contento, utilizei o BASIC mais uma vez. Carreguei o programa dos ladrilhos em BASIC e apaguei toda a parte que imprimia os dados na tela, deixando apenas as linhas de dados. Então escrevi uma rotina para jogar os dados na memória RAM e, ao final, apresentar o endereço final dos mesmos. Escolhi como endereço inicial C000H (na realidade, depois alterei esse endereço para C200H):
Em seguida, alterei o endereço inicial de montagem do programa em assembly para o byte imediatamente seguinte ao do final dos dados, de forma que poderia salvar tudo com BSAVE em um único binário, com o endereço inicial dos dados, o endereço final do executável e o respectivo endereço de execução.
Depois foi "só" uma questão de depuração do programa, otimização, ajustes e inclusão de alguns recursos, como a possibilidade de se incluir ou retirar as legendas nas telas apresentadas (teclando RETURN) e de se avançar manualmente a apresentação dos padrões (teclando ESPAÇO), já que se nenhuma tecla for pressionada, o programa vai exibindo automaticamente cada padrão por alguns segundos, como numa apresentação. ESC volta ao BASIC.
Acrescento ainda, como curiosidade, a rotina que impedia a repetição das teclas pressionadas, que estava funcionando normalmente no emulador, no Expert estava resultando em salto dos padrões que deveriam ser apresentados. Fiz a edição do ajuste necessário no Mega Assembler, no Expert. Pra se ver que emulação nunca é 100%.
E o resultado final é esse do vídeo abaixo, em toda a glória de uma TV de tubo.
Imagem do disco para download
Nenhum comentário:
Postar um comentário