Eletrônica
Número aleatório no Phantom Club
Como tenho feito costumeiramente nos últimos tempos, estava investigando o esquema de carregamento do jogo do TK90X Phantom Club para adaptá-lo ao disco Beta.
O esquema de carregamento é o Speedlock 5, que possui um número grande de decodificadores. Como desvendar os decodificadores é muito tedioso, o uso do recurso de breakpoint ativado por evento "tape:stop" poupa muito esforço. Examinando a listagem de disassembly, chega-se ao trecho:
ORG 64600
DI
LD SP,65152
LD HL,16384 ; Copiar bloco 16384-17793
LD DE,23552 ;para 23552-24961.
LD BC,1410
LDIR
LD A,R ; R=126. Semente de gerador de
LD (42452),A ;
num. aleatório.
Um fato que me chamou a atenção é a presença da instrução LD A,R
, que transfere o conteúdo do registrador R para A. Na sequência, o valor é transferido para a memória em 42452. O registrador R é bastante estranho: os 7 bits menos significativos (bits 0 a 6) são incrementados em cada instrução do Z80, porém o bit 7 não muda, a não ser que tenha sido atribuído pela instrução LD R,A
. Alguns programas protegidos usam esse bit para detectar alguma tentativa de hacking. Pensei ser este o caso e resolvi investigar mais e cheguei à seguinte sub-rotina:
ORG 42451
;
Random LD C,Seed
INC C ; Seed=(Seed+1)%256
LD A,C
ADD A,A ; Seed=(21*Seed)%256
ADD A,A
ADD A,C
ADD A,A
ADD A,A
ADD A,C
LD (Random+1),A ; Save new seed value
RLCA ; Take 4 most significant
RLCA ;bits of random number
RLCA ;(range is 0-15).
RLCA
AND 15
RET
Este é um gerador de número pseudo-aleatório no faixa de 0 a 15. A semente de 8 bits que fica em 42452 é incrementado em 1 e, depois, multiplicado por 21. O resultado é a nova semente, que é guardada na RAM, para uma futura execução da sub-rotina. Este valor então é convertido para de 4 bits, que pode variar de 0 a 15.
O interessante é que a semente deste gerador é inicializada pelo registrador R. Porém é um esforço em vão, pois o seu valor inicial sempre é o mesmo, decorrente provavelmente do uso de R nos descodificadores do Speedlock.
loading...
-
Dica Tv Electronia 20nt Chassis 11ak30
Defeito--Não liga. Led vermelho aceso. Ao tentar ligar, o led passa a verde mas, no mesmo instante, o led volta para vermelho e a fonte da tv não arma.Valores ...
-
Dica Tvs Panasonic Tx-25xd3e Chassis Euro 2m
Defeito--Este tv estava em protecção, trazia o transístor de saída de linhas (2SD1577- LB) em curto. Depois de o substituir, o tv arrancou apresentando o seguinte ...
-
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...
-
Outra Rotina De Detecção De Ram 48/128k
Eu publiquei nesta postagem, uma rotina que faz a detecção no TK90X da configuração com ou sem a TKMEM-128 (128 ou 48K de RAM). Modifiquei-a e consegui fazer com que ficasse menor ainda (25 bytes). Esta rotina testa se ocorre chaveamento entre...
-
Thundercats V. 2 Para Basic 128
Mal acabei de lançar uma adaptação do Thundercats para Beta e TKMEM-128 e estou com a versão 2. A versão anterior tinha um problema: não consegue carregar a partir do BASIC 128, portanto tinha que dar um 'USR 0' antes. Na versão 2 não...
Eletrônica