Tom Moertel tinha uma missão: programar um jogo para o TRS-80 Color Computer 3. Esse micro, apesar de ter gráficos muito bons para a época, não tinha um processador de vídeo para facilitar a vida do programador, então nada de sprites, scroll por hardware, ou outras mordomias típicas dos privilegiados. O négocio era mover bytes no buffer de tela e dar-se por satisfeito.
A rotina em Assembler que Tom e o colega dele desenvolveram para mover sprites era muito lenta, e parecia não haver maneira de otimizá-la. Até que eles resolveram vender a alma a Cthulhu em troca de poderes de programação sobrenaturais.
O resultado você vê aqui. Definitivamente, não é coisa de Jesus.
Sensacional!!!
PSHS e PULS são instruções deveras poderosas!
Um pré-requisito para quem quer programar em assembler é esquecer todas as “frescuras” que aprendemos nas outras linguagens de programação, exceto uma! Comentar (em demasia) cada coisa que você está fazendo, pois de um dia pro outro é capaz de você já não lembrar direito o que aquilo faz — dependendo de onde está “ld (HL),A” pode escrever algo na tela ou fazer o sistema entrar em coma.
…aí o cara vai e bota o comentário utilíssimo:
LD (HL),A ; ARMAZENA O ACUMULADOR NA POSICAO
; DE MEMORIA APONTADA POR HL
E aí você elogia a atividade profissional da digníssima progenitora do cara. Um exemplo (meu) da vida real:
(...)
ld (TABLO),HL
ld A,(HL) ; Leio o endereço em TABLO
and 0x03 ; 00XX0000
rr A ; 000XX000
rr A ; 0000XX00
rr A ; 00000XX0
rr A ; 000000XX
ld C,A ; E armazeno em C
(...)
E mesmo assim já olhei trechos disto aqui e me perguntei sobre o que estava acontecendo.