Cette catégorie traite de développements récents destinés à nos vieilles machines, applications, jeux ou démos... Amis programmeurs, c'est ici que vous pourrez enfin devenir célèbres!
En faisant un programme en Z80 pour Hector je bute sur le couple d'instructions CP et JP en voulant tester une valeur je n'arrive pas à trouver comment réaliser le test de manière à faire un saut si la valeur dépasse un certain seuil ???
J'ai essayé toutes les conditions avec JP mais rien n'y fait
bonjour je viens de regarder un de mes vieux listing
bon si tu veux tester une valeur tu met cette valeur dans A
ensuite si tu veux tester si cette valeur est superieur a 128 (par ex)
tu fait un truc du genre
ld a,valeur
cp 80 ---> 128 en hexa
jp nc add -----> saute a l'adresse add si a>= 128 (80 en hexa)
si tu veux tester si ta valeur (que tu a mis dans A) est superieur ou egal a 128 tu fait jp nc
si tu veut tester si ta valeur (que tu a mis dans A) est inferieur a 128 tu fais jp c
si tu veux simplement tester si ta valeur est egale a 128 tu fait jp z
tu a aussi la fonction cp (hl) qui te permet de tester directement une valeur contenue dans une adresse memoire
dans la mesure du possible utilise plutot jr au lieu de jp cela te permet de faire des routines relogable
Pour les développements Z80, j'utilise le Z80 Family CPU User Manual disponible à http://dchector.free.fr/doc.html
Il donne, en particulier, toutes les valeurs du Code Condition après modification du registre A, et tous les codes possibles pour les branchements conditionnels. Ce manuel de référence donne une réponse juste et sans équivoque à toutes les questions possibles.
Dans le cas précis, voir CP s page 158 et JP cc,nn page 239.
J'avais pas pensez a vérifier sur ton site Daniel je pense toujours que tu n'a pas beaucoup de docs pour le Hector et du coup j'ai pas pensé a la doc Z80
Sinon Dominique à mis le doigt sur le problème pour tester une valeur supérieur ou égale
Tant pis je réfléchirais comment contourner ce problème plus tard ...
6502man a écrit :Merci pour votre aide Sinon Dominique à mis le doigt sur le problème pour tester une valeur supérieur ou égale
Là comme ca si tu dois comparer si c'est >= à une valeur en mémoire pointé par hl et que tu n'as pas la (valeur+1) stockée quelque part, tu peux peut être décrémenter l'accu d'une unité juste avant la comparaison (et incrémenter par la suite si la valeur du registre est utilisée plus loin).
Tu dois pouvoir aussi faire deux jp l'un après l'autre. Tout dépend si les flags sont préservés après un saut (je suppose que oui). C'est un "ou" codé en dur:
Bon et bien je n'arrive absolument pas à travailler avec CP, j'ai comme une impression qu'il travaille avec des nombres signés
Depuis le début j'ai raisonné en nombres absolus (0 à 255) mais je suis complétement dans le faux, je pense qu'il fallait raisonné en nombres signés (-127 à +128)
Donc il faut que je reprenne tout pour faire mes tests de valeurs avec un seuil de $BA qui fait $3A en hexadécimal signé
existe t'il une autre instruction de comparaison en Z80 ?
je t'envoi un extrait du livre programmer en assembleur (avec le z80) d'alain pinaud edition P.S.I http://www.mediafire.com/view/myfiles/#la2qb8evbd4g6v8
sinon attention si tu utilise l'instruction JP il faut utiliser l'adresse reel ex: jp 4080 hex
si tu utlise jr c'est un saut relatif ex: jr 32 hex = saut a 60 octet en avant jr d7 hex = saut 40 octet en arriere et la oui comme argument de jr il te faut un nombre signe mais bon si ton prg d'assemblage gere les etiquettes il calcul tous ca comme un grand
excuse moi pour le lien mais je n'arrive pas a afficher l'image
6502man a écrit :..
Ou alors j'arrête de coder sur Z80
Comme on se voit demain chez Daniel on en parle ?
J'ai aussi un Visual Basic de transformation BMP vers MO5 à moitié fini que j'aimerai que tu termines pour moi...