Número aleatório por xor-shift
Eletrônica

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 não é das melhores.

Uma sequência de números aleatórios não deveria ser previsível nem repetitiva. Números pseudoaleatórios são geradas por aplicações de operações matemáticas e, apesar de aparentemente um valor gerando não ter relação com o anterior, a sequência tende a se repetir depois de um certo período. Tais geradores são também determinísticos, isto é, a sequência de números é reprodutível.

O gerador de números pseudoaleatórios que usei no demo foi elaborada por Patrik Rak:

rnd     ld  hl,0xA280   ; yw -> zt
        ld  de,0xC0DE   ; xz -> yw
        ld  (rnd+4),hl  ; x = y, z = w
        ld  a,l         ; w = w ^ ( w << 3 )
        add a,a
        add a,a
        add a,a
        xor l
        ld  l,a
        ld  a,d         ; t = x ^ (x << 1)
        add a,a
        xor d
        ld  h,a
        rra             ; t = t ^ (t >> 1) ^ w
        xor h
        xor l
        ld  h,e         ; y = z
        ld  l,a         ; w = t
        ld  (rnd+1),hl
        ret

Um valor pseudoaleatório de 8 bits é retornado no registrador A ou L. Seu algoritmo é baseado em operações xor-shift com semente de 32 bits, de forma que a sequência passa a se repetir após um período de 232−1 vezes. O resultado é até melhor que a função RND do BASIC. Outro ponto favorável é que o código é curto e de execução bastante rápida. Mais detalhes técnicos desta algoritmo pode ser encontrado aqui.

O arquivo fonte contendo o assembly acima pode ser baixado aqui.




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-32pk25f Chassis Euro-4h
Defeito--Imagem a preto e branco ou com as cores alteradas com manchas como se o              TRC estivesse magnetizado. Foi regravada a eeprom mas não resultou. Em           ...

- 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       ...

- 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








.