Forum Casio - Vos tutoriels et astuces


Index du Forum » Vos tutoriels et astuces » Programmer en C pour la Prizm, bis
EiyeronHors ligneAncien modérateurPoints: 5513 Défis: 57 Message

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!


Pages : Précédente1, 2, 3, 4, 5, 6, 7Suivante
SmashmasterHors ligneAncien modérateurPoints: 4559 Défis: 253 Message

Citer : Posté le 23/08/2014 15:06 | #


Intelligide a écrit :
est ce que l'on peut programmer en C++ avec la configuration standard car dans le Makefile.old

il y a
CC=$(PREFIX)bin/sh3eb-elf-gcc.exe


Mais il n'y a pas
CXX=$(PREFIX)bin/sh3eb-elf-g++.exe


Oui, il suffit juste d'utiliser l'extension .cpp et ça compile automatiquement en C++ (je n'ai pas modifié les makefiles)
IntelligideHors ligneMembre de CreativeCalcPoints: 46 Défis: 5 Message

Citer : Posté le 23/08/2014 15:08 | #


mais le make va utiliser le gcc au lieu du g++, non
LephenixnoirHors ligneAdministrateurPoints: 14125 Défis: 136 Message

Citer : Posté le 23/08/2014 15:09 | #


@Smashmaster : Seulement si le compilateur sélectionné est g++
SmashmasterHors ligneAncien modérateurPoints: 4559 Défis: 253 Message

Citer : Posté le 23/08/2014 15:15 | #


Voilà ce qui se passe si je compile avec l'extension .cpp
sh3eb-elf-g++ -MMD -MP -MF C:/Users/Pascal/PrizmSDK/PrizmSDK-0.3/projects/testcpp/build/testcpp.d -Os -Wall -mb -m4a-nofpu -mhitachi -nostdlib -IC:/Users/Pascal/PrizmSDK/PrizmSDK-0.3/projects/testcpp/build -IC:/Users/Pascal/PrizmSDK/PrizmSDK-0.3/include -c C:/Users/Pascal/PrizmSDK/PrizmSDK-0.3/projects/testcpp/src/testcpp.cpp -o testcpp.o
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
sh3eb-elf-gcc -MMD -MP -MF C:/Users/Pascal/PrizmSDK/PrizmSDK-0.3/projects/testcpp/build/testcpp.d -Os -Wall -mb -m4a-nofpu -mhitachi -nostdlib -IC:/Users/Pascal/PrizmSDK/PrizmSDK-0.3/projects/testcpp/build -IC:/Users/Pascal/PrizmSDK/PrizmSDK-0.3/include -c C:/Users/Pascal/PrizmSDK/PrizmSDK-0.3/projects/testcpp/src/testcpp.c -o testcpp.o
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
LephenixnoirHors ligneAdministrateurPoints: 14125 Défis: 136 Message

Citer : Posté le 23/08/2014 15:25 | #


Ok, donc c'est le PrizmSDK qui se débrouille avec. Pas de souci alors
-florian66-Hors ligneAncien rédacteurPoints: 2298 Défis: 19 Message

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
In Arch, I trust ! And you ?
SmashmasterHors ligneAncien modérateurPoints: 4559 Défis: 253 Message

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 ?

C:/Users/XXXXXXX/PrizmSDK/PrizmSDK-0.3/projects/testcpp/testcpp.g3a

-florian66-Hors ligneAncien rédacteurPoints: 2298 Défis: 19 Message

Citer : Posté le 15/01/2015 20:47 | #


c'est bon ça marche mtn ça m'a créer un exemple.g3a
In Arch, I trust ! And you ?
LegolasHors ligneAncien rédacteurPoints: 3266 Défis: 104 Message

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".
Mes programmes
Cacher les programmes
Mes défis
Cacher les défis



LephenixnoirHors ligneAdministrateurPoints: 14125 Défis: 136 Message

Citer : Posté le 28/03/2015 22:21 | #


T'as compilé les sources deux fois.
LegolasHors ligneAncien rédacteurPoints: 3266 Défis: 104 Message

Citer : Posté le 28/03/2015 22:23 | #


Au moins une dizaine, mais je ne comprend pas ton commentaire ?
Mes programmes
Cacher les programmes
Mes défis
Cacher les défis



LephenixnoirHors ligneAdministrateurPoints: 14125 Défis: 136 Message

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.
LegolasHors ligneAncien rédacteurPoints: 3266 Défis: 104 Message

Citer : Posté le 28/03/2015 22:27 | #


J'ai uniquement ce code :
#include <display_syscalls.h>
#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;
}

Mes programmes
Cacher les programmes
Mes défis
Cacher les défis



NemhardyHors ligneGrand maître des Traits d'EspritPoints: 1235 Défis: 54 Message

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:...
N'attendez pas qu'il n'y ait plus de miel : スススススススススススススススススススススススススス養蜂家スススススススススススススススススススススススススススススススススススス蜂家
LephenixnoirHors ligneAdministrateurPoints: 14125 Défis: 136 Message

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 !
LegolasHors ligneAncien rédacteurPoints: 3266 Défis: 104 Message

Citer : Posté le 28/03/2015 22:32 | #


Ok merci j'enlève ces imports et je regarde les autres.
Mes programmes
Cacher les programmes
Mes défis
Cacher les défis



IntelligideHors ligneMembre de CreativeCalcPoints: 46 Défis: 5 Message

Citer : Posté le 29/03/2015 08:32 | #


utiliser MLib pour la prizm c'est vraiment, vraiment, vraiment, vraiment nimportenawak
AragornHors ligneMembrePoints: 807 Défis: 5 Message

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 ?
Mes Programmes
Cliquer pour enrouler
The Legend of CASIO - Basic Quest ( Basic )
Notes ( logiciel qui calcule votre moyenne, basic )
Professeur Layton ( jeu d'énigme en C )
Mario & Sonic Rush ( jeu de course 3D en C )
Projets
Cliquer pour enrouler
Zelda Ancestral Relics ( projet en C )
Projets que je soutient
Cliquer pour enrouler
Pokémon jade de Dodormeur
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.
LegolasHors ligneAncien rédacteurPoints: 3266 Défis: 104 Message

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.
Mes programmes
Cacher les programmes
Mes défis
Cacher les défis



AragornHors ligneMembrePoints: 807 Défis: 5 Message

Citer : Posté le 11/04/2015 12:32 | #


Ah merci Lego, je n'avais pas vu.
Je teste après manger.
Mes Programmes
Cliquer pour enrouler
The Legend of CASIO - Basic Quest ( Basic )
Notes ( logiciel qui calcule votre moyenne, basic )
Professeur Layton ( jeu d'énigme en C )
Mario & Sonic Rush ( jeu de course 3D en C )
Projets
Cliquer pour enrouler
Zelda Ancestral Relics ( projet en C )
Projets que je soutient
Cliquer pour enrouler
Pokémon jade de Dodormeur
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.
LegolasHors ligneAncien rédacteurPoints: 3266 Défis: 104 Message

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...
Mes programmes
Cacher les programmes
Mes défis
Cacher les défis



Pages : Précédente1, 2, 3, 4, 5, 6, 7Suivante

Planète Casio v42 © créé par Neuronix et Muelsaco 2004 - 2019 | Il y a 30 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd