Eletrônica
Autor do Sidewize e um truque para sincronização
Os leitores do Cantinho do TK90X podem estar preocupados com a falta de postagens, mas acreditem, estou bastante envolvido com o hobby. Para dar uma dica do que tenho feito, mostro este link. Mas o assunto que me fez escrever hoje é outro.
Eu estava pesquisando algumas coisas na
web quando acabei encontrando o
blog do Steve Wetherill, autor do
shoot'n'up Sidewize, comentado sobre um truque de programação citado por Chris Smith. No assim chamado "Sidewize Test" durante desenvolvimento do
Harlequim, um clone do
ZX Spectrum, apresentou incompatibilidades com este jogo que resultava em gráficos cintilantes. O trecho do programa com o problema era:
9CF4 LD BC,#40FF ; Lê porta inexistente #40
9CF7 LD E,#40 ; Valor de atributo
9CF9 LD A,R ; ?
9CFB IN A,(C) ; Faz leitura da porta
9CFD CP E ; Repete enquanto não for encontrado
9CFE JP NZ,#9CF9 ;o atributo #40 deixado pela ULA
9D01 RET ; Fim da sub-rotina
Há uma leitura da porta #40FF que não existe no hardware do Spectrum. O truque aqui é que quando se lê uma porta inexistente, nenhum periférico responde a princípio, porém a ULA pode deixar no barramento o valor dos atributos de cores sendo manipulado naquele momento.
Um dos grandes problemas em animações nos computadores é que, quando está se atualizando o conteúdo da tela, pode-se acabar chocando com o instante em que justo aquela área está sendo enviada para o monitor/TV. Para evitar artefatos desagradáveis, deve-se evitar alterar a parte da tela que está sendo exibida no momento. O truque foi usado por Wetherill para saber o momento em que a ULA estava vasculhando uma certa posição de memória de vídeo e assim, poder acionar a rotina de animação no momento certo. O valor #40 (64) refere-se aos atributos bright 1, paper 0 e ink 0 que é essencialmente invisível; na tela do Sidewize, situa-se no limite entre a tela do jogo e a parte inferior com score e número de vidas.
O valor #40FF para a porta foi encontrado experimentalmente, mas o autor do jogo reconhece que não é compatível com todos os modelos de Spectrum, causando problemas em certos modelos (eu não me lembro de como era no TK90X, qualquer hora valia a pena conferir no meu computador).
Eu achei fascinante essa postagem de Wetherill sobre um jogo de sua autoria e, pelo jeito, ele não está enferrujado!
loading...
-
Knight Lore Disassembly
Foi anunciado no fórum do World of Spectrum a primeira versão do disassembly comentado do jogo Knight Lore. A listagem publicada não é apenas a saída de um programa disassembler de Z80, mas tem vários comentários esclarecendo o código. Este...
-
Número Aleatório Por Xor-shift
Apresento a sub-rotina de geração de número pseudoaleatório que foi usada na minha parte do demo Mission Highly Improbable. Anteriormente mostrei a sub-rotina de Phantom Club para a mesma finalidade, porém a qualidade da sequência gerada...
-
Detecção De Ram 48/128
Conforme tinha prometido na postagem sobre incompatibilidade do Bubble Bobble, eu vou mostrar a rotina de detecção de tamanho de RAM 48/128K que elaborei na ocasião. A ideia era fazer uma rotina que não altere o conteúdo da RAM a ser testada;...
-
The Fury (martech)
Estive trabalhando na adaptação do jogo The Fury para TK90X da Martech, para funcionar na interface de drive Beta 48. Eu achava que ia ser fácil, pois o programa não era protegido, porém a incompatibilidade da porta 254 novamente fez estragos. Após...
-
Bug Na Explorer Iii
Conforme mencionei em postagem passada, a minha interface Explorer não fornece valor do registrador do PSG AY-3-8912 na porta 65533, como ocorre no ZX Spectrum 128. Isto traz uma incompatibilidade que não é percebida na maioria dos programas, mas me...
Eletrônica