Détecter les SH4/SH3 et adapter les programmes
Posté le 14/01/2015 10:47
Salut à tous! J'avais vu un topic sur Casiopeia avant qu'il ne tombe un topic où on pouvait avoir un bout de code qui permettait de détecter si la calto hôte est une SH3/SH4.
J'ai une idée. SI on retrouve ce snippet, si one le corrige, j'ai un moyen, ou du moins une idée, qui permettrait de n'avoir plus qu'un addin pour les deux architectures.
Les pointeurs (normaux ou sur fonctions) sont la clé du bousin. La plupart des fonctions d'I/O (ML, KeyDown, etc...) pourraient être stockés dans l'addin et lors de l'initialisation de l'addin, on switcherait de fonctions/constantes à utiliser pour le restant de l'addin.
Avec une sorte de vector map (tableaux de pointeurs de fonctions de même type), on aurait le choix entre les deux fonctions et avec un wrapper, on appelerait uniquement la fonction que l'on a besoin, sans avoir à se casser le chignon à propos de quelle archi on s'occupe. Cela occuperait peut-être une palce relativement moyenne à grande selon les fonctions mais le coût processeur serait quasi nul où on n'a besoin de travailler qu'une seule fois (le coût d'appel d'une fonction depuis un pointeur sur fonction est nul à quasi nul selon l'optimisation et le compilateur).
Citer : Posté le 14/01/2015 11:03 | #
Mais c'est déjà le cas en fait
Regarde dans useful, la fonction key_down utilise déjà cela (c'est pas de moi, c'est casimo qui avait rendu cette fonction compatible)
C'est comme cela qu'on a plusieurs add-in qui sont compatible SH3/4 avec un seul g1a
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 14/01/2015 11:05 | #
Oui, (déjà, où est-elle?) mais est-ce qu'elle le fait à chaque fois que l'on apele ou une seule fois?
Citer : Posté le 14/01/2015 11:09 | #
ici
Par contre j'ai vérifié, la fonction vérifie a chaque fois si c'est SH3 ou SH4, il y a donc moyen d'optimiser, mais je ne sais pas si le gain de temps serait vraiment conséquent... Mais c'est vrai que ce serait intéressant à tester
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 14/01/2015 11:10 | #
C'est l'idée. Ca rendrait aussi le code un peu plus propre et modulable.
(T'as une version multi processeur de ML quelque part? Faut que je rendre SHC compatible sinon y vont tous me faire la tronche)
Citer : Posté le 14/01/2015 11:14 | #
Regarde ici, il y a juste quatre lignes a changer pour que ML soit compatible (juste la vram qui change d'adresse)
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 14/01/2015 11:15 | #
Oui mais bon, deux addins pour un seul jeu... Avec l'éventuelle détection, il n'y aurait plus qu'un seul addin à maintenir.
Citer : Posté le 14/01/2015 11:16 | #
Non, le nouveau code est compatible SH3 aussi
Une fois que ML est compatible, elle l'est pour les deux
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 14/01/2015 11:18 | #
Y'a un bout de code comme ça en effet, c'est SimLo qui l'a présenté sur Casopeia.
Pour gcc on pourrait utiliser un symbole global avec une détection dans crt0.
Citer : Posté le 14/01/2015 11:19 | #
Mouais, Dodo, sur l'émulateur, ça a pas l'air de vouloir marcher.
Ajouté le 01/02/2015 à 14:09 :
{
int mpu;
unsigned char s[30];
unsigned int key;
unsigned char savevalue;
mpu = 0;
savevalue = *(unsigned short*)0xA4000114;
*(unsigned short*)0xA4000114 = 0xFFFF;
switch ( *(unsigned short*)0xA4000114 ){
case 0x0FFF :
mpu = 1;
break;
case 0x00FF :
mpu = 2;
break;
default :
switch ( *(unsigned int*)0xFF000030 & 0xFFFFFF00 ){
case 0x10300B00 :
switch ( *(unsigned int*)0xFF000044 & 0xFFFFFFF0 ){
case 0x00002C00 :
mpu = 3;
break;
case 0x00002200 :
mpu = 4; // just for reference
break;
};
break;
};
break;
};
*(unsigned short*)0xA4000114 = savevalue;
return mpu;
}
int getCPUFamily()
{
switch(GetMPU()){
case 3 :
case 4 :
return 0;
break;
case 2 :
case 1 :
case 5 : // mpu7705 ?
return 1;
break;
default :
return 2;
}
}
#define isEMU (GetMPU() == 2)
#define isSH3 (GetMPU() == 1)
#define isSH4 (GetMPU() == 0)
Bonne chance avec KeyDown, je ne veux plus avoir affaire avec.