Posté le 31/12/2012 23:10
Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 106 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
Citer : Posté le 31/12/2012 23:13 | #
Regarde les sources de Gravity Guy de Nitrosax, il utilise une fonction évitant ce problème. Toutefois, je ne sais pas d'où vient ce bug, si bug il y a.
Citer : Posté le 01/01/2013 00:39 | #
Ce n'est pas un bug, parfois, en fonction de la méthode de fermeture de l'add-in, on demande a la boucle principale de l'add-in de ce finir (un while(x) où x est mis a 0), dans ce cas la, l'add-in enregistre dans la mémoire vive que la variable x est a zero, et donc que si on reclique sur l'icone, la mémoire vive n'étant pas "free" (propre, libre, mise a zero, etc), l'add-in va ignorer la boucle principale et immédiatement arriver a la fonction "return 1" ce qui ferme l'add-in (on remarque parfois un freze a ce moment la). En lançant un autre add-in, la calculatrice efface toutes les info du précédent add-in, du coup on peut le relancer.
Il nous faut trouver un moyen de quitter l'add-in tout en supprimant une partie de la mémoire vive pour éviter ce genre de choses, ou utiliser la fonction GetKey, ou utiliser une fonction spéciale pour "mettre en pause l'add-in".
Je ne connais pas vraiment de technique efficace, mais si les sources de gravity guy ou d'un autre jeu peuvent t'aider, ne t'en prive pas.
-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 01/01/2013 14:12 | #
Regarde les sources de Gravity Guy de Nitrosax
Il les a donnée ?
Il a utilisé un reset de la calculatrice, la fonction se trouve dans la lib Revolution-fx
Escape prison
Bloxorz
Free wheel
QR code
Nombre en or
RayCasting Engine
Mario Party
Zelda
et Planète Casio
Citer : Posté le 01/01/2013 15:19 | #
J'ai bien trouvé la fonction mais elle se trouve dans un ficher qui se nomme revolution_asm.scr écrit en asembleur. Comment indiqué dans le main.c du sdk que l'on souhaite utiliser un fichier en asm.
Le SDK est-t-il capable de lire et comprendre un fichier écrit en asm.
En vous remerciant pour votre aide ...
Citer : Posté le 01/01/2013 15:25 | #
non non, il ne reset pas la calto...
Sinon, ça doit être PLL qui a donné un syscall, mais je ne sais plus où...
En tout cas, je suis sur d'avoir déjà vu le code de la fonction
Citer : Posté le 01/01/2013 16:03 | #
Ça n'a absolument rien à voir avec les données présentes en mémoire Limachi, c'est simplement un problème de l'OS Casio. Si on quitte l'addin par le return du main, on ne peut pas le relancer juste après. Ce n'est pas vraiment un problème, et je trouve dommage de reset la calculatrice à la fin du prog juste à cause de ça.
On peut très bien utiliser GetKey à un moment du programme pour retourner au menu en évitant ce problème.
Par exemple, je veux qu'en appuyant sur EXIT en plein jeu ça fasse un retour menu ? Facile :
int key;
KDB_PutKey(KEY_CTRL_MENU, 0); [green]// Fonction aussi appelée key_inject dans Gravity Duck[/green]
GetKey(&key);
}
Citer : Posté le 02/01/2013 09:44 | #
a bon? j'ai toujours compris que sa venait de la
(et avouez que sa pourrait être sa 8) , moi en tout cas sa me semblait logique que ce soit sa )
-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 20/05/2013 17:11 | #
bon, quand j'essaye de faire cette technique, j'ai l'impression que la fonction key_inject ne marche pas....
static int (*SysCall)( int R4, int R5, int R6, int R7, int FNo ) = (void*)&SysCallCode;
void key_inject1(int keycode)
{
(*SysCall)(keycode, 0, 0, 0, 0x248);
}
unsigned char key_down_real(unsigned char code)
{
unsigned short key[8];
const unsigned short* keyboardregister = (unsigned short*)0xA44B0000;
unsigned char row;
if(isOS2)
{
memcpy(&key, keyboardregister, sizeof(unsigned short) << 3);
row= code%10;
return (0 != (key[row >> 1] & 1 << code / 10 - 1 + ((row & 1) << 3)));
}
else
{
return CheckKeyRow((code % 10) + ((code / 10 - 1) << 4));
}
}
unsigned char key_down(unsigned char code)
{
unsigned int keyT;
if(isOS2)
{
if(key_down_real(K_F1))
{
while(key_down_real(K_F1));
key_inject(KEY_CTRL_MENU); // une autre fonction, normalement compatible SH4
GetKey(&keyT);
}
}
else
{
if(key_down_real(K_F1))
{
while(key_down_real(K_F1));
key_inject1(KEY_CTRL_MENU);//elle ne fait rien :oops:
GetKey(&keyT);
}
}
if(code == K_EXE)return key_down_real(K_EXE) || key_down_real(K_SHIFT);
if(code == K_PMINUS)return key_down_real(K_PMINUS) || key_down_real(K_ALPHA);
return key_down_real(code);
}
je ne comprend pas pourquoi ca ne fonctionne pas... j'ai aussi essayé en remplacant KEY_CTRL_MENU par K_MENU (0X38) mais ca ne marche pas non plus...
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 21/10/2014 12:33 | #
Après avoir parcouru l'intégralité des sources de Gravity Duck pour trouver cette fonction, elle n'y ai pas présente
Du coup, je n'arrive toujours pas a fermer mon add-in proprement, quelqu'un pourrait m'aider ?
PS : Désolé du détérrage
Citer : Posté le 21/10/2014 12:55 | #
Au pire tu le quitte comme tout le monde, ne pas pouvoir le relancer, c'est pas tres grave
Sinon, faudrait faire avec les syscalls et t'es meme pas sur qu'ils soient encore bon sur les SH4
Citer : Posté le 21/10/2014 12:58 | #
Utilise le syscall 0x910 avec en premier paramètre le code de la touche à injecter. Pour le seconde, tu peux laisser 0.
Citer : Posté le 21/10/2014 13:31 | #
Je ne comprends pas pourquoi mon code ne marche pas :
if (Select == 3){
KBD_PutKey(30003,0);
GetKey(&key);
}
J'ai bien evidemment fait #include syscall.h et ajouter syscall.src dans Sources files
Une idée ?
Citer : Posté le 21/10/2014 13:32 | #
T'es sûr que c'est 30003 ? T'as essayé avec KEY_CTRL_MENU ?
Citer : Posté le 21/10/2014 13:35 | #
Oui j'ai essayé aussi. Et le code est bon :
#define KEY_CTRL_MENU 30003
Citer : Posté le 21/10/2014 13:39 | #
Es-tu sûr que le code dans ta condition est exécuté ? Et as-tu bien déclaré le syscall ?
Citer : Posté le 21/10/2014 14:55 | #
Non je ne l'ai pas déclaré, mais je ne comprends pas comment le faire
J'ai essayé en faisant :
static int SysCallCode[] = {0xD201422B,0x60F20000,0x80010070};
static int (*SysCall)(int R4, int R5, int R6, int R7, int FNo ) = (void*)&SysCallCode;
int KBD_PutKey(int key,int mode)
{
return (*SysCall)(key,0,0,0,0x910);
}
Le problème c'est que j'ai prototype missmatch à la compilation.
Normal vous allez me dire, car il y a déjà ça dans "syscall.h".
Mais dans ce cas la, je dois faire quoi ?
Citer : Posté le 21/10/2014 15:00 | #
Normal vous allez me dire, car il y a déjà ça dans "syscall.h".
bah non justement pas normal ca veut dire que tu n'as pas le prototype de la fonction int KBD_bidule...
-Mon Fall Down
-Mon jeu de mains
-Mon starwars
-Mon dessinatout
-Mon niaiseux version 2.0
-Mon niaiseux version 3.0
-Inferno
-Mon super labyrinthe (en cours)
-Mon call of duty en 3D
-Casion (avec Az)
Citer : Posté le 21/10/2014 18:04 | #
Normalement c'est bon. Rajoute quand même en en-tête de ton programme le prototype :
Citer : Posté le 25/10/2014 00:32 | # | Fichier joint
Bonjour à tous !
J'ai enfin remis la main sur les sources de Gravity Guy et j'en profite pour partager cette fameuse fonction qui permet de réexécuter immédiatement un add-in après l'avoir quitté.
Je ne l'ai pas retestée on-calc, mais vu qu'il ne s'agit que de la récupération du code de mon jeu, je pense que cela fonctionne sans problèmes. Est-ce que quelqu'un pourrait aussi la tester sur SH4 ?
Enjoy !
Citer : Posté le 25/10/2014 01:15 | #
Wow merci, ça va m'être très utile !
Je test demain !
Ajouté le 25/10/2014 à 11:41 :
Après test, je ne contrôle pas bien la force, même sur ému
Ca me semble aléatoire, des fois ça marche, des fois ça ne marche pas, sans même que je ne touche au code ...
int AddIn_main(int isAppli, unsigned short OptionNum)
{
unsigned int key;
int Select = 0;
int choix = 0;
int theta = 0;
Sauvegarde(0);
Txt_Init();
Intro();
while(1){
Select = xxxx();
if (Select == 0) xxxxxx();
if (Select == 1){
choix = xxxxxx();
if (choix == 0) xxxxxx();
if (choix == 32) xxxxxxxx();
}
if (Select == 2) xxxxxx();
if (Select == 3){
APP_EnableRestart();
break;
}
}
}
Quand tout se passe bien, je peux effectivement réexecuter mon add-in juste après.
Mais parfois quand je tente de relancer l'add-in, j'ai :