**Le SDK pour fx-9860/Graph85** Topic officiel
Posté le 18/07/2007 15:08
Vu la multitude de topics sur le SDK de la 85, j'ai décidé d'en faire un seul et unique, où l'on posera nos problèmes et explications sur ce même topic, et non pas sur 50, par souci de clareté et de facilité.
Des nouveautés ? Des problèmes ? Des idées ?
Exposez les ici !
Voici une liste de commandes commencées par Muelsaco. N'hésitez pas à rajouter vos commandes dans le topic je les rajouterai pour en faire profiter tout le monde. Merci.
// Locate X,Y,"Texte"
:arrow: locate(x,y); Print("Texte");
// Text X,Y,"Texte"
:arrow: PrintMini(x,y,"Texte",0);
// F-Line x1,y1,x2,y2
:arrow: Bdisp_DrawLineVRAM(x1,y1,x2,y2);
// Tracer une ligne blanche
:arrow: Bdisp_ClearLineVRAM(x1,y1,x2,y2);
// PxlOn x,y & PxlOff x,y
:arrow: Bdisp_SetPoint_VRAM(x,y,<couleur>)
<couleur> : 0 pour le blanc, 1 pour le noir
// Cls
:arrow: Bdisp_AllClr_DDVRAM();
// Actualiser l'écran
:arrow: Bdisp_PutDisp_DD();
Fonction très importante. Elle permet d'afficher une image tracée virtuellement dans la VRAM. Toute image doit d'abord être dessinée dans la VRAM puis affichée à l'écran. Vous ne verrez donc pas votre image s'afficher tant que vous n'aurez pas appelé Bdisp_PutDisp_DD(). À noter que les fonctions GetKey() et Print() l'appellent automatiquement.
While <exp1>
<code>
WhileEnd
:arrow:
while(<exp1>)
{
<code>
}
// StoPict x
:arrow: SaveDisp(x);
x variant de 1 à 3 uniquement.
// RclPict x
:arrow: RestoreDisp(x);
x variant de 1 à 3 uniquement.
// Ouvrir un popup (comme les erreurs syntaxe, etc)
:arrow: PopUpWin(<taille>);
<taille> : de 1 à 8.
Rappels sur les variables globales : Source
* Les variables globales sont à utiliser avec précaution, puisqu'elles créent des liens invisibles entre les fonctions. La modularité d'un programme peut en souffrir et le programmeur risque de perdre la vue d'ensemble.
* Il faut faire attention à ne pas cacher involontairement des variables globales par des variables locales du même nom.
* Le codex de la programmation défensive nous conseille d'écrire nos programmes aussi 'localement' que possible.
L'utilisation de variables globales est jusitifiée, si
* Plusieurs fonctions qui ne s'appellent pas ont besoin des mêmes variables, ou
* Plusieurs fonctions d'un programme ont besoin du même ensemble de variables. Ce serait alors trop encombrant de passer toutes les variables comme paramètres d'une fonction à l'autre.
aliegeois Invité
Citer : Posté le 28/04/2014 19:26 | #
D'accord, est-ce que c'est possible de faire un menu avec comme options : "Jouer, Options, Quitter" et lorsque l'on sélectionne quitter l'application retourne au menu ? Et qu'appelles-tu faire un return dans le main ? juste écrire "return 0;" ?
Regardez mon lecteur de vidéo !
Citer : Posté le 28/04/2014 19:28 | #
Oui, ça suffit.
Lorsque la fontion AddIn_Main est terminée, que ce soit par un return ou parce que l'on est arrivé au bout, tout simplement, le programme s'arrête.
Néanmoins ça remmène au menu, et ensuite, impossible de relancer l'add-in. Puisque la calculatrice va vouloir le ressortir dans l'état dans lequel il a été quitté, elle ne va rien faire, donc il faudra lancer une autre application avant de pouvoir y retourner.
aliegeois Invité
Citer : Posté le 28/04/2014 19:30 | #
Et comment je fais alors pour que l'application ne revienne pas là ou elle était mais recommence depuis le début ?
Regardez mon lecteur de vidéo !
Citer : Posté le 28/04/2014 19:32 | #
Soit tu lances une autre application avant, soit tu ne fais pas de return mais tu renvoie au menu.
Au fait, lorsque tu fais un return depuis le AddIn_Main, fais attention à la valeur: 0 signifie que l'exécution s'est terminée sur une erreur, 1 si tout s'est passé correctement.
aliegeois Invité
Citer : Posté le 28/04/2014 19:35 | #
J'ai bien compris qu'il fallait retourner au menu mais je demande : comment on retourne au menu ? il y a une fonction retournerAuMenu() ?
Regardez mon lecteur de vidéo !
Citer : Posté le 28/04/2014 20:50 | #
En appuyant sur la touche MENU lorsque le programme exécute un GetKey().
aliegeois Invité
Citer : Posté le 28/04/2014 21:27 | #
Je me suis mal exprimé, je demande si on peut retourner au menu principal depuis le programme, je ne veut pas que l'utilisateur ait à appuyer sur le bouton "Menu", je veut que le programme retourne de lui-même au menu. Tu me dis que je ne dois pas faire de return mais renvoyer au menu, très bien mais comment ? En gros je voudrais que le programme "simule" que l'utilisateur ait appuyé sur "Menu".
Regardez mon lecteur de vidéo !
Citer : Posté le 28/04/2014 21:31 | #
Il doit y avoir des syscall de "keyinject" je pense (enfin sur prizm il y a)... Il faut voir les sources de prgm 2, il s'en sert à mon avis.
Citer : Posté le 28/04/2014 21:35 | #
Non, il n'y a pas de tel syscall sur Graph 85.
aliegeois, si tu fais un return depuis le main, c'est tout le programme qui s'arrête, donc c'est une solution qui ne convient pas.
À ma connaissance, il n'y a aucune solution pour ce que tu cherches.
En revanche, les sycalls permettent de lancer directement une application depuis un add-in.
Citer : Posté le 28/04/2014 21:39 | #
Si : il existe un syscall "key_inject", voir le topic de PLL dans les tutoriel
Il fonctionne ainsi :
{
unsigned int key;
key_inject(KEY_CTRL_MENU);
GetKey(&key); // retourne au menu
}
aliegeois Invité
Citer : Posté le 28/04/2014 21:40 | #
Et il n'y aurait pas moyen de faire quelque chose comme :
Getkey(&key);
key = KEY_CTRL_MENU;
}
Regardez mon lecteur de vidéo !
Citer : Posté le 28/04/2014 21:46 | #
Oups.
Ce syscall n'apparaît pas dans la documentation de SimLo. Tu en as une plus complète ?
aliegeois Invité
Citer : Posté le 28/04/2014 21:57 | #
Je viens de faire plusieurs tests avec différentes syntaxes et effectivement, ça ne marche pas. C'est pas grave, je vais travailler différemment. Merci pour l'aide.
Regardez mon lecteur de vidéo !
Citer : Posté le 28/04/2014 22:04 | #
Cette fonction est un syscall. Jette un coup d'oeil au tutoriel pour les utiliser.
Citer : Posté le 28/04/2014 22:31 | #
Les explications des syscalls sont dans le .h fourni dans le tuto
Citer : Posté le 29/04/2014 03:19 | #
record de define WTF battu:
#define DEBUG_TEXT \
char tmp[4];\
tmp[0]=(char)(rx/100)+'0';\
tmp[1]=(char)(rx/10)-(tmp[0]-'0')*10+'0';\
tmp[2]=rx-(tmp[0]-'0')*100-(tmp[1]-'0')*10+'0';\
tmp[3]=0;\
PrintMini(0,0,"RX:",MINI_OVER);\
PrintMini(12,0,(const unsigned char*)tmp,MINI_OVER);\
tmp[0]=(char)(ry/100)+'0';\
tmp[1]=(char)(ry/10)-(tmp[0]-'0')*10+'0';\
tmp[2]=ry-(tmp[0]-'0')*100-(tmp[1]-'0')*10+'0';\
tmp[3]=0;\
PrintMini(0,7,"RY:",MINI_OVER);\
PrintMini(12,7,(const unsigned char*)tmp,MINI_OVER);\
Point3D tmp0=test.getPos();\
tmp0.set((tmp0.getX()<0)?-tmp0.getX():tmp0.getX(),(tmp0.getY()<0)?-tmp0.getY():tmp0.getY(),(tmp0.getZ()<0)?-tmp0.getZ():tmp0.getZ());\
tmp[0]=(test.getPos().getX()>=0)?((char)(tmp0.getX()/100)+'0'):('-');\
tmp[1]=(char)(tmp0.getX()/10)-((test.getPos().getX()>=0)?((tmp[0]-'0')*10):(0))+'0';\
tmp[2]=tmp0.getX()-((test.getPos().getX()>=0)?((tmp[0]-'0')*100):(0))-(tmp[1]-'0')*10+'0';\
tmp[3]=0;\
PrintMini(0,20,"X:",MINI_OVER);\
PrintMini(7,20,(const unsigned char*)tmp,MINI_OVER);\
tmp[0]=(test.getPos().getY()>=0)?((char)(tmp0.getY()/100)+'0'):('-');\
tmp[1]=(char)(tmp0.getY()/10)-((test.getPos().getY()>=0)?((tmp[0]-'0')*10):(0))+'0';\
tmp[2]=tmp0.getY()-((test.getPos().getY()>=0)?((tmp[0]-'0')*100):(0))-(tmp[1]-'0')*10+'0';\
tmp[3]=0;\
PrintMini(0,27,"Y:",MINI_OVER);\
PrintMini(7,27,(const unsigned char*)tmp,MINI_OVER);\
tmp[0]=(test.getPos().getZ()>=0)?((char)(tmp0.getZ()/100)+'0'):('-');\
tmp[1]=(char)(tmp0.getZ()/10)-((test.getPos().getZ()>=0)?((tmp[0]-'0')*10):(0))+'0';\
tmp[2]=tmp0.getZ()-((test.getPos().getZ()>=0)?((tmp[0]-'0')*100):(0))-(tmp[1]-'0')*10+'0';\
tmp[3]=0;\
PrintMini(0,34,"Z:",MINI_OVER);\
PrintMini(7,34,(const unsigned char*)tmp,MINI_OVER);
-en C:
-Un pong.
-Un projet en pause. Je compte le reprendre de temps en temps: Summer Cursed
-mon tuto sur les Str
Mes calto: G25+, G75
Mon minecraft en dévelopement
-Portal2D de JavierXD
-CalCraft de Wime
-GeekBros du groupe GeekBrothers (Eiyeron,Siapran,KevKevVTT,Adbook,LIMachi)
Citer : Posté le 29/04/2014 08:24 | #
Pas mal du tout
C'est pour ton Minecraft ?
Citer : Posté le 29/04/2014 15:13 | #
ouaip, c'est des petites info de debug que je m'affiche (rx et ry sont les angles de rotation de la camera et x,y et z la position de la camera), j'avais pas envie de faire une vrai fonction pour ça, et donc j'avais un gros truc qui traînait au milieu du code et je me suis dit "pourquoi pas le mettre en define tout en haut du programme pour libérer de la place?" et ça a marché.
-en C:
-Un pong.
-Un projet en pause. Je compte le reprendre de temps en temps: Summer Cursed
-mon tuto sur les Str
Mes calto: G25+, G75
Mon minecraft en dévelopement
-Portal2D de JavierXD
-CalCraft de Wime
-GeekBros du groupe GeekBrothers (Eiyeron,Siapran,KevKevVTT,Adbook,LIMachi)
Citer : Posté le 29/04/2014 15:15 | #
C'est quand même pas très sérieux
Pourquoi pas avec un #ifdef DEBUG ?
Citer : Posté le 29/04/2014 15:19 | #
Parce que je sais ce qu'il y a dans mon minecraft donc je n'ai pas besoins de condition, je ne risque pas de réécrire un DEBUG déjà existant. Et pour ce qui est du sérieux, je fais parfois des bouts de codes qui ne serviront qu'a faire des tests et qui seront remplacés plus tard, ce qui fait que je fais souvent des brouillon, des copiés-collés en pagaille.
-en C:
-Un pong.
-Un projet en pause. Je compte le reprendre de temps en temps: Summer Cursed
-mon tuto sur les Str
Mes calto: G25+, G75
Mon minecraft en dévelopement
-Portal2D de JavierXD
-CalCraft de Wime
-GeekBros du groupe GeekBrothers (Eiyeron,Siapran,KevKevVTT,Adbook,LIMachi)
Citer : Posté le 03/05/2014 10:28 | #
Petit problème, j'ai fais une fonction qui est censé afficher du texte
int x, y;
div_t pos_i;
int i;
clearBox(box_pos,box_size); //fonction qui efface tous les caractères
for (i = 0; i<20*box_size && i<endD; i++)
{
pos_i=div(i,20);
x=pos_i.rem;
y=pos_i.quot+box_pos;
PrintXY(x*6+2, y*10+2, (unsigned char *)ch[startD+i] ,0);
}
ML_display_vram();
}
En me servant des breakpoints et en faisant des tests, j'ai isolé l'erreur: c'est quand j'essaye d'afficher ch[start+i] que ça plante, même si j'essaye avec ch[0] alors qui si je veux afficher la chaîne entière ou modifier une valeur ça marche parfaitement.
Des idées?