Programmer en C pour la Prizm, bis
Posté le 14/02/2012 13:01
Salut à tous! Dans la suite du précédent topic, voici la démarche pour installer le PrizmSDK et l'utiliser.
Honnêtement, je préfère le PrizmSDK (je l'appelle généralement PSDK), il est basé sur GCC, est portable et ne dépend pas du compilateur de Casio/Renesas. Je m'en sers pour tous mes projets sur Prizm. Voyons un peu comment on le configure.
1. Téléchargez le zip du PrizmSDK sur le site de Cemetech [
ici].
2. Dézippez le PSDK dans un dossier vide de préférence pour éviter d'écraser tout fichier personnel/important.
3. Voilà ! Il est prêt à être utilisé.
Une fois le PSDK installé, on peut commencer à programmer. Voyons comment on crée un nouveau projet.
1. Dans le dossier project, copier le dossier default, et renommer ladite copie en le nom du projet (par exemple j'ai nommé mon dossier Bust-A-Move)
2. Dans le makefile, remplacer toutes les occurences du mot "defauflt" par le nom du dossier/projet.
3. Le projet est prêt à être codé, compilé et transféré.
Le Makefile est nécéssaire pour le PSDK pour lui indiquer quoi compiler et comment compiler. Observons-le de plus près
TARGET := $(notdir $(CURDIR))
BUILD := build
SOURCES := src
DATA := data
INCLUDES :=
On définit ici le dossier de destination du projet (le TARGET), le dossier où l'on stocke les binaires temporaires par code source (le BUILD), le/les dossiers contenant les sources (le SRC) et le data (je sais pas ce que c'est, j'ai pas fait attention pour le moment)
MKG3AFLAGS := -n basic:Bust-a-Move -i uns:../unselected.bmp -i sel:../selected.bmp
Ici, on indique au programme qui va compiler le .bin en .g3a de nommer l'addin "Bust-a-Move", d'utiliser les icônes unselected.bmp et selected.bmp pour afficher l'addin dans le menu principal (unselected quand l'addin n'est pas survolé et selected quand il l'est.)
On peut nommer l'addin en fonction de la langue désirée, ainsi
-n basic:Bust-a-Move -n fr:Puzzle-Bobble
Va nommer l'addin Puzzle-Bobble quand la calto est en français et Bust-a-Move autrement. On la la possiblité de choisir un nom pour chaque langue ci-dessous
en - Anglais
es - Espagnol
de - Allemand
fr - Cocorico
pt - Portugais
zh - Chinois (bonne chance pour nommer l'addin en idéogrammes, j'ai pas testé).
Une dernière ligne? Le reste n'est pas modifiable sauf si vous voulez casser le Makefile.
CFLAGS = -Os -std=c99 -Wall $(MACHDEP) $(INCLUDE)
Ici, on indique quelques options pour le compilateur lui-même :
-Os = optimiser la taille du programme au détriment des éventuelles optimisations de performance
-std=c99 = utiliser le langage C en version 1999, on peut ainsi utiliser les rajouts faits pour le C99 (comme déclarer une variable plus ou moins partout).
-Wall = je l'appelle le mur mais ça veut dire Warning ALL. Affiche [b]tous[/b] les warnings. Je considère cette option comme [b]OBLIGATOIRE[/b] car elle montre toute portion de code pouvant être relativement trouble pour le compilateur.
Compiler et nettoyer.
Pour compiler, lancez le make.bat. Il va lancer la procédure de compilation en utilisant le Makefile. Ca permet par exemple de ne recompiler que les fichiers sources qui ont été modifiés. Si, pour des raisons diverses (utilisation de clé usb, changement de dossier...) ça ne compile plus, essayez d'abord de lancer clean.bat, puis make.bat
Transférer automatiquement le g3a à la Prizm.
Prérequis : On va renommer le stockage de la Prizm en "PRIZM". Pour ce faire, branchez la Prizm et entrez en mode USB. Son stockage devrait s'afficher dans l'Ordinateur/Poste de travail. Clic-droit dessus puis renommez en "PRIZM". Ca permettra ensuite à mon outil de reconnaître la calto.
J'ai conçu un petit batch windows qui permet de trouver la calto par le nom de son stockage, créez dans votre dossier de projet un fichier "copy.bat" et collez-y ce code-ci
@echo off
SET /A ligneCourante=0
for %%i in (A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z) do (
if exist "%%i:" (
FOR /F "usebackq tokens=7* delims= " %%A in (`VOL %%i:`) DO (
IF %ligneCourante%==0 (
if "%%B" == "PRIZM" (echo Prizm trouvée!
echo Elle etait en %%i:
xcopy *.g3a %%i:\ /Y /Q
pause
echo "-Fin-"
exit
)
SET /A ligneCourante+=1
)
)
)
echo Prizm au Nom de PRIZM introuvable. Verifiez le branchement et le nom du sotckage de la Prizm.
pause
Quand vous voudrez transférer, vous n'aurez qu'à brancher la calto et une fois qu'elle est reconnue, double-clic sur le batch pour lancer la copie!
Et voilà, vous savez le nécessaire pour créer un projet et transférer un addin automatiquement. Amusez-vous bien!
Citer : Posté le 23/08/2014 15:06 | #
est ce que l'on peut programmer en C++ avec la configuration standard car dans le Makefile.old
il y a
Mais il n'y a pas
Citer : Posté le 23/08/2014 15:08 | #
mais le make va utiliser le gcc au lieu du g++, non
Citer : Posté le 23/08/2014 15:09 | #
@Smashmaster : Seulement si le compilateur sélectionné est g++
Citer : Posté le 23/08/2014 15:15 | #
Voilà ce qui se passe si je compile avec l'extension .cpp
sh3eb-elf-g++ testcpp.o -mb -m4a-nofpu -mhitachi -nostdlib -TC:/Users/Pascal/PrizmSDK/PrizmSDK-0.3/common/prizm.ld -Wl,-static -Wl,-gc-sections -std=c99 -LC:/Users/Pascal/PrizmSDK/PrizmSDK-0.3/lib -lfxcg -lgcc -o C:/Users/Pascal/PrizmSDK/PrizmSDK-0.3/projects/testcpp/testcpp.bin
mkg3a -n basic:testcpp -i uns:../unselected.bmp -i sel:../selected.bmp C:/Users/Pascal/PrizmSDK/PrizmSDK-0.3/projects/testcpp/testcpp.bin C:/Users/Pascal/PrizmSDK/PrizmSDK-0.3/projects/testcpp/testcpp.g3a
à la première ligne on voit que c'est g++ qui compile le code.
Et voilà ce qui se passe si je change l'extension en .c
C:/Users/Pascal/PrizmSDK/PrizmSDK-0.3/projects/testcpp/src/testcpp.c:1:1: error: unknown type name 'class'
C:/Users/Pascal/PrizmSDK/PrizmSDK-0.3/projects/testcpp/src/testcpp.c:2:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
C:/Users/Pascal/PrizmSDK/PrizmSDK-0.3/projects/testcpp/src/testcpp.c: In function 'main':
C:/Users/Pascal/PrizmSDK/PrizmSDK-0.3/projects/testcpp/src/testcpp.c:10:2: error: unknown type name 'test'
make[1]: *** [testcpp.o] Error 1
make: *** [build] Error 2
à la première ligne on voit que c'est gcc qui compile le code (il y a des erreurs de compilation car dans mon fichier .c j'ai une class).
En gros, si j'utilise l'extension .cpp, alors c'est g++ qui compile, sinon c'est gcc
Citer : Posté le 23/08/2014 15:25 | #
Ok, donc c'est le PrizmSDK qui se débrouille avec. Pas de souci alors
Citer : Posté le 14/01/2015 17:12 | #
Je n'ai pas de .g3a omg qui apparait pourtant il n'y a pas d'erreur c'est le code d'origine
Citer : Posté le 14/01/2015 23:59 | #
A la fin du fichier .txt contenant le log de la compilation, vois-tu une ligne de ce genre ?
Citer : Posté le 15/01/2015 20:47 | #
c'est bon ça marche mtn ça m'a créer un exemple.g3a
Citer : Posté le 28/03/2015 22:20 | #
J'ai bien tout suivi, mais ça buggue à l'inclusion de la lib "fxlib.h" et même "MonochromeLib.h". Du coup j'ai importé tout le contenu du dossier "OS" du sdk officiel, pour avoir les dépendances de "fxlib.h" mais cette fois-ci le bug est : "previous declaration of + chaque fonction et conflicting types for + chaque fonction".
Pong400
PierrePaCiseaux (CP400)
Les Triangles
Menu
ASCII
Nombres premiers
Citer : Posté le 28/03/2015 22:21 | #
T'as compilé les sources deux fois.
Citer : Posté le 28/03/2015 22:23 | #
Au moins une dizaine, mais je ne comprend pas ton commentaire ?
Pong400
PierrePaCiseaux (CP400)
Les Triangles
Menu
ASCII
Nombres premiers
Citer : Posté le 28/03/2015 22:26 | #
Mais non, je veux dire qu'au lieu que chaque fonction soit compilée une fois pour générer ton exécutable, toutes les fonctions que tu as dans tes erreurs ont été compilées deux fois, sans doute parce que tu as inclus les fichiers sources deux fois depuis deux adresses différentes, et du coup il t'insulte parce que tu les définis plus d'une fois.
Citer : Posté le 28/03/2015 22:27 | #
J'ai uniquement ce code :
#include <keyboard_syscalls.h>
//#include <MonochromeLib.h>
#include "fxlib.h"
void main(void) {
int key;
PrintMini(50,50,const unsigned char "C'est un add-in ! :D",1);
while (1) {
Bdisp_AllClr_VRAM();
GetKey(&key);
switch (key) {
}
}
return;
}
Pong400
PierrePaCiseaux (CP400)
Les Triangles
Menu
ASCII
Nombres premiers
Citer : Posté le 28/03/2015 22:31 | #
Non mais par contre, au delà de ces problèmes de compilation ça va pas le faire ! Tu ne peux pas utiliser fxlib ou encore MonochromeLib pour programmer sur Prizm /!\
Il faut que tu utilises la librairie fournie avec le Psdk (balade toi dans le dossier include), et des librairies extérieures faites pour la Prizm (eg ColorLib, qui est soit dit en passant, à décoder ). Le mieux c'est que tu regardes le code de quelques jeux comme GravityDuck ou... Enfin, tu en trouveras bien ^^. Si t'as des questions n'hésite pas, je n'ai pas trop développé car je suis un portable donc c'est pas ultra pratique :whistle:...
Citer : Posté le 28/03/2015 22:31 | #
Ah ouais, et ML et fxlib t'en fais quoi dans l'affaire ? C'est elles qui sont linkées deux fois, pas ton programme à toi !
Citer : Posté le 28/03/2015 22:32 | #
Ok merci j'enlève ces imports et je regarde les autres.
Pong400
PierrePaCiseaux (CP400)
Les Triangles
Menu
ASCII
Nombres premiers
Citer : Posté le 29/03/2015 08:32 | #
utiliser MLib pour la prizm c'est vraiment, vraiment, vraiment, vraiment nimportenawak
Citer : Posté le 11/04/2015 12:27 | #
J'ai un gros problème, je n'ai pas de make.bat, mais seulement un make.exe dans le dossier /bin.
De plus, à chaque fois que je le lance la fenêtre se referme juste après.
Est-ce que quelqu'un pourrait m'aider ?
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 11/04/2015 12:30 | #
J'aimerais bien, mais je galère autant que toi (bien que j'ai le make.bat, d'ailleurs c'est bizarre, tu parles bien du dossier PrizmSDK-<numérodeversion>/projects/TonProjet) ? Je teste pour l'instant sous Linux.
Pong400
PierrePaCiseaux (CP400)
Les Triangles
Menu
ASCII
Nombres premiers
Citer : Posté le 11/04/2015 12:32 | #
Ah merci Lego, je n'avais pas vu.
Je teste après manger.
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 24/04/2015 13:31 | #
J'ai ceci :
Quand je rajoute des sprites dans mon Tiles.h. Actuellement, j'en ai 20 différents de 24*24 en 16 bit soit 23 040 octets. Avez-vous déjà eu ce bug ? Car je ne peux pas faire de tile mapping si le compilateur n'accepte même pas 20 toutes petites images...
Pong400
PierrePaCiseaux (CP400)
Les Triangles
Menu
ASCII
Nombres premiers