Mostrando postagens com marcador raining code. Mostrar todas as postagens
Mostrando postagens com marcador raining code. Mostrar todas as postagens

terça-feira, 27 de maio de 2025

Matrix - Raining Code para o TRS-Color

Tempos atrás, depois de fazer o Raining Code para o MSX, portei para o ZX81 e para o TRS-80, o que ocorreu com certa facilidade, porque todos utilizam o Z80 como processador e, assim, só precisava fazer as devidas adaptações para o hardware de vídeo.

Aí pensei: fazer esse programa para o TRS-Color seria muito legal, porque ele tem um modo de alta resolução (256x192), como o MSX, em duas cores (verde e preto). Além disso, até onde eu sei, ninguém havia feito ainda, ao menos em alta resolução. 

Só que minha falta de intimidade com o assembly 6809 foi, há dois anos atrás, uma barreira insuperável e acabei engavetando o projeto. Na época tentei portar o código, traduzindo as instruções e endereços do Z80 para o 6809. Minha abordagem do problema não ajudou, pelo contrário, apenas complicou.

Recentemente, resolvi retomar e cheguei à conclusão que a única maneira de avançar com o programa era retroceder. Assim, em vez de tentar portar o código do Z80 para o 6809, resolvi recomeçar do zero, de maneira que ia escrevendo o código aos poucos, ao tempo que ia aprendendo melhor o assembly do 6809. Depois de uma certa relutância inicial, meu cérebro finalmente sintonizou comunicação com o 6809 e a partir daí a programação fluiu. Tomei como lição que tentar traduzir a implementação diretamente do Z80 para o 6809 é um equívoco e que o melhor é focar no algoritmo, ou seja, partir de um nível de abstração mais elevado, para daí iniciar a nova implementação. Isso permite o uso mais adequado das peculiaridades de uma linguagem sem a interferência das técnicas de implementação da outra.

O processo

Comecei "importando" os caracteres alfanuméricos e katakana de uma ROM japonesa do MSX. Infelizmente não arrumei uma maneira de fazer isso diretamente, porque não há compatibilidade de arquivos entre o MSX e o TRS-Color, tampouco encontrei maneira de importar os dados via emulador. O jeito foi fazer à mão. Janela do openMSX de um lado, com o meu editor (não publicado) fornecendo as informações byte a byte dos caracteres, janela do Xroar do outro, anotando os dados em linhas data no Color Basic. Com muita paciência fui fazendo aos poucos e até que finalmente tinha o resultado na tela:

 

Resultado do teste dos caracteres na tela do Color, no modo RG6.

  

Minha ferramenta de edição no MSX, de onde obtive os dados dos caracteres.

Dados dos caracteres em hexadecimal. 

Fiz ainda um pequeno ajuste, já que os caracteres do MSX são justificados do lado esquerdo e apareciam "colados" com a margem esquerda da tela do Color, o que me incomodou, esteticamente. A solução foi um deslocamento de bits para a direita. O BASIC não tem instrução de deslocamento de bits, é verdade, mas a matemática básica salva: para deslocar bits de um número binário para a direita é só tomar o valor inteiro do número dividido por dois. Uma pequena rotina deu conta fazer isso com os 736 bytes dos 92 caracteres que utilizei.

Depois foi questão de elaborar o programa em si para manipular os dados na tela. Fiz isso utilizando o Disk Edtasm 6309, ferramenta nativa do Color, como montador para o 6809.

Todos os efeitos das outras versões foram reproduzidos: cada coluna tem um delay para iniciar a descida dos caracteres e o seu apagamento; quatro velocidades diferentes para a escrita e apagamento dos caracteres, sorteadas a cada reinício de cada coluna; e finalmente, caracteres já escritos são sobrescritos por caracteres aleatórios (seriam "patches" na Matrix?). Para destacar o primeiro caractere que vai descendo pela tela em cada coluna, utilizei o velho truque deslocamento de bits para gerar o caractere bold. Poderia ter utilizado os caracteres bold pré-processados, mas acabei programando a geração dos mesmos on the fly.

Acredito que o resultado ficou muito bom, um pouco atrás apenas da versão para MSX, cuja coluna descendente tem 3 tons de verde além do caractere branco como destaque.

DownloadMatrix-TRS-Color.dsk

  



The Matrix has you.


sábado, 30 de outubro de 2021

Matrix - Raining Code para TRS-80



Portar o código em si do ZX-81 para o TRS-80 foi bem simples. O que me deu um pouco mais de trabalho foi entrar no mundo do TRS-80. Como só uso ferramentas externas em último caso (em único caso, na verdade, do ZX-81, que uso cross-assembler), aprendi basicamente como funciona o emulador SDLTRS, o sistema operacional do TRS-80 e o assembler EDTASM. Levei um tempinho pra me acostumar com todas essas novidades, mas valeu a pena. Afinal eu me meto nessas velharias mesmo pra ter o prazer de aprender e lidar com elas.  E faz tempo que eu queria mexer com o TRS-80, porque o CP-500 foi um dos primeiros computadores que vi funcionar. E que impressão aquele monstrinho branco dava!

Bom, segue o download de uma imagem de disquete contendo o programa.

Download: Matrix - Raining Code - TRS-80




quinta-feira, 23 de julho de 2020

Matrix - Raining Code para o ZX81

Portei  para o ZX81(linha que no Brasil foi representada pelo TK-85, CP-200, etc) o programa que havia escrito para o MSX. Uma boa parte teve que ser reescrita, principalmente porque na versão para MSX eu utilizei o modo gráfico ("screen 2"). O algoritmo de animação, de um modo geral, é o mesmo, respeitadas as limitações da maquininha.

Para inciar o programa, digite RUN. Para interromper a execução, tecle NEW LINE.

Atualização em 20.07.2024: fiz uma versão para máquinas capazes de gerar vídeo reverso (fundo preto com caracteres em branco). Assim, no pacote ZIP há duas versões, a normal (matrix.p) e a para vídeo reverso (matrix-r.p). Eu aproveitei para fazer alguns ajustes, em especial, agora o programa irá rodar aproximadamente na mesma velocidade em computadores NTSC/PAL-M ou PAL europeu (60/50Hz de sincronismo vertical).

Download: Matrix-ZX81.zip





domingo, 3 de novembro de 2019

Matrix - Raining Code no MSX

Implementação do efeito "raining code" no MSX, em assembler, utilizando a "screen 2". Para retornar ao Basic, tecle ESC.

Programa montado no Mega Assembler.

Update 15.10.2020

Fiz algumas alterações e ajustes no programa .bin. Agora o programa inicia com mensagens no "terminal".

Também fiz uma versão para MSX-DOS (matrix.com). Para isso, desta vez utilizei o Gen80. No final, a adaptação foi mais simples do que imaginei. Digo, "mais simples" depois de pronto, porque levei um tempinho pra descobrir como fazer. Leiam os manuais! Agradeço a ideia da versão DOS, dada por Xavi Sorinas. ¡Muchas gracias, Xavi! 

As duas versões estão em imagens de disco separadas, dentro do pacote compactado.

Download: Matrix - Raining Code


O vídeo é da primeira versão, mas dá pra ter uma ideia de como funciona:

 

Matrix - Raining Code para o TRS-Color

Tempos atrás, depois de fazer o Raining Code para o MSX, portei para o ZX81 e para o TRS-80, o que ocorreu com certa facilidade, porque tod...