CPC Rulez
https://cpcrulez.fr/forum/

test fin de table
https://cpcrulez.fr/forum/viewtopic.php?f=4&t=4541
Page 2 sur 2

Auteur :  shap [ 03 Juin 2011, 12:55 ]
Sujet du message :  Re: test fin de table

TOUKO a écrit :
faut voir si un test de bit sur le z80 est plus rapide qu'une valeur .

Auteur :  shap [ 03 Juin 2011, 12:58 ]
Sujet du message :  Re: test fin de table

oups, j'ai validé trop vite...

pour le test bit ou valeur, ça se vaut.

pour un bit 15 (donc bit 7 du poids fort) tu décales tes bits à gauche, et tu fais un test conditionnel sur la carry.

un cp valeur te prend 2 nops, tu peux faire cp registre si t'as préchargé ton flag (mais tu perds un registre 8 bits).

je dirais que le test du bit est plus pratique mais il nécessite de réserver un bit justement ....

Auteur :  TOUKO [ 03 Juin 2011, 13:00 ]
Sujet du message :  Re: test fin de table

Y'a pas d'instructions pour le test de bits ???

Bitn ça permet ca non ??

Auteur :  shap [ 03 Juin 2011, 13:01 ]
Sujet du message :  Re: test fin de table

TOUKO a écrit :
Y'a pas d'instructions de test de bits ???


Si mais ça prend plus de temps que de décaler.

sinon, oui peux faire bit 7,registre et un test conditionnel sur le flag z.

bit x,registre => 2µs

Auteur :  TOUKO [ 03 Juin 2011, 13:04 ]
Sujet du message :  Re: test fin de table

Ah c'est ce qu'il me semblait, ca prend 2 cycles (vu que l'octet de poid fort sera déjà dans un reg), on peut pas faire plus simple ..

Auteur :  shap [ 03 Juin 2011, 13:08 ]
Sujet du message :  Re: test fin de table

si, on peut faire (avec valeur à tester dans A)

RLA
JR C,xxxx

RLA => 1µs

Auteur :  TOUKO [ 03 Juin 2011, 13:13 ]
Sujet du message :  Re: test fin de table

oui RLA, mais après ton RLA, faut bien que tu fasses quelque chose, tester un flag par exemple :wink:
Edit: merde, en fait t'as raison, car c'est pareil avec le test de bit :downnn:

Faut que j'arrête de penser 6502 moi lol ..

Auteur :  Megachur [ 03 Juin 2011, 13:15 ]
Sujet du message :  Re: test fin de table

en fait, je prends une valeur dans cette liste par frame

ce mot de 16bits est décomposé comme cela :

sur 8 bits un compteur de &01 à &ff
sur 8 bits un octet qui va être répéter autant de fois qu'indiqué par le compteur (de &00 à &ff)

quand le compteur sera à 0 je prends une nouvelle valeur dans la liste.

donc c'est vrai que je pourrai utiliser un test sur la valeur &00 du compteur pour indiquer la fin de liste mais je pensais l'utiliser pour indiquer un compteur 'infini'...

perdre effectivement un bit pour un test...cela aurait pu être une solution, mais au final cela ne fait gagner qu'un nop pour une perte important (128) au niveau du compteur.

mettre un ld bc,table_adr_end avant, c'est pas une solution car ça prends 3 nop pour 2 de gagnés au niveau des cps (vu que je fais cela qu'une fois par frame max) et encore pour le deuxième cp ça n'arrive qu'une fois toutes les 256/2 possibilités de la table (mot de 16 bits)

merci en tout cas à tous de votre aide !

Auteur :  shap [ 03 Juin 2011, 13:16 ]
Sujet du message :  Re: test fin de table

ben oui

RLA
JR C,xxxx


je fait bien un test sur la carry car RLA renvoi ton bit 7 dans la carry...

si tu fais la même chose avec bit x,r ça fait 2µs plus le saut conditionnel que tu es obligé de faire dans tous les cas (ou le ret, ou le call ou ce que tu veux de conditionnel bien entendu).

Auteur :  TOUKO [ 03 Juin 2011, 13:17 ]
Sujet du message :  Re: test fin de table

donc ton compteur, n'est jamais à 0 au départ ..
Donc la valeur 0 valeur pourrai signifier la fin de ta table.
avec le RLA de sharp, ca peut faire pas mal.
Voire au pire 0 dans chaque byte.

Ouai sharp, j'avais vu mon erreur .. :sweatingbullets:

Auteur :  shap [ 03 Juin 2011, 13:21 ]
Sujet du message :  Re: test fin de table

Megachur a écrit :
donc c'est vrai que je pourrai utiliser un test sur la valeur &00 du compteur pour indiquer la fin de liste mais je pensais l'utiliser pour indiquer un compteur 'infini'...

perdre effectivement un bit pour un test...cela aurait pu être une solution, mais au final cela ne fait gagner qu'un nop pour une perte important (128) au niveau du compteur.

mettre un ld bc,table_adr_end avant, c'est pas une solution car ça prends 3 nop pour 2 de gagnés au niveau des cps (vu que je fais cela qu'une fois par frame max) et encore pour le deuxième cp ça n'arrive qu'une fois toutes les 256/2 possibilités de la table (mot de 16 bits)

merci en tout cas à tous de votre aide !


C'est une sorte de codage RLE ton truc donc tu peux réserver une valeur (genre #ff mais que tu ne test que sur l'octet qui défini le nombre de répétitions) donc ton nombre de répétition, passe de 0-255 à 0-254 ce qui n'est pas une perte énorme, et tu n'as plus qu'à tester un octet, ça me parait un compromis acceptable plutôt que gérer un compteur 16bits.

Auteur :  shap [ 03 Juin 2011, 13:25 ]
Sujet du message :  Re: test fin de table

En plus j'avais pas fait gaffe, mais si c'est un codage RLE ton truc, tu n'utilise pas 0 comme code de répétition je suppose...

Donc tu test octet répétition à 0 = fin de la table, un simple OR ou AND fera l'affaire, non ?

Auteur :  Megachur [ 03 Juin 2011, 17:47 ]
Sujet du message :  Re: test fin de table

shap a écrit :
En plus j'avais pas fait gaffe, mais si c'est un codage RLE ton truc, tu n'utilise pas 0 comme code de répétition je suppose...

Donc tu test octet répétition à 0 = fin de la table, un simple OR ou AND fera l'affaire, non ?


oui c'est tout à fait une solution possible...
mais comme j'indiquai dans mon post précédent, je me demandais si je n'allais pas utilisé l'octet répétition à 00 pour dire que c'est une répétition infinie !

Merci à tous :biere: :kiss: :kiss: :kiss: :kiss: d'avoir phosphorés avec moi sur cette optim !
surtout que j'ai plein d'autres pgms en cours qui utilisent les tests fins de tables... donc ces réflexions peuvent servir à plein d'autres !

Page 2 sur 2 Le fuseau horaire est UTC+1 heure
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/