Programmer en C sur Graph 35/75 +E
Posté le 13/11/2017 18:27
Pour faire des jeux demandant plus de ressources (tels que Jetpack Joyride, Fruit Ninja...) il est possible d'utiliser le langage C sur Graph 75.
Les programmes écrits en langage C ont le format .g1a (incompatible avec le .g1m, qui est un format basique), et sont appelés "addins".
Il est possible de mettre ces fichiers g1a dans une Graph 35 si on l'a
tweakée.
Dans ce tutoriel, j'assumerai que vous connaissez déjà le C, et donc que vous êtes familiers avec le concept de structure, pointeurs, variables, etc.
Si ce n'est pas le cas, je vous invite à aller voir le tutoriel d'Openclassrooms :
https://openclassrooms.com/courses/apprenez-a-programmer-en-c
Allez jusqu'à la fin du chapitre 2, la SDL ne vous servira pas ici.
Partie 1 : Installation des outils
Si vous êtes sous Linux, allez voir du côté de
Gint. Sinon, vous êtes sous windows, et vous devrez donc installer le SDK de Casio.
si vous avez un mac, je vous plains
Sous windows, vous utiliserez le
SDK Casio.
Lors de l'installation, ne le mettez pas dans un dossier avec des parenthèses tel que "Program Files (x86)" !
Certaines parties de ce tutoriel concernant les restrictions du C ne s'appliquent pas à Linux.
Partie 2 : Découverte du SDK
Une fois le SDK installé, ouvrez le. Vous aurez ça :
Nous allons commencer par créer un nouveau projet. Pour ce faire, faites : Project → New puis remplissez les champs.
Il vous dira "No program file could be found in the project! You might build the project first."
Ce message d'erreur indique qu'il n'y a pas de fichier .g1a (normal, on vient de le créer, et on n'a pas encore compilé).
Pour le compiler, appuyez sur "Project" puis faites "Rebuild All". Dans la fenêtre "Build", vous devriez avoir ça :
Si à la fin vous avez une erreur ressemblant à
Invalid parameter specified in option "input" : ""C:\Program Files (x86)\CASIO\fx-9860G SDK\OS\FX\lib\setup.obj"" c'est que vous l'avez installé dans un dossier avec des parenthèses ! Refaites tout le tutoriel en lisant bien cette fois.
Ensuite, faites "Run" (ou F5) afin de faire tourner le programme dans l'émulateur intégré. Agrandissez un peu la fenêtre "Display" pour que l'écran s'agrandisse. Ensuite, allez dans le menu puis trouvez votre addin qui est tout en bas (ou tapez "A" pour y accéder directement, si vous êtes flemmard).
(ne faites pas attention à la skin rouge, j'ai tuné mon SDK)
Bref, maintenant on va modifier un peu le code. Allez dans le dossier où est votre projet. Vous devriez avoir ces fichiers :
MainIcon.bmp est un bitmap monochrome qui sera affiché dans le menu, éditez le pour créer l'icône de votre programme (paint suffit).
Ouvrez tutoriel.c avec votre éditeur de texte préféré (je conseille notepad++). Il est possible d'éditer le fichier directement depuis le SDK, mais il n'y a aucune coloration syntaxique et la police n'est même pas monospacée.
Ici, la fonction
main() sera cette fonction :
int AddIn_main(int isAppli, unsigned short OptionNum)
{
unsigned int key;
Bdisp_AllClr_DDVRAM();
locate(1,4);
Print((unsigned char*)"This application is");
locate(1,5);
Print((unsigned char*)" sample Add-In.");
while(1){
GetKey(&key);
}
return 1;
}
C'est par cette fonction que votre programme commencera.
Les paramètres
isAppli et
optionNum ne vous serviront pas. En fait, un addin peut être lancé soit du menu principal, soit avec un E-act (qui a d'ailleurs disparu avec la mort de la 75+E, et qui de toute façon ne servaient à rien sauf à y mettre ses cours). Etant donné que votre addin sera toujours lancé depuis le menu principal, vous pouvez ignorer ces variables.
La première chose à noter est : il n'y a pas de
printf(). Normal, la calculatrice n'a pas de notion de flux d'entrée et de sortie comme sur PC. Il faudra faire des "locate" comme en Basic. Ici, le locate est divisé en 2 parties : une fonction
locate(int x, int y) qui place le curseur à la position x,y et
Print(char* str) qui affiche le string à l'écran à la position du curseur.
Il n'y a pas non plus de
scanf(), mais il ne vous manquera pas : j'imagine que vous voulez faire des jeux, or la plupart des jeux ne demandent pas de taper du texte.
Si vous avez besoin que l'utilisateur tape du texte, codez la fonction vous-même ou utilisez la librairie
EasyInput.
Si vous avez besoin d'afficher un chiffre à l'écran, deux choix s'offrent à vous :
- Soit vous utilisez la fonction
sprintf() qui s'utilise comme
printf() mais avec un buffer, comme ceci :
int a = 30, u = 40;
//printf("Le nombre est %d", a);
char* str = malloc(u);
sprintf(str, "Le nombre est %d", a);
locate(1,1);
Print(str);
- Soit vous utilisez une fonction
itoa qui n'est pas dans la librairie C standard, mais la voici ci-dessous :
/* itoa: convert n to characters in s */
void itoa(int n, char s[])
{
int i, j, sign;
char c;
if ((sign = n) < 0) /* record sign */
n = -n; /* make n positive */
i = 0;
do { /* generate digits in reverse order */
s[i++] = n % 10 + '0'; /* get next digit */
} while ((n /= 10) > 0); /* delete it */
if (sign < 0)
s[i++] = '-';
s[i] = '\0';
for (i = 0, j = strlen(s)-1; i<j; i++, j--) {
c = s[i];
s[i] = s[j];
s[j] = c;
}
}
Je vous conseille la deuxième solution, sachant qu'utiliser
sprintf() ajoute 30 ko à votre addin, ce qui est relativement beaucoup.
Attention à bien
#include <stdio.h> si vous voulez utiliser
sprintf(), car le compilateur du SDK ne vous fera absolument aucune erreur, il compilera et vous aurez une erreur quand vous lancerez l'addin.
Une autre différence importante est que ce qui est supporté est le C89. La différence majeure avec le C99 (que vous avez probablement utilisé dans le tutoriel) est la nécessité de déclarer des variables au tout début de la scope. Par exemple :
void fonction() {
int a; //fonctionne : c'est déclaré tout au début de la scope
int b; //fonctionne aussi
fonction(); //passé ce point, aucune déclaration n'est possible
int c; //fera une erreur "Unexpected token "int""
}
Cela veut aussi dire qu'on ne peut pas faire
for (int i = 0; i < 20; i++), on est obligé de déclarer i avant la boucle for.
La fonction
Bdisp_AllClr_DDVRAM() sert à clear (vider) le DD (Display Driver, c'est à dire l'écran) et la VRAM.
Pour savoir la différence entre le DD et la VRAM, imaginons que je doive tracer un sprite. Si je le traçais directement sur l'écran, on verrait le sprite se dessiner au fur et à mesure, et ça serait très moche.
Au lieu de ça, on trace le sprite sur la VRAM, puis on envoie la VRAM au DD lorsqu'on a fini de tracer.
Cet envoi de la VRAM au DD n'est pas automatique, il faut l'initier avec la fonction
Bdisp_PutDisp_DD(). Certaines fonctions font ça automatiquement.
Enfin, la fonction
GetKey(int *key) sert à attendre un input d'un joueur. Attention, cette fonction est bloquante, c'est à dire qu'elle arrête l'exécution du programme tant que l'utilisateur n'a pas appuyé sur une touche ; nous verrons par la suite d'autres fonctions qui ne sont pas bloquantes. À noter que GetKey met à jour le DD (il envoie la VRAM au DD).
Partie 3 : Utilisation de MonochromeLib
MonochromeLib est une librairie incontournable des programmeurs casio : elle améliore grandement la vitesse des fonctions de dessin (et donc les fps).
Téléchargez la en allant ici :
https://www.planet-casio.com/Fr/logiciels/voir_un_logiciel_casio.php?showid=86
Vous aurez des fichiers MonochromeLib.c et MonochromeLib.h, déplacez les dans le dossier où est votre projet.
Ensuite, il faut les ajouter à votre projet. Dans le SDK, tout à gauche, faites un clic droit sur "Source Files", puis "Add", puis naviguez jusqu'à votre projet et sélectionnez les 2 fichiers (ctrl+clic).
Ouvrez le fichier MonochromeLib.h. Vous remarquerez des #define commentés : c'est pour éviter de prendre trop de place (sinon, des fonctions pas utilisées sont exportées dans l'addin, et ça l'alourdit inutilement).
Je vous conseille de décommenter celles là :
Enfin, dans tutoriel.c, ajoutez
#include "MonochromeLib.h" puis remplacez le
Bdisp_AllClr_DDVRAM() par
ML_clear_vram().
Allez dans le SDK, faites "Project - > Rebuild All" (si c'est grisé, appuyez sur "Run" → "Stop"). L'addin devrait compiler normalement, et si vous lancez l'addin il devrait montrer la même chose que précédemment... mais un peu plus vite
À l'avenir, n'utilisez pas les fonctions de dessin natives à Casio, utilisez toujours celles de MonochromeLib (ML).
Partie 4 : Gestion des touches et de l'affichage
Pour gérer les appuis sur les touches, il existe 2 fonctions :
-
GetKey() qui est bloquante et affiche automatiquement la VRAM à l'écran
-
IsKeyDown() qui n'est pas bloquante et n'affiche pas la VRAM à l'écran.
Laquelle utiliser ? Tout dépend de si votre jeu est en temps réel ou non. S'il n'y a pas de temps réel (par exemple sur un menu), utilisez
GetKey(). Lorsqu'il y a du temps réel, utilisez
IsKeyDown().
Les valeurs des touches sont trouvables dans les fichiers PDF qui sont normalement dans le dossier d'installation du SDK (fichier "Key Code List.pdf").
Attention aux modifieurs (shift + alpha) qui peuvent retourner une valeur différente (ainsi, si l'utilisateur appuie sur shift+bas, ça donnera la valeur
KEY_CTRL_PAGEDOWN au lieu de
KEY_CTRL_DOWN).
Par exemple, voici une boucle de jeu où on peut déplacer un carré (pseudo-code) :
while (1) {
ML_clear_vram();
ML_pixel(x, y);
ML_display_vram();
if (IsKeyDown(KEY_CTRL_UP)) {
y--;
} else if (isKeyDown(KEY_CTRL_DOWN)) {
y++;
} ...
}
Quant aux fonctions d'affichage, il y a :
-
ML_pixel() pour afficher un pixel
-
ML_line() pour afficher une ligne
-
ML_rectangle() pour afficher un rectangle, etc
Pour toutes les fonctions, regardez MonochromeLib.h, le nom est assez explicite.
Pour afficher du texte, il y a :
-
Print(char *str), précédée d'un
Locate(int x, int y) pour afficher d'une manière similaire à la fonction Locate du basic
-
PrintRev qui fonctionne comme Print mais inverse les couleurs (blanc sur noir)
-
PrintXY(int x, int y, char* str, int type) qui affiche str aux coordonnées x,y, en noir si type = 0, en blanc si type = 1
-
PrintMini qui fonctionne comme PrintXY mais affiche avec la petite police (comme la fonction Text du basic)
-
BetterFont, librairie permettant d'afficher une police avec des caractères customisés
À noter que ces fonctions utilisent le codage Casio, partiellement compatible avec l'ASCII.
Pour l'exemple, nous allons afficher "agréable".
Si vous faites
Print("agréable"), vous aurez remarqué que ça affiche ceci :
Ou "agr able" si vous avez sauvegardé votre fichier en ANSI au lieu d'UTF-8.
Il faut donc se conformer au codage casio. Pour le connaître, allez dans le dossier d'installation du SDK, où il y a 5 fichiers pdf. Celui qui nous intéresse est le "Character Set".
À la page 6 du PDF, on voit que le codage de "é" est 0xE60A.
Pour insérer ces octets dans un string, nul besoin d'utiliser un éditeur hexadécimal pour modifier le fichier .c (ce qui pourra d'ailleurs provoquer des erreurs de compilation) : il faut utiliser l'escape hexadécimale \x, qui ne prend normalement que 2 chiffres en argument.
Notre ligne de code sera donc
Print("agr\xE6\x0Aable").
Si on l'exécute, ça fait ça :
Quel est le problème ? Apparemment le compilateur considère que le \x prend jusqu'à 3 chiffres, et donc traduit en 0xE6 et 0x0Aa → 0xAA, et 0xE6AA correspond au point du milieu dans l'encodage casio.
Pour éviter ça, il faut savoir que les strings côte à côte sont concaténés automatiquement. Rajouter 2 guillemets suffit pour que le compilateur sache qu'il faut s'arrêter à 0A :
Print("agr\xE6\x0A""able")
Partie 5 : Les syscalls
Les syscalls (system calls) sont des fonctions inhérentes à l'OS. Casio n'a pas fait de doc là dessus, mais grâce aux travaux de Simon Lothar, la plupart des syscalls sont connus :
https://bible.planet-casio.com/simlo/chm/v20/
Ces syscalls ne vous serviront sûrement pas, mais ils permettent par exemple de créer un dossier customisé dans la mémoire principale/secondaire, changer le contraste, etc.
Pour utiliser un syscall, il existe différentes manières. En voici une.
Créez un fichier syscalls.src, que vous ajouterez dans le projet (de la même manière dont vous avez ajouté MonochromeLib).
Mettez-y le code suivant :
syscall_table:
.data.l H'80010070
.end
Puis, lorsque vous voulez ajouter le syscall 0x123 que vous voulez appeler monSyscall, ajoutez le code suivant (en haut du code) :
.export _monSyscall
_monSyscall:
mov.l syscall_table, r2
mov.l monSyscall_code, r0
jmp @r2
nop
monSyscall_code:
.data.l H'123
Dans votre fichier .c, il vous suffira de faire
monSyscall() (avec les arguments nécessaires bien entendu).
Partie 6 : Autres fonctionnalités du SDK
Je n'ai jamais utilisé ces fonctionnalités (à tort, ça m'aurait bien servi quand je programmais sur casio), mais elles pourraient vous être utiles.
Premièrement, le SDK possède des breakpoints, qui servent à arrêter l'exécution d'un programme afin de pouvoir mieux le débugger. Il est également possible de voir la valeur des variables dans les fenêtres "global variables" et "local variables".
Lors d'une erreur, il y a une fonction "trace" qui vous pointera sur la ligne de votre code qui a causé l'erreur.
Il est également possible de faire "Run" → "Trace Into", qui vous donne :
Très pratique pour débugger, sachant qu'on ne peut pas faire de printf.
L'onglet "View" permet d'accéder à un désassembleur, mais ne connaissant pas l'assembleur SH3 je ne peux pas dire grand chose là dessus (
tutoriel d'initiation).
Il permet également :
- D'avoir une vue de la mémoire flash (très utile si on veut toucher au système avec des syscalls)
- D'avoir une vue de la heap, stack, et call stack
- D'avoir une vue des registres
À noter que vous avez 8 ko de RAM statique (où sont stockées entre autres les variables globales), 32 ko de stack (la ram statique empiète sur ces 32 ko), et 64 ko de heap (dont 256 ko supplémentaires sur les SH4, mais à accéder par pointeur explicite).
Important : le SDK génère par défaut des addins SH3, qu'il faut convertir en SH4 pour les nouvelles calculatrices (> 2012).
Liens utiles :
Erreurs de compilation du SDK
Rendre le SDK compatible SH4 par défaut
Convertisseur SH3 → SH4 (ne fonctionne pas parfaitement dans le cas de syscalls touchant au clavier ou à l'écran)
Citer : Posté le 29/11/2017 18:42 | #
Tutoriel fini, je pense que j'ai tout dit sur le SDK. Si j'ai oublié quelque chose, n'hésitez pas à me le signaler.
Ecrivez vos programmes basic sur PC avec BIDE
Citer : Posté le 29/11/2017 19:02 | #
Peut-être que tu pourrais mettre un lien vers un autre cours que celui de OC qui, il me semble, est devenu un peu pénible avec OC (style nombre de page limitées sans inscription ou ce genre de chose). Celui de ZdS, voire le lien vers le pdf de l'ancien cours du SdZ est peut être plus sympa non ?
Après, j'ai surtout l'impression que quelqu'un qui serait allé correctement jusqu'à la fin de la deuxième partie du cours d'OC et bien compris tout ce qu'il manipulait devrait pouvoir être capable de comprendre la plupart de ces choses là tout seul, donc j'ai un peu de mal à juger ce qui est vraiment intéressant ou non.
Sinon, je pense que la partie II pourrait sans doute être coupée en deux avec une partie présentant vraiment le SDK et une autre parlant plutôt des spécificités de la fxlib (qui reste sûrement intéressant, pour éviter les éternelles questions «Comment saisir et afficher du texte ??»).
Je ne suis pas sûr que la partie sur les Syscalls soit vraiment nécessaire ici, enfin, ça risque de perdre plutôt qu'autre chose.
Citer : Posté le 19/12/2017 17:40 | #
Ouais, cool merci pour le tuto... si tu veut mon avis (même si c'est déjà super ton tuto ) tu devrais rejouer deux ou trois trucs comme :
-une initiaton aux pointeurs;
-de même pour les matrices;
-de même pour les fonctions;
-expliquer comment introduire des calculs dans le programme;
-comment interpreter les thermes utilisés dans les prototypes de fonctions (genre void ou unsigned...);
-comment créer un prototype;
-gérer les incrementations et les décrémentations;
-le paramétrage graphique;
-ultra important et à voir en priorité : les boucles (for, while,...);
-la condition (if, then, else).
Bien évidemment tu ne peut pas tout ajouter comme ça bien que se serais super.
Ne me demande pas d'en faire un moi même, si je te cité tout ça, c'est que je sais que ces choses existent mais que je ne sais pas les utiliser dans le SDK.
Je ne doute pas que beaucoup de personnes aimeraient programmer en c et c'est donc une super idée que tu a eu.
PS : n'oublie pas que tu est seul maître de choisir d'ajouter tout ça .. ou pas ne t'oblige pas
-Planétarium 2
Citer : Posté le 19/12/2017 17:46 | #
Pour ce qui est du C, se référer aux tutos plus généraux : https://zestedesavoir.com/tutoriels/755/le-langage-c-1/
Pour ce qui est des graphiques, se référer, soit à Gint, soit à MonochromeLib. (Un coup de recherche et tu tombera sur les bons topics)
Citer : Posté le 19/12/2017 17:51 | #
Oui mais le truc c'est que j'ai dejamais un livre d'environ 200 pages sur le C (oui j'ai envie d'apprendre ), mais c'est sur le logiciel CodeBlocs:: et pas sur le SDK. Et je sais que ce n'est pas la même chose..
-Planétarium 2
Citer : Posté le 19/12/2017 17:58 | #
Tu peux toujours lire "the C programming language", c'est le livre de référence pour l'apprentissage du C. Sinon il y a le tuto d'openclassrooms que j'ai linké en haut du tuto.
Je ne ferai pas de tutoriel sur le c en lui même, je ne suis pas assez doué pour faire ça.
En fait la seule différence entre programmer sur PC et sur calculette est la gestion de l'écran et du clavier (et aussi la différence de mémoire), du coup je m'attarde juste sur ces différences.
Ecrivez vos programmes basic sur PC avec BIDE
Citer : Posté le 19/12/2017 17:58 | #
C'est tout pareil. Si tu sais manipuler des pointeurs sur un PC, tu saura les manipuler sur la calto. La seule chose qui change, c'est l'input/ouput (écran clavier au lieu de scanf et printf, et des lib graphiques)
Ensuite, Code::Blocks c'est rien d'autre qu'un compilateur avec un éditeur de texte et plein d'autres trucs (in)utiles intégrés. Perso je code, que ce soit du C pour mon PC ou ma calto, toujours dans le même éditeur (Atom en l'occurence), et avec différents compilateurs et toolchains.
Enfin, pour le moment, apprends le C sur PC, ça sera plus simple pour toi, et une fois que tu commence à voir comment ça marche, passe sur calto.
Ajouté le 19/12/2017 à 18:00 :
Pour rebondir sur le message de Zezombye, je conseille fortement d'aller voir sur Zeste de Savoir et non OpenClassroom, car ce dernier à une politique un peu trop vénale à mon goût, et te force pour ou moins à t'inscrire même pour juste lire le tuto…
Citer : Posté le 19/12/2017 18:04 | #
Ok merci, je pense aussi que c'est une bonne idée.
A+
PS: je viens juste de remarquer ta signautre. . C'est bien le problème qui se pose à tous mes projets
-Planétarium 2
Citer : Posté le 03/02/2018 17:03 | #
Je ne suis pas contre le tuto de qualité, mais je pointe juste, avant, quelques éléments améliorables :
– Explique où tu vas. Par exemple, « Une fois le SDK installé, ouvrez le. Vous aurez ça [...] Faites : Project -> New puis remplissez les champs » ne vaut pas « L'interface par défaut du SDK est la suivante [...] On va commencer par créer un projet en utilisant l'assistant qui se trouve dans Project » New. Les paramètres par défaut des champs sont généralement suffisants ». Dans la même veine, « Ensuite, faites "Run" (ou F5). Agrandissez un peu la fenêtre "Display" pour que l'écran s'agrandisse. Ensuite, allez dans le menu » ne va pas aider quelqu'un de paumé à comprendre. J'imagine que « Le SDK dispose d'un émulateur intégré que l'on peut lancer avec le bouton Run (ou la touche F5). L'écran dans la fenêtre Display est un peu petit ; je conseille d'agrandir la fenêtre. Quand l'émulation commence, vous arrivez sur le menu » est plus efficace.
– Mets-toi d'accord sur le formatage ; laisse une ligne blanche entre tes paragraphes tout le temps, ou jamais (fais-le tout le temps, c'est mieux). Idem pour les lignes blanches avant et/ou après les quotes, les blocs de code et les images. Le BBCode de PC est un peu bâtard, il met des retours automatiques après [quote], [code] ou [center], donc il faut adapter ton markup. Utilise plus systématiquement les backticks, il y a pas mal d'endroits qui en auraient bien besoin.
J'avais quelques détails techniques, mais tant pis ; je veux surtout pointer ton discours. Franchement, ton contenu est bon, on n'est plus à ça près. Seulement, dans un bon tutoriel, tu dois présenter les outils à ton lecteur sans lui dire brutalement quoi faire. Un lecteur attentif doit comprendre ce qui se produit et pas seulement apprendre une recette qu'il répétera par coeur. (J'exagère, bien sûr, mais la nature du problème est bien celle-ci.)
Je te renvoie à deux tutos de qualité bien mérités pour te donner une idée d'un style plus ouvert.
Créer des bibliothèques de fonctions statiques, par Cakeisalie5
Initiation à l'assembleur SuperH, par Ziqumu
Ajouté le 18/02/2018 à 12:23 :
Au fait il est marrant to itoa() mais tu pourrais quand même écrire à l'envers en utilisant --i au lieu de i--, en précalculant la taille. Actuellement ça ne compile pas chez moi parce que reverse() n'est définie nulle part...
Citer : Posté le 22/04/2018 15:04 | #
Je progresse en C et les pointeurs, la vache que c'est dur quand on à appris a programmer en Basic !
-Planétarium 2
Citer : Posté le 22/04/2018 15:08 | #
Le mieux est d'en faire et de prendre le temps d'écrire/dessiner les situations.
Si tu as des questions spécifiques, on pourra y répondre...
Citer : Posté le 22/04/2018 15:22 | #
Merci c'est cool de ta part .
le C est un super langage mais difficile. Il est rapide et à pleins d'avantages a ce que j'ai vu et appris jusqu'à aujourd'hui.Le seul truc qui est un peu agacent c'est que le language diffère un peu sur casio et ça c'est perturbent !
Ajouté le 22/04/2018 à 15:34 :
PS: Moi j'ai placé 40€ dans un bouquin qui permet d'apprendre le C. 40€ ! Vous me direz mais c'est un super livre, avec tous un tas d'exemples concrets, ce qui permet d'apprendre bcp plus facilement. De plus ce livre est res complet et aborde la quasi totalitée des points du C et on y trouve deux chapitres très detaillés sur les ponteurs. Après je ne me suis rendu qu'une seule fois sur le site du zéro et ce que j'ai vu ne m'as pas déplu, mais je préfère quand meme mon livre moi
Ah et j'y pense, souhaitez moi bonne chance pour mon brevet blanc mardi et mercredi prochain
-Planétarium 2
Citer : Posté le 22/04/2018 16:41 | #
La vérité c'est qu'il ne change pas d'un point-virgule, mais il faut déjà un bon niveau pour comprendre ce qui se passe... ce que tu peux retenir c'est que l'existence des fonctions n'est pas une question du langage.
Si ton livre est bon, alors tu as bien eu raison de l'acheter en tous cas. Le titre ?
Bon courage !
Citer : Posté le 22/04/2018 16:46 | #
Merci pour tes encouragements
Le livre est dans la collection des nuls. C'est "Apprendre à programmer en C pour les nuls" de Dan Gooking.
-Planétarium 2
Citer : Posté le 25/05/2018 20:58 | #
J'ai toujours rêvé de programmer un Add-in.
Merci Zezombye du temps que tu a passé a écrire se Tuto .
Citer : Posté le 13/06/2018 09:06 | #
quand je crée un projet dans le dossier C:\Users\[mon nom sans autres caractères]\Documents\CASIO\fx-9860 SDK,
ca me met l'erreur:
Invalid parameter specified in option "input" : ""C:\Program Files (x86)\CASIO\fx-9860G SDK\OS\FX\lib\setup.obj""
Comme tu le spécifies, j'ai vérifié qu'il n'y ait pas de dossier avec des parenthèses dans l'adresse de mon projet, mais l'erreur s'affiche toujours...
Dijkstra - The Witcher
Citer : Posté le 13/06/2018 09:07 | #
Y'a des parenthèses dans le chemin d'accès à ton projet, c'est sans doute le problème
Le SDK doit être installé dans un endroit aussi où il n'y a pas de parenthèses
Citer : Posté le 13/06/2018 09:09 | #
si tu parles de l'adresse qui se trouve dans le message d'erreur, elle reste la même peu importe là où je mets le projet
EDIT: grace à Florian, j'ai trouvé ! il faut faire attention à installer le SDK dans un dossier dont l'adresse n'a pas de parenthèses, et aussi pour le projet !
Dijkstra - The Witcher
Citer : Posté le 15/06/2018 00:49 | #
Bravo, tu es le 42ème à découvrir ce bug
Lors de l'installation, ne le mettez pas dans un dossier avec des parenthèses tel que "Program Files (x86)" !
Citer : Posté le 30/07/2018 10:08 | #
Pour Mac il existe une solution alternative à la VM : PlayOnMac. Ce logiciel disponible gratuitement ici permet de faire tourner des *.exe sur un Mac
Je crois que cette app existe également sous Linux (PlayOnLinux)
J'ai déjà rencontré quelques problèmes avec cette application avec des jeux mais avec le SDK ça marche très bien