1

Bonjour,
j'ai essayé de suivre le code en asm de la fonction rand à l'aide du débugueur asm de Wabbitému, et je suis tombé sur un bout de code qui me semble très bizzard :

xor a
rrd
inc hl
rrd
inc hl
rrd
inc hl	
rrd
inc hl
rrd
inc hl
rrd
inc hl
rrd
inc hl
rrd
inc hl
ret

je sais que xor a ser à mettre 0 dans a, que inc hl augmente hl de 1.
Sauf erreur de ma part, rrd affecte à a la valeur (hl) modulo 16.

Mais pourquoi alors mettre tous ces rrd et pas que le dernier?

Est-ce que quelcun aurrait une idée de l'utilité et/ou saurait ce que j'ai pas compris?

Merci d'avance
Sandro

2

Voici ce que fait ton code.

xor a ; mettre 0 dans a
rrd ; mettre les 4 bit de poids faible de a dans les 4 bits de poids fort de l'emplacement mémoire hl et placer les 4 bits de poids fort de l'emplacement pointé par hl dans les 4 bits de poids faible de l'emplacement hl et mettre les 4 bits des poids faible de l'emplacement memoire hl dans les 4 bits de poids faible de a
inc hl ; on se déplace un octet plus loin dans la mémoire
rrd ; on mélange encore mais avec un autre emplacement mémoire
etc...

On ne mélange pas avec hl mais avec (hl)
Donc si hl vaut 0x5000 comme dans l'exemple du pdf ci dessous, alors on melange avec l'emplacement mémoire et pas 0x5000...

Bref, à la fin j'imagine qu'on va se servir de a comme une composante pour le random.

Regarde ici pour rrd : http://www.z80.info/zip/z80cpu_um.pdf

Ou ici (moins détaillé) : http://www.z80.info/z80syntx.htm#RRD

Note que rrd est très lent (18 T-states c'est abominable).
Généralement on utilise aussi le registre r comme le fait Joe Wingbermuehle avec sa fonction random (ion) :
;-----> Generate a random number
; input b=upper bound
; ouput a=answer 0<=a<b
; all registers are preserved except: af and bc
random:
push hl
push de
ld hl,(randData)
ld a,r
ld d,a
ld e,(hl)
add hl,de
add a,l
xor h
ld (randData),hl
sbc hl,hl
ld e,a
ld d,h
randomLoop:
add hl,de
djnz randomLoop
ld a,h
pop de
pop hl
ret


Mais avec cette fonction il faut choisir un emplacement randData pour que ça fonctionne.


3

ApKT
smile

4

Merci beaucoup. par contre le but n'est pas de créer une fonction rand mais de comprendre celle du basic.

Sandro

PS : si quelcun connaitrait un logiciel capable d'optenir directement la rom désassemblé sous fichier texte (pas comme les débuggueurs asm où il faut tout recopier ligne par ligne), je serais bien intéréssé.

5

Peut-être tu t'interesserais à:
http://www.brandonw.net/calcstuff/OS2.41_1.02dis.zip
http://www.brandonw.net/calcstuff/OS2.43Disassembly.zip
http://www.brandonw.net/calcstuff/OS2.53MPDisassembly.zip

Il a utilisé "The Interactive Disassembler" pour générer ces fichiers. Mais je voudrais savoir pourquoi tu veux voir tout ça smile

6

Merci beaucoup pour ces liens. Le but est "simplement" de comprendre l'algorithme qui permet d'optenir les nombres aléatoires. Je suis venu là dessus suite à une question de ma prof qui, sachant que je m'y connais bien en TIs, voulait savoir si je connéssais cet algorithme (qu'elle ne connait pas). ça fait donc près d'un mois que je cherche, mais pour l'instant je n'avais rien trouvé de bien concluant, malgrès un questionnement de quelques autres profs de maths (qui tous veulent connaitre la réponse, dont un qui m'a même demander de le prévenir par mail si je le trouve après la fin de l'année).

En bref, il s'agit surtout de curiosité.

Merci beaucoup
Sandro

7

Salut tous le monde. Je voulais savoir s'il était possible de réutiliser ces roms pour mon site sur l'ému: http://tiemulation.kegtux.org/
Merci d'avance.

8

Je pense qu'il faut que tu contacte l'auteur, Brandon. Tu as son site ici : http://www.brandonw.net/

Sandro

9

Merci