Samuel j'ai regardé ton code de générateur pseido aléatoire en 6809...
Je reprend les points parce qu'il y a des choses que je ne comprend pas...
Code:
unsigned xorshift( )
{
xs ^= xs << 7;
xs ^= xs >> 9;
xs ^= xs << 8;
return xs;
}
Ca c'est le code source C et si je comprend bien,
Xs<-1 (au départ)
on décale Xs de 7 sur la gauche Xs1<-128
puis Xs<- Xs XOR 128, soit 1 XOR 128 = 129
On décale Xs de 9 à droite : 129 décalé de 9 = 0
On applique un XOR entre 129 et ce 0, soit 129
Puis on fait un décalage de 8, soit 256x129
Si on reprend ton code assembleur
Code:
SEED set *+1
ldd #1 ; 3
*
* xs ^= xs << 7
*
lsra ; 2
rorb ; 2
eorb <SEED,pcr ; 5
stb <TMP,pcr ; 5
Je n'y comprend rien!!
1/ On est sensé faire du décalage à gauche et lsr+ror c'est du décalage à droite (???)
2/ Il me semble ici qu'il n'y a qu'un décalage seulement avant d'appliquer l'EOR ? C'est quoi PCR ? Où sont les 6 autres décalages avant d'appliquer l'EOR ? Est ce le <SEED,PCR qui repositionne au niveau du lsra ?
Ou alors peut être qu'un décalage de 7 à gauche et un Xor est l'équivalent de ce que tu as codé ?
Après, il est vrai que 7 = 8-1 et 9=8+1... Peut être que ça vient de là ?
Finalement j'ai compris le truc, le but est de transférer B vers A quand on fait un décalage de 7 b a gauche puis un décalage à droite et vice versa... Là ça va bien parce qu'il n'y a qu'un écart de 1 comparé à 8 bots, mais s'i y avait un écart de 3 ou 4 décalages, on serait obligé de tous les faire. Alors que le Z80 lui, permet de faire des décalage direct de 4 bits il me semble...