Rendre un add-in compatible SH4
Posté le 03/01/2013 13:37
Bonjour à tous, Casiofans. Après quelques mois de stress face aux incompatibilités entre les add-ins destinés aux anciennes calculatrices et les nouveaux modèles SH4, nous avons la joie de vous annoncer une excellente nouvelle... des anglophones ont trouvé le moyen de rendre compatibles les programmes C/C++ grâce à un morceau de code à ajouter.
La fonction qui permet l'accès au clavier de la calculatrice était en effet incompatible parce que le changement de processeur entraînait un changement d'adresses en mémoire. Le morceau de code suivant y remède :
http://pastebin.com/ApF7Z2bW
Quant à MonochromeLib, la librairie de Pierrotll, il faut remplacer :
ça
ça
static int SysCallCode[] = {0xD201422B,0x60F20000,0x80010070};
static int (*SysCall)( int R4, int R5, int R6, int R7, int FNo ) = (void*)&SysCallCode;
char* ML_vram_adress()
{
return (char*)((*SysCall)(0, 0, 0, 0, 309));
}
par ça
par ça
typedef char*(*sc_cpv)(void);
const unsigned int sc0135[] = { 0xD201D002, 0x422B0009, 0x80010070, 0x0135 };
#define ML_vram_adress (*(sc_cpv)sc0135)
En espérant que les développeurs adaptent vite leurs jeux.
Source :
Universal Casio Forum
Citer : Posté le 05/02/2013 18:56 | #
Ah, ok, je savais pas
Ajouté le 05/02/2013 à 20:25 :
Ça marche pas, il me met:
** L2300 (E) Duplicate symbol \"_OSVersionAsInt\" in \"C:\Users\Usuario\Documents\programas\C\Casio\Portal2D\Debug\menus.obj\"
My program is not working, I have no idea why.
My program is working, I have no idea why.
Citer : Posté le 06/02/2013 14:29 | #
Alors, faire une nouveau source fichier (key.c):
#define __KEY_C__
//code
#endif
Et dans gameplay.c, memory.c menus.c tu rajoutes
Citer : Posté le 06/02/2013 19:13 | #
Ok, j'essaierai
Ajouté le 06/02/2013 à 22:43 :
Ça change rien, mêmes erreurs dans les mêmes fichiers...
My program is not working, I have no idea why.
My program is working, I have no idea why.
Citer : Posté le 06/02/2013 22:53 | #
cette erreur survient quand tu déclare plusieures fois une fonction ou une variable (et il ne faut pas oublier que cette erreur vient souvent d'une mauvaise gestion des header et sources).
OSVersionAsInt est une fonction qui est sans doute présente plusieurs fois dans ton code: dans ton fichier principal mais aussi dans d'autres fichiers ("revolution.c" par exemple) le conflit doit venir d'ici.
Cela dit, je n'ai pas regardé ton code, je ne fais que des suppositions (utilise l'outil de recherche de code pour chercher dans tout tes fichiers "OSVersionAsInt" et assure toi qu'il n'est présent qu'une seule fois par .c et qu'il n'y a pas de multiple inclusion de .h contenant ce code (un .h peut en #include un autre qui rentre en conflit avec un Xème, il te faut donc chercher vraiment partout)
-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 06/02/2013 23:32 | #
Bon, je chercherai.
Ajouté le 06/02/2013 à 23:41 :
J\'ai cherché \"OSVersionAsInt\" avec le chercheur dans tous les fichiers du projet. Il apparait trois fois, toutes sur le fichier key.c que Casimo m\'avait recommendé. Parmis ces trois, une est la déclaration et les deux autres sont des appels à la fonction. Bref, OSVersionAsInt n\'a été déclaré qu\'une fois
My program is not working, I have no idea why.
My program is working, I have no idea why.
Citer : Posté le 07/02/2013 16:17 | #
Et decommenter ne marche pas?
Citer : Posté le 07/02/2013 20:38 | #
décommenter? où?
My program is not working, I have no idea why.
My program is working, I have no idea why.
Citer : Posté le 08/02/2013 16:30 | #
//OSVersionAsInt...
Ajouté le 10/02/2013 à 12:37 :
tu t\'en sort?
Je n\'arrive pas à faire ca :aie2: . C\'est trop dur pour moi, en ce moment .
Il y a des problèmes avec PlotPixel et des autres choses ...
Peut-être je vais plus tard essayer encore une fois.
Citer : Posté le 10/02/2013 17:08 | #
Il y a rien de commenté dans le code, où le //OSVersionAsInt est censé d'être?
My program is not working, I have no idea why.
My program is working, I have no idea why.
Citer : Posté le 11/02/2013 16:19 | #
Pardon, j'ai voulu dire commenter .
OsVersionAsInt...
//OsVersionAsInt...
Citer : Posté le 12/02/2013 15:24 | #
J'ai essayé de commenter chaque OSVersionAsInt séparemment, mais avec aucun d'eux le plantage est parti. Si ça continue à ne pas marcher, je vais devoir laisser tomber
My program is not working, I have no idea why.
My program is working, I have no idea why.
Citer : Posté le 12/02/2013 19:03 | # | Fichier joint
@javierxd: I got it!
See the appendice.
Citer : Posté le 12/02/2013 19:40 | #
Oui, ça a l'air de marcher, merci beaucoup.
Cependant je constate que les deplacements sont maintenant beaucoup plus rapides, probablement à cause du nouveau code... J'essaierai d'ajuster la vitesse et je posterai la nouvelle version. As tu déjà testé si ça marche sur les sh4?
My program is not working, I have no idea why.
My program is working, I have no idea why.
Citer : Posté le 12/02/2013 20:26 | #
moi quand j'ai essayé de modifier mon programme en c++ vers la SH4, il me met ca :
C:\Users\Damien\prog casio\projets a finir\evasion\evasion\evasion.cpp(72) : C5167 (E) Argument of type "unsigned char *" is incompatible with parameter of type "char *"
C:\Users\Damien\prog casio\projets a finir\evasion\evasion\evasion.cpp(72) : C5167 (E) Argument of type "unsigned short *" is incompatible with parameter of type "short *"
C:\Users\Damien\prog casio\projets a finir\evasion\evasion\evasion.cpp(72) : C5167 (E) Argument of type "unsigned short *" is incompatible with parameter of type "short *"
C:\Users\Damien\prog casio\projets a finir\evasion\evasion\evasion.cpp(94) : C5020 (E) Identifier "memcpy" is undefined
extern "C" {
#define __KEYBIOS_H__
#include "fxlib.h"
#define KEY_CHAR_0 OS2(0x30,71)
#define KEY_CHAR_1 OS2(0x31,72)
#define KEY_CHAR_2 OS2(0x32,62)
#define KEY_CHAR_3 OS2(0x33,52)
#define KEY_CHAR_4 OS2(0x34,73)
#define KEY_CHAR_5 OS2(0x35,63)
#define KEY_CHAR_6 OS2(0x36,53)
#define KEY_CHAR_7 OS2(0x37,74)
#define KEY_CHAR_8 OS2(0x38,64)
#define KEY_CHAR_9 OS2(0x39,54)
#define KEY_CHAR_DP OS2(0x2e,61)
#define KEY_CHAR_EXP OS2(0x0f,51)
#define KEY_CHAR_PMINUS OS2(0x87,41)
#define KEY_CHAR_PLUS OS2(0x89,42)
#define KEY_CHAR_MINUS OS2(0x99,32)
#define KEY_CHAR_MULT OS2(0xa9,43)
#define KEY_CHAR_DIV OS2(0xb9,33)
#define KEY_CHAR_FRAC OS2(0xbb,75)
#define KEY_CHAR_LPAR OS2(0x28,55)
#define KEY_CHAR_RPAR OS2(0x29,45)
#define KEY_CHAR_COMMA OS2(0x2c,35)
#define KEY_CHAR_STORE OS2(0x0e,25)
#define KEY_CHAR_LOG OS2(0x95,66)
#define KEY_CHAR_LN OS2(0x85,56)
#define KEY_CHAR_SIN OS2(0x81,46)
#define KEY_CHAR_COS OS2(0x82,36)
#define KEY_CHAR_TAN OS2(0x83,26)
#define KEY_CHAR_SQUARE OS2(0x8b,67)
#define KEY_CHAR_POW OS2(0xa8,57)
#define KEY_CTRL_EXE OS2(30004,31)
#define KEY_CTRL_DEL OS2(30025,44)
#define KEY_CTRL_AC OS2(30015,32)
#define KEY_CTRL_FD OS2(30046,65)
#define KEY_CTRL_EXIT OS2(30002,47)
#define KEY_CTRL_SHIFT OS2(30006,78)
#define KEY_CTRL_ALPHA OS2(30007,77)
#define KEY_CTRL_OPTN OS2(30008,68)
#define KEY_CTRL_VARS OS2(30016,58)
#define KEY_CTRL_UP OS2(30018,28)
#define KEY_CTRL_DOWN OS2(30023,37)
#define KEY_CTRL_LEFT OS2(30020,38)
#define KEY_CTRL_RIGHT OS2(30021,27)
#define KEY_CTRL_F1 OS2(30009,79)
#define KEY_CTRL_F2 OS2(30010,69)
#define KEY_CTRL_F3 OS2(30011,59)
#define KEY_CTRL_F4 OS2(30012,49)
#define KEY_CTRL_F5 OS2(30013,39)
#define KEY_CTRL_F6 OS2(30014,29)
#define KEY_CTRL_MENU OS2(30003,48)
#ifndef isOS2// This is new
typedef int(*sc_i2cp2sip)(char*, char*, short int*, short int*);
const unsigned int sc0015[] = { 0xD201D002, 0x422B0009, 0x80010070, 0x0015 };
#define GlibGetOSVersionInfo (*(sc_i2cp2sip)sc0015)
int OSVersionAsInt(void)
{
unsigned char mainversion;
unsigned char minorversion;
unsigned short release;
unsigned short build;
GlibGetOSVersionInfo( &mainversion, &minorversion, &release, &build );
return ( ( mainversion << 24 ) & 0xFF000000 ) | ( ( minorversion << 16 ) & 0x00FF0000 ) | ( release & 0x0000FFFF );
}
#define isOS2 (OSVersionAsInt() >= 0x02020000)
#define OS2(x,y) ((OSVersionAsInt() >= 0x02020000)?y:x)
#endif
const unsigned short* keyboardregister = (unsigned short*)0xA44B0000;
unsigned short key[8] = {0};
int KeyDown(int keycode)
{
if(isOS2)
{
int row, col, word, bit;
row = keycode%10;
col = keycode/10-1;
word = row>>1;
bit = col + 8*(row&1);
memcpy(key, keyboardregister, sizeof(unsigned short) << 3);
Sleep(1); //slow down, this function is faster than IsKeyDown() :-P
return (0 != (key[word] & 1<<bit));
}
else
{
return IsKeyDown(keycode);
}
}
#define IsKeyDown(x) KeyDown(x)
#define IsKeyUp(x) !KeyDown(x)
#define IsKeyDown(x) KeyDown(x)
#define IsKeyUp(x) !KeyDown(x)
#include "stdlib.h"
#include "usefull.h"
}
#include "MonochromeLib.h"
#include "heros.h"
#include "jeu.h"
#include "follower.h"
#include "wall.h"
#include "Bomb.h"
#include "score.h"
#include "trophee.h"
Ajouté le 12/02/2013 à 20:37 :
finalement, avec quelques cast et #include \"string.h\" ca passe
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 13/02/2013 17:24 | #
@javierxd: Oops. Mais compatible.
Citer : Posté le 13/02/2013 20:53 | #
D'accord, merci
My program is not working, I have no idea why.
My program is working, I have no idea why.
Citer : Posté le 27/02/2013 13:32 | #
eh, casimo, tu avance sur la conversion du mario?
Citer : Posté le 27/02/2013 15:49 | #
Je n'arrive pas à faire ca . C'est trop dur pour moi, en ce moment .
Il y a des problèmes avec PlotPixel et des autres choses ...
Peut-être je vais plus tard essayer encore une fois.
Citer : Posté le 22/03/2013 16:04 | #
Juste une question
Comment on fait avec un programme en C++ pour le rendre compatible en SH4
J'ai essayé de placer le code à modifier dans un extern C mais ça ne marche pas
Dodormeur j'ai vue que tu avais le même problème mais je n'ai pas compris comment tu l'avait résolut
Tu peut me passer un fichier main déjà près remplis en SH4 stp
Can you help me please
BMPat LE lecteur d'image pour casio graph 75 85 95
Citer : Posté le 22/03/2013 16:25 | # | Fichier joint
tiens, voila mon fichier contenant des fonctions utiles, dont une fonction d'input compatible SH4.
il te faudra peut-etre enlever deux trois fonctions qui te sont inutiles, et tu devra aussi faire un .h contenant les prototype des fonctions, et puis tu inclus ca dans le extern"C"
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 22/03/2013 16:25 | # | Fichier joint
en fait je dois te fournir aussi le .h pour les defines, donc le voila
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 !