π
<-
Chat plein-écran
[^]

Langage C sur ez80: Vos questions/problèmes

Assembleur, Axe, C/C++, ICE...

Langage C sur ez80: Vos questions/problèmes

Message non lude Wistaro » 05 Fév 2017, 19:06

Bonjour à tous,

Vous avez peut-être commencé à programmer en langage C sur votre calculatrice, et vous bloquez sur un code qui ne fonctionne pas? Vous avez des ram cleared intempestifs? Vous avez tout essayé et rien ne fonctionne?

Pas de problème.

Ici, vous pourrez poser votre question ou expliquer votre souci à l'ensemble de la communauté.
Les autres internautes se chargeront de vous répondre!

Souvenez-vous, il n'y a pas de questions bêtes :)

Ce topic est dédié aux questions/problèmes et n'est pas destiné à vous faire le programme de A à Z.
Les membres peuvent vous débloquer, mais ils ne vous donnerons jamais le code "clef en main"!


Retrouvez un tutoriel en français sur le langage C ici: viewtopic.php?f=12&t=18775 ou en anglais ici:
Avatar de l’utilisateur
WistaroSuper Modo
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 88%
 
Messages: 3158
Images: 37
Inscription: 25 Fév 2013, 16:21
Localisation: Toulouse
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: Ingénieur en électronique
YouTube: Wistaro
Twitter/X: Wistaro
GitHub: Wistaro

Re: Langage C sur ez80: Vos questions/problèmes

Message non lude Wistaro » 11 Fév 2017, 18:57

Bon j'inaugure ce forum avec un question qui peut sembler bête mais qui me pose problème.

Mon souci est très simple. Je souhaite déplacer un/plusieurs sprites sur un autre assemblage de sprite.

On m'a expliqué (et je me suis renseigné) qu'il fallait utiliser la méthode du "double-buffering" pour éviter les traces laissées par le passage du sprite.

Malheureusement, je dois sûrement mal m'y prendre.
Voici comment je procède:
Le curseur est le sprite que l'on souhaite faire bouger par dessus.

Code: Tout sélectionner
On récupère la fenêtre dans un sprite de la taille de l'écran dans un pointeur "tototo"
Affichage en transparence du curseur à la position du curseur
Boucle While(){

     si fleche haut:
            Incrémentation du compteur pour le curseur
            Affichage du sprite tototo
            Affichage en transparence du curseur à la nouvelle position
            Affichage du sprite tototo
            Affichage en transparence du curseur à la nouvelle position
     FinSi
     Si fleche bas: [...] // idem
     Si fleche gauche: [...] //idem
     Si fleche droite: [...]  //idem

           
}


Après de nombreux tests infructueux, je fais appel à vous :p
Auriez-vous une solution? Ma logique n'est-elle pas la bonne?

Merci!

(PS: le code est disponible ici en read/write: https://tiplanet.org/pb/?id=11600_14853 ... ile=main.c )
Nouveau sur le site, Anonymous ? Avant de poster sur le chat et sur le forum, n'oublie pas de lire les règles. En cas de problème, tu peux m'envoyer un message, je réponds rapidement.

Liens utiles:
Image
Découvre mes programmes et mon site!
Avatar de l’utilisateur
WistaroSuper Modo
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 88%
 
Messages: 3158
Images: 37
Inscription: 25 Fév 2013, 16:21
Localisation: Toulouse
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: Ingénieur en électronique
YouTube: Wistaro
Twitter/X: Wistaro
GitHub: Wistaro

Re: Langage C sur ez80: Vos questions/problèmes

Message non lude MateoConLechuga » 12 Fév 2017, 03:15

I modified your main function code so that way you can see how to do it :) There isn't any double buffering, but if you have questions on how to do it feel free to post. Enjoy!
Avatar de l’utilisateur
MateoConLechugaVIP++
Niveau 8: ER (Espèce Rare: nerd)
Niveau 8: ER (Espèce Rare: nerd)
Prochain niv.: 60.5%
 
Messages: 50
Inscription: 12 Oct 2015, 21:56
Genre: Homme
Calculatrice(s):
MyCalcs profile
GitHub: mateoconlechuga

Re: Langage C sur ez80: Vos questions/problèmes

Message non lude Wistaro » 13 Fév 2017, 16:08

MateoConLechuga a écrit:I modified your main function code so that way you can see how to do it :) There isn't any double buffering, but if you have questions on how to do it feel free to post. Enjoy!


Big thanks I understand better :)

I just add "gfx_GetSprite(behind_cursor, cursor_x, cursor_y);" in the moving conditions, to avoid cursor "flapping" effect.

Thanks for unlocking me :)
Nouveau sur le site, Anonymous ? Avant de poster sur le chat et sur le forum, n'oublie pas de lire les règles. En cas de problème, tu peux m'envoyer un message, je réponds rapidement.

Liens utiles:
Image
Découvre mes programmes et mon site!
Avatar de l’utilisateur
WistaroSuper Modo
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Prochain niv.: 88%
 
Messages: 3158
Images: 37
Inscription: 25 Fév 2013, 16:21
Localisation: Toulouse
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: Ingénieur en électronique
YouTube: Wistaro
Twitter/X: Wistaro
GitHub: Wistaro

Re: Langage C sur ez80: Vos questions/problèmes

Message non lude Litarvan » 09 Mar 2017, 15:59

Bonjour !

Je commence la programmation C sur CE depuis peu, et j'essaie pour l'instant d'afficher un splash tout simple.
Hors, je n'arrive pas à afficher du texte et une sprite sur le même écran.

Si je dessine la sprite, le texte ensuite sera invisible.
Si je dessine la sprite, puis remet la palette de base, le texte sera visible mais la sprite avec des couleurs moches.
Si je dessine pas la sprite, le texte sera visible.
Et dans ces trois cas, le deuxième texte que je dessine est buggé.

Voilà mon code :

Code: Tout sélectionner
    gfx_SetPalette(logo_gfx_pal, sizeof(logo_gfx_pal), 0);

    gfx_SetDrawBuffer();

    gfx_Sprite(logo, 50, 75);

    gfx_SetDefaultPalette(gfx_8bpp);
    gfx_SetTextFGColor(gfx_black);
    gfx_SetMonospaceFont(8);

    gfx_PrintStringXY(strcat("Paint v", VERSION), 120, 80);
    gfx_PrintStringXY("Appuyez sur une touche", 120, 110);

    gfx_SwapDraw();


Voilà le résultat de ce code (qui est le deuxième cas que j'ai décrit).

Image

Merci d'avance pour votre aide :/
Avatar de l’utilisateur
Litarvan
Niveau 0: MI (Membre Inactif)
Niveau 0: MI (Membre Inactif)
Prochain niv.: 0%
 
Messages: 9
Inscription: 21 Oct 2016, 22:27
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile
Classe: 2nde

Re: Langage C sur ez80: Vos questions/problèmes

Message non lude MateoConLechuga » 09 Mar 2017, 20:18

Since you converted your image using a custom palette rather than using the default palette (xlibc) option, you have to specify the correct text foreground color. You can specify for example something like this instead:

Code: Tout sélectionner
#define TEXT_FG_COLOR 254

    gfx_SetPalette(logo_gfx_pal, sizeof(logo_gfx_pal), 0);

    gfx_SetDrawBuffer();

    gfx_Sprite(logo, 50, 75);

    // gfx_SetDefaultPalette(gfx_8bpp);
    // gfx_SetTextFGColor(gfx_black);
    gfx_palette[TEXT_FG_COLOR] = gfx_RGBTo1555(0, 0, 0);
    gfx_SetTextFGColor(TEXT_FG_COLOR);
    gfx_SetMonospaceFont(8);

    // gfx_PrintStringXY(strcat("Paint v", VERSION), 120, 80); // This line is incorrect
    gfx_PrintStringXY("Appuyez sur une touche", 120, 110);

    gfx_SwapDraw();


Alternatively you can look at what colors are generated in the convpng output using the `#OutputPaletteImage` option as well, and use one of those indexes instead. Or just add the line `#Palette : xlibc`

Also, strcat doesn't work that way. You have to allocate space in your buffer to store the resulting string.
Avatar de l’utilisateur
MateoConLechugaVIP++
Niveau 8: ER (Espèce Rare: nerd)
Niveau 8: ER (Espèce Rare: nerd)
Prochain niv.: 60.5%
 
Messages: 50
Inscription: 12 Oct 2015, 21:56
Genre: Homme
Calculatrice(s):
MyCalcs profile
GitHub: mateoconlechuga

Re: Langage C sur ez80: Vos questions/problèmes

Message non lude Litarvan » 10 Mar 2017, 14:05

Works perfectly ! Thanks a lot, your work is awesome
Avatar de l’utilisateur
Litarvan
Niveau 0: MI (Membre Inactif)
Niveau 0: MI (Membre Inactif)
Prochain niv.: 0%
 
Messages: 9
Inscription: 21 Oct 2016, 22:27
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile
Classe: 2nde

Re: Langage C sur ez80: Vos questions/problèmes

Message non lude Adriweb » 10 Mar 2017, 14:07

You can also use a (global) temp buffer for string operations if need be, it avois the "heavy" heap allocs, and strcat (etc.) works just fine as well
Image

MyCalcs: Help the community's calculator documentations by filling out your calculators info!
MyCalcs: Aidez la communauté à documenter les calculatrices en donnant des infos sur vos calculatrices !
Inspired-Lua.org: All about TI-Nspire Lua programming (tutorials, wiki/docs...)
Avatar de l’utilisateur
AdriwebAdmin
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Prochain niv.: 80.2%
 
Messages: 14616
Images: 1218
Inscription: 01 Juin 2007, 00:00
Localisation: France
Genre: Homme
Calculatrice(s):
MyCalcs profile
Twitter/X: adriweb
GitHub: adriweb


Retourner vers Langages alternatifs

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 16 invités

-
Rechercher
-
Social TI-Planet
-
Sujets à la une
Comparaisons des meilleurs prix pour acheter sa calculatrice !
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
Phi NumWorks jailbreak
123
-
Faire un don / Premium
Pour plus de concours, de lots, de tests, nous aider à payer le serveur et les domaines...
Faire un don
Découvrez les avantages d'un compte donateur !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partenaires et pub
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
1467 utilisateurs:
>1428 invités
>33 membres
>6 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Autres sites intéressants
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)