Forum

Catégorie : Programmes
Forum : Les programmes des internautes
Vues : 2419
Réponses : 27
Type : discussion
Etat : réponses autorisées

[HEX] Scroller l'écran vers le bas

matrefeytontias le 03/07/2012 à 03:11
Salut les gens !

Voici un autre programme hexa de ma conception, pas forcément utile, mais qui peut être sympa pour des animations ou autres : il scrolle le buffer vers le bas (l'écran graphique).

Voici donc le code (toujours pour 82 stats, je poste que les versions 82 stats à chaque programme hexa) :

ZSCROLL :
Code
21298E
110003
19
0640
C5
060C
11E8FF
19
7E
110C00
19
77
11F5FF
19
10F4
C1
10EA
CD9C4B
C9
End
0000
End


Sachez cependant que ce prgm ne scroll l'écran qu'une fois -> ne fais descendre son contenu que d'un pixel, donc utilisez-le dans une boucle dans un programme Basic :
Code
For(I,1,64,1)
Send(9prgmZSCROLL
End

Fais disparaître l'image du graph buffer vers le bas
Le programme hexa met le graph à jour tout seul, pas besoin de DispGraph.

Un screen très prochainement parce que là je suis sur téléphone, et mon émulateur supporte pas les screens (quoi, vous avez jamais vu un gars inventer de l'hexa à 3h du mat' sur un émulateur sur téléphone ? tongue.gif )
blg_flg le 03/07/2012 à 11:13
Je me suis toujours posé la question suivante: est-ce qu'un programme en hexa est long à lancer? Parce que je ne sais pas si faire un prog en basic serait plus "rentable".
matrefeytontias le 03/07/2012 à 12:20
Un programme ASM sera toujours exécuté (et amorcé) plus vite qu'un programme Basic, puisque pour le lancer il faut juste le copier à l'adresse $9327 et pour l'exécuter il n'y a rien à traduire, alors que le Basic, faut l'interpréter et exécuter chaque instruction séparément.
EGUL le 03/07/2012 à 12:23
Ouais mais bon, faut quand même apprendre l'ASM crazy.gif crazy.gif crazy.gif
matrefeytontias le 03/07/2012 à 12:24
Non mais Le Grec me demandait quel était le plus rapide, je lui réponds.

Pis tu sais, l'ASM y'a boooooocoup moins de fonctions que le Ti-Basic hein.
matrefeytontias le 06/07/2012 à 01:02
Merci happy.gif

Et bien sûr que ça fonctionne, c'est un peu le but bigmouth.gif
linkakro le 10/07/2012 à 00:26
Tu sais quoi ? Tu viens encore de créer un programme attendu depuis longtemps, en tout cas par moi. bigmouth.gif

J'aimerais bien pouvoir scroller horizontalement et dans les deux sens.
Si jamais un tel projet naissait, je pense qu'il faudrait stocker dans une liste quelques arguments pour le paramétrer. (si cela se fait, autant choisir aussi un nombre de pixels)
Et si c'est trop compliqué, il faudra plusieurs programmes. sad.gif
matrefeytontias le 10/07/2012 à 00:57
Je compte faire 4 programmes pour 4 directions : ZSCROLLD (down, celui que j'ai posté), ZSCROLLU (up), ZSCROLLL (left) et ZSCROLLR (right). J'en suis pas sûr, mais il ne devrait pas y avoir plus d'une dizaine de lignes de changées par programme happy.gif
linkakro le 25/07/2012 à 14:24
Si tu t'encombres d'une boucle écrite en hexadécimal c'est possible.
Le vertical est peut-être même faisable sans boucle si jamais c'est effectué via des adresses.
En ce qui concerne le scroll vertical, il suffit de supprimmer un multiple de 12 octets de la fin du fichier image et d'en ajouter autant de vierges au début.
L'horizontal, il faudra modifier un bit par ligne... c'est bien plus tordu.

EDIT: je débute en assembleur alors je peux me tromper plus facilement.
De plus la manipulation est bien plus difficile que le concept d'origine puisque les registres occupent maximum 2 octets.
ld le 25/07/2012 à 14:34
Impeccable ! Çà me va !
Çà m’intéresse, en effet je ne pense pas qu'une boucle soit nécessaire. Pourrais-tu juste m'indiquer la valeur ou la ligne que je dois changer pour que le prgm Asm descende l'écran de 6 pixels exactement s'il te plait ? J'aurai du mal à le faire tout seul.
J'ai converti chaque lignes de base 16 à base 10 pour trouver une valeur égale à quelque chose comme 62 ou 94 et la remplacer mais rien. Je pense que ce n'est pas de cette façon que je trouverai.
linkakro le 25/07/2012 à 14:47
Si matrefeytontias ne me donne pas le code source je devrai chercher à décompiler son code ce qui n'est pas facile du tout.
De plus je n'ai pas encore fini d'apprendre les boucles.
Je peux même dire que j'ai peut-être raté des informations importantes des tutoriels... je suis un peu trop pressé et je tente d'utiliser autant la 83 que la 83plus.
ld le 25/07/2012 à 14:55
Ooooh... Une question !
Comment on traduit la fonction Return pour revenir au prgm appelant dans un prgm Asm ? C'est possible ? Je sais que la fin c'est C9.
linkakro le 25/07/2012 à 15:20
C9 signifie ret comme retour.

Voici le peu que j'ai réussi à décompiler en utilisant le tutoriel d'hexadécimal de Matrefeytontias.
Code
21298E   ld hl,$8e29
110003   ld de,$0300
19
0640   ld b,$40
C5
060C   ld b,$0C
11E8FF   ld de,$ffe8
19
7E     
110C00   ld de,$000C
19
77
11F5FF   ld de,$fff5
19
10F4   djnz f4      b--:if(b!=0){recule de $c octets (12octets)}
C1
10EA   djnz ea      b--:if(b!=0){recule de $16 octets (22octets)}

CD9C4B   call $4b9c

C9   ret
ld le 25/07/2012 à 18:29
OOUULLA !! frozen.gif frozen.gif
J'ai changer 10EA en 10EE l'écran s'est mit à clignoter avec des zébrures !
Mem clared cry.gif
Encore heureux j'avais fait une copie conforme de ma TI sur une autre avant ahh.gif
Je vais plutôt faire l'apprenti sorcier sur Vti...
matrefeytontias le 25/07/2012 à 18:52
19 c'est "add hl,de"

C5 c'est "push bc"

23 c'est "inc hl"

7E c'est "ld a,(hl)"

77 c'est "ld (hl),a"

C1 c'est "pop bc"

Après voilà, je fais les prgm et je poste happy.gif
The K le 25/07/2012 à 20:02
Ça a l'air amusant l'asm ... faudra que j'apprenne ça un jour tongue.gif

C'est peut etre un bagage intéréssant si je veux faire informaticien plus tard ... (même si ce n'est pas mon projet actuel, ça pourrait etre une porte de secours !)
linkakro le 25/07/2012 à 20:44
matrefeytontias :

Créeras-tu au passage ce que recherche l.davin (maintenant portant le pseudonyme ld) ?
Cela peut être simple comme compliqué. Si on est pas forcé d'utiliser une boucle basic cela peut être pratique.

C'est quoi la romcall 4b9c ? Elle n'est même pas dans ultimate.include.
edit: ultimate est pour 83plus... je ne trouve pas non plus du ti83.inc.
ld le 25/07/2012 à 23:10
J'utilise l'émulateur Vti. La Rom est celle d'une Ti-83+
Si je recopie le prgm tel-quel et que j'utilise le lanceur en basic il me renvoi une erreur syntax sur le 9 de "Send(9prgmScrol".
Le lancer en asm ne fonctionne pas non plus.
Faut'il placer devant le code la commande "Asm(" et si oui comment s'il vous plaît ?
linkakro le 25/07/2012 à 23:56
Le code hexadécimal de ce sujet est conçu pour 82stat(fr)/83.
Il se recopie dans un programme 83p suivi de "End:0000:End" et s'execute dans une 83/82stat(fr) par la commande "Send(9prgmX".

Si le code hexadécimal de ce programme était conçu pour une 83plus, il faudrait le recopier dans un 8xp précédé de "Asmprgm" et l'executer dans une 83plus(se)/84plus(se)/84pocketfr par la commande "Asm(prgmX".

Si tu n'as pas de rom 83/82stat prend celle de ma signature.
ld le 26/07/2012 à 00:15
WAOUH !! Ta Rom fonctionne beaucoup mieux ! C'est génial ! Merci ! bigmouth.gif
matrefeytontias le 26/07/2012 à 00:16
$4b9c c'est _grbufcpy, et je rappelle que pour un même nom, les romcalls ont des adresses différentes entre 83 et 83+. Donc si tu veux tester ce programme sur une 83+, ajoute AsmPrgm au début, remplace CD9C4B par EF6A48 et enlève le End:0000:End. De plus, lance le programme avec la commande Asm( ) comme tu le ferais avec Send(9).

À propos des prgm, je compte utiliser Ans pour avoir le nb de pxl à scroller, ça sera plus simple. Ça fera un truc du genre :
Code
20:Send(9prgmZSCROLLD
linkakro le 26/07/2012 à 01:39
Pourquoi mon ti83.inc contient-il "_grbufcpy_v .equ 5164h" au lieu de "_grbufcpy .equ $4b9c" ?

Je ne comprend pas pourquoi tu utilises "add hl,de" alors que dans ton tutoriel hexa tu as écrit qu'il faut toujours utiliser A.
Citation
A est un peu spécial : c'est l'accumulateur. C'est sur lui qu'on va effectuer des opérations. Par exemple, il est impossible d'ajouter une valeur à B, on doit obligatoirement passer par A.
matrefeytontias le 26/07/2012 à 13:36
C'est une opération 16 bits, je ne l'ai pas encore dit dans le tuto mais HL est l'équivalent 16 bits de A, donc tout ce qu'on fait avec A on peut aussi le faire avec HL. Je continuerai le tuto, mais pour l'instant il est en pause.

Il se trouve que _grbufcpy et _grbufcpy_v sont deux romcalls différentes ^^
ld le 26/07/2012 à 14:26
Ok, çà marche ! happy.gif
matrefeytontias le 01/08/2012 à 17:48
Update !

Voilà maintenant zScroll fonctionnel dans toutes les directions ! bigmouth.gif

De plus, on stocke le nombre de pixels à scroller dans Ans avant l'appel du programme !

zScrollD (down) :
Code
CDDC4E
CDFC4E
43
C5
21298E
110003
19
0640
C5
060C
11E8FF
19
7E
110C00
19
77
11F5FF
19
10F4
C1
10EA
CD9C4B
C1
10DA
C9
End
0000
End


zScrollL (left) :
Code
CDDC4E
CDFC4E
43
C5
21298E
11FF02
19
0640
C5
37
3F
060C
7E
17
77
2B
10FA
C1
10F2
CD9C4B
C1
10E2
C9
End
0000
End


zScrollR (right) :
Code
CDDC4E
CDFC4E
43
C5
21298E
0640
C5
37
3F
060C
7E
1F
77
23
10FA
C1
10F2
CD9C4B
C1
10E6
C9
End
0000
End


zScrollU (up) :
Code
CDDC4E
CDFC4E
43
C5
21298E
110C00
19
063F
C5
060C
7E
11F4FF
19
77
110D00
19
10F4
C1
10EE
CD9C4B
C1
10DE
C9
End
0000
End


Et un ptit exemple Basic pour la route :
Code
AxesOff
ClrDraw
0->Xmin
94->Xmax
0->Ymin
62->Ymax
Text(15,20,"ESPACE-TI
Circle(37,42,20
RandInt(10,25
Send(9prgmZSCROLLD
RandInt(10,25
Send(9prgmZSCROLLR
RandInt(10,25
Send(9prgmZSCROLLU
RandInt(10,25
Send(9prgmZSCROLLL


Je ne peux pas prévoir ce qu'il se passe si le contenu de Ans n'est pas un nombre ...

Bref, testez-le et faites part de vos commentaires winkle.gif
The K le 01/08/2012 à 18:39
Citation
Text(15,20,"ESPACE-TI


C'est un raté j'espère ? laugh.gif

Sinon un grand bravo et un grand merci ^^
Ça va servir à pas mal de monde un jour ou l'autre je pense ça ...
linkakro le 01/08/2012 à 19:00
Excellent mais ZSCROLLU génère des pixels d'origine inconnue au bas de l'écran là où l'écran devrait devenir vierge.
Les abscisses des points sont les mêmes à chaque décalage vers le haut de l'image.
matrefeytontias le 01/08/2012 à 20:00
@The K : c'est un cross-post surtout ^^

@Linkakro : ah voui, j'ai oublié de le changer dans le *.txt que j'ai copié ici ; change le 0640 par 063F et ça sera bon, moi j'édite.