**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.
Citer : Posté le 31/08/2014 20:43 | #
Regarde dans ML, il me semble que c'est écrit dans le header et/ou le .c
Citer : Posté le 10/09/2014 21:23 | # | Fichier joint
Salut, j'ai un problème avec une fonction d'affichage. C'est une fonction qui dessine un carré de 8*8 (ou 16*16 selon le paramètre zoom) aléatoire : chaque pixel a une chance sur deux d'être allumé.
En voici le code :
{
char j,nombre,bit,taille=8+24*zoom;
short i;
char *bitmap=calloc(sizeof(char),taille);
for(i=0;i<taille;i++)for(j=0;j<8;j++)if(alea(0,1))bitmap[i ]|=pow_int(2,j);
//pow fait buguer le programme, donc j'utilise cette fonction de puissance qui ne travaille qu'avec des entiers
if(zoom)ML_bmp_16_or((const unsigned short *)bitmap,16*x,16*y);
else ML_bmp_8_or(CUC bitmap,8*x,8*y); //CUC : (const unsigned char*)
free(bitmap);
}
Mais il y a un problème, regardez un peu l'image suivante :
Seules certaines colonnes de pixels sont concernées, les autres sont invariablement éteintes.
En d'autres termes, pour chaque octet la fonction ne prête attention qu'aux bits numéros 4,6 et 7 en partant de la gauche.
Et ça je ne comprends pas pourquoi... je sais juste que ce n'est pas lié à l'aléatoire
Citer : Posté le 10/09/2014 23:16 | #
Mais pourquoi tu t'emmerdes a faire un code aussi compliqué? omg
unsigned char bmp[32]={0};
for(int i = 0;i<32;i++)bmp[i] = rand() & 0xFF;
Et voila ton image 16*16 générée aléatoirement
et si tu utilises une fonction d’aléatoire perso, tu peux utiliser alea(0,0xFF)
un autre petit conseil :
au lieu de
else ML_bmp_8_or(CUC bitmap,8*x,8*y);
met plutot
Tu gagnes une ligne, et la perte de vitesse est vraiment dérisoire
Ou alors, si tu n'aimes pas la répétition,
ML_bmp_or(CUC bitmap,tailleSprite*x,tailleSprite*y,tailleSprite,tailleSprite);
Ajouté le 10/09/2014 à 23:29 :
Et en fait le problème venait de calloc
Tu as inversé les arguments
void* calloc (size_t num, size_t size);
Parameters
num
Number of elements to allocate.
size
Size of each element.
Ajouté le 10/09/2014 à 23:31 :
Quoique en fait je ne sais pas si l'erreur pourrait provenir de la... Mais dans le doute, il vaut mieux quand même essayer
envie de plonger dans la mer pour ramasser des tresors? => ballon sea
envie de sauver l'univers dans un jeu avec une longue durée de vie? => saviors of the future
un add-in addictif avec plein de secret et de trophées => evasion survival
un shmup bien dur et sadique => saviors 2
merci a tout le monde pour son soutien
zelda prizm de smashmaster (en esperant qu'il puisse le finir)
les tests de marmotti
un RPG de dark storm
(dont je connais le nom, mais pas vous )Arcuz !Citer : Posté le 11/09/2014 06:22 | #
Si tu veux ne concerner que les bits 4,6 et 7 tu n'as qu'à passer un masque :
Citer : Posté le 11/09/2014 12:32 | #
Si tu veux ne concerner que les bits 4,6 et 7 tu n'as qu'à passer un masque :
Je pense que ça c'est justement l'erreur qu'il voulait corriger
Citer : Posté le 11/09/2014 20:09 | #
Merci pour tes conseils Dodormeur, en effet, étant trop focalisé sur mon 50% de probabilité, je suis passé à côté d'une solution aussi simple
Ça j'aurais pas cru... du coup j'avais laissé ML_bmp_or de côté :/
Citer : Posté le 13/09/2014 17:18 | # | Fichier joint
Bonjour,
j'ai une erreur de compilation mais je ne vois pas du tout ce qui ne va pas
voir piece jointe.
merci d'avance.
Citer : Posté le 13/09/2014 17:22 | #
Hmm... c'est peut-être le linker.
Enfin, impossible d'être sûr.
Est-ce que ce serait possible qu'on voie le code ?
Citer : Posté le 13/09/2014 17:24 | #
Est-ce que tu as bien installé le sdk dans "C:\sdk\" ?
Si non, c'est normal que ça ne marche pas, j'avais le même problème avant que Legolas ne me donne la solution .
Notes ( logiciel qui calcule votre moyenne, basic )
Professeur Layton ( jeu d'énigme en C )
Mario & Sonic Rush ( jeu de course 3D en C )
Jetpack Joyride de Drakalex007
Arcuz de Dark Storm
Casion de Az et Darkysun
Un jeu de course en 3D pour calculatrice :
http://www.planet-casio.com/Fr/programmes/voir_un_programme_casio.php?showid=2773&page=1.
Citer : Posté le 13/09/2014 17:29 | #
Son dossier d'installation est correct. Le screen indique "C:\Program Files\SDK".
Citer : Posté le 13/09/2014 17:32 | # | Fichier joint
merci à tous les deux, après creation de ce dossier C:/sdk l'erreur a changé, je vous met un ficcier joint pour le nouveau screen
Phenix, tu veut TOUT le code ou seulement une partie précise ?
Citer : Posté le 13/09/2014 17:34 | #
Au temps pour moi -- je ne savais pas que le dossier d'installation pouvait avoir une influence dans une telle mesure.
Au vu de la nouvelle erreur, je n'ai pas besoin du code -- le problème ne vient pas de là.
Pour l'instant on a un chemin incorrect.
Citer : Posté le 13/09/2014 17:56 | #
Est-ce que tu as bien supprimer la première installation ?
Si il y a des dossiers autres que les .c, .h et .g1w (dans le dossier de ton projet), essaie de supprimer tous les autres fichiers (ex : dossier debug, sdcard ...).
J'espère que ça résoudra ton problème .
Notes ( logiciel qui calcule votre moyenne, basic )
Professeur Layton ( jeu d'énigme en C )
Mario & Sonic Rush ( jeu de course 3D en C )
Jetpack Joyride de Drakalex007
Arcuz de Dark Storm
Casion de Az et Darkysun
Un jeu de course en 3D pour calculatrice :
http://www.planet-casio.com/Fr/programmes/voir_un_programme_casio.php?showid=2773&page=1.
Citer : Posté le 13/09/2014 17:57 | #
Hey, c'est juste le dossier Debug qu'il faut supprimer !
Le reste est susceptible de contenir des données importantes du projet.
Citer : Posté le 20/12/2014 19:20 | #
Bonsoir, est-il possible de voir quelle quantité de mémoire on utilise ?
Citer : Posté le 20/12/2014 19:28 | #
Ben tu comptes
... Plus sérieusement, je ne pense pas...
Coïncidence ? Je ne pense pas.
Citer : Posté le 20/12/2014 20:28 | #
Si. Pour la pile, tu compares les valeurs de r15 avant et pendant l'exécution.
Pour l'allocation dynamique, tu peux avoir que la mémoire allouée dans ton propre code. Pour cela :
void *my_malloc(size_t s)
{
static unsigned counter = 0;
void *ptr = malloc(s);
if(ptr) counter += s;
return ptr;
}
Citer : Posté le 20/12/2014 20:50 | #
euh... il y a pas un léger problème avec ton code?
Avec le define que t'as mis, ton code devient
void *maFonction(size_t s)
{
static unsigned counter = 0;
void *ptr = maFonction(s);
if(ptr) counter += s;
return ptr;
}
Du coup, ben ça fait une récursion infinie
envie de plonger dans la mer pour ramasser des tresors? => ballon sea
envie de sauver l'univers dans un jeu avec une longue durée de vie? => saviors of the future
un add-in addictif avec plein de secret et de trophées => evasion survival
un shmup bien dur et sadique => saviors 2
merci a tout le monde pour son soutien
zelda prizm de smashmaster (en esperant qu'il puisse le finir)
les tests de marmotti
un RPG de dark storm
(dont je connais le nom, mais pas vous )Arcuz !Citer : Posté le 20/12/2014 20:51 | #
OK merci
Citer : Posté le 20/12/2014 20:52 | #
Mais non, le define il faut le mettre que dans les fichiers concernés, pas dans celui qui contient my_malloc() >_<
Citer : Posté le 20/12/2014 20:56 | #
Mouais, vaut mieux pas le mettre, C'est un peu crade et inutile de "réécrire" sur des fonctions standard
envie de plonger dans la mer pour ramasser des tresors? => ballon sea
envie de sauver l'univers dans un jeu avec une longue durée de vie? => saviors of the future
un add-in addictif avec plein de secret et de trophées => evasion survival
un shmup bien dur et sadique => saviors 2
merci a tout le monde pour son soutien
zelda prizm de smashmaster (en esperant qu'il puisse le finir)
les tests de marmotti
un RPG de dark storm
(dont je connais le nom, mais pas vous )Arcuz !