Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Autres questions


Index du Forum » Autres questions » Addins pour SH4, quoi de neuf ?
Purobaz Hors ligne Membre d'honneur Points: 2690 Défis: 110 Message

Addins pour SH4, quoi de neuf ?

Posté le 21/06/2014 07:26

Salut à tous,

Absent du forum quelques temps je n'ai pas pu suivre correctement vos recherches concernant les SH4.
J'ai consulté quelques topics, mais je n'en trouve aucun qui donne les précautions à prendre lors du développement d'addins compatibles.

Voici des questions que je me pose :
- apparemment MonochromeLib n'est pas compatible, mais j'en ai pas vraiment besoin, je voudrais juste savoir si vous avez des équivalents de ML_vram_adress et ML_display_vram
- il semble aussi que certaines fonctions de fxlib ne sont pas compatibles, est-ce que quelqu'un aurait une petite liste ?
- pour la culture, qu'en est-il des syscall ?

J'aurais peut-être d'autres questions par la suite, merci pour vos réponses


Lephenixnoir Hors ligne Administrateur Points: 24232 Défis: 170 Message

Citer : Posté le 21/06/2014 08:01 | #


Il existe une version modifiée de ML compatible SH4. Il existe même deux tutos pour créer du code SH4.
-- Rendre compatibles les addins avec les SH4
Ce tutoriel modifie le syscall utilisé dans ML et ajoute un code de compatibilité.
-- Rendre compatible le SDK avec les SH4
Cette deuxième manipulation modifie le dossier "Default" des données du SDK dans "Program Files" pour que les projets créés comportent automatiquement le code de compatibilité du tutoriel précédent.

Et surtout, ce qui est le plus utilisé, c'est le SH4 Compatibility Tool (ou SH4 CT) qui prend les fichiers g1a générés par le SDK et en modifie en Assembleur le contenu. Il remplace le code des fonctions SH3 par un code qui s'adapte au processeur. Il a bien démontré son efficacité et sa fiabilité et est utilisé... partout ou presque.
Le problème c'est que jusqu'ici, il considérait à l'exécution, que si l'OS est 2.02 la calculatrice est SH4, sinon elle est SH3. Or avec la sortie de la version 2.04 de l'OS -- qui ajoute par ailleurs les vecteurs --, cela n'est plus possible (car il peut être installé sur toutes les calculatrices).
Il y aurait deux manières de corriger cela. La première serait de forcer le code SH4, en perdant la compatibilité SH3, ce qui nous mènerait à deux addins compilés par programme. Là n'est pas le problème, il s'agit des échanges réalisés directement entres deux calculatrices qui pourraient foirer une fois sur deux. Sinon, il faudrait trouver un moyen de reconnaître une calculatrice SH4, par exemple en provoquant une erreur sur le processeur qui ne s'applique qu'aux SH4.

Comme tu peux le voir dans le premier tutoriel, les syscalls ne s'appellent plus de la manière, mais existent toujours et peuvent encore être utilisés -- même si on a parfois un peu de mal...
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Purobaz Hors ligne Membre d'honneur Points: 2690 Défis: 110 Message

Citer : Posté le 21/06/2014 09:02 | #


Ok merci, j'ai une SH3 et une SH4 donc je vais faire mes tests
I'll be back !
pour plus de fun
mes programmes fun
de technique
mes projets
et de Swag
les projets que je soutiens
Ziqumu Hors ligne Membre d'honneur Points: 3055 Défis: 9 Message

Citer : Posté le 21/06/2014 11:45 | #


J'ai un moyen de reconnaître la calto sans le nom de version, allez voir sur ça casiopeia, je l'implementerais dans le sh4ct quand j'aurais le temps
Lephenixnoir Hors ligne Administrateur Points: 24232 Défis: 170 Message

Citer : Posté le 21/06/2014 16:44 | #


Juste pour savoir, les adresses mémoire dépendent bien de l'OS ? Sinon, il est facile de comparer l'adresse brute définie pour les SH3 pour la VRAM (par exemple) à celle retournée par le syscall.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Ziqumu Hors ligne Membre d'honneur Points: 3055 Défis: 9 Message

Citer : Posté le 21/06/2014 18:37 | #


Qu'est-ce que tu appel adresse mémoire ? Genre si je veux écrie sur l'écran, j'écris à une certaine adresse, cette adresse n'est pas géré par l'OS c'est pas le truc dont j'ai plus le nom, mais c'est lui qui s'en charge. Sauf que ça change pas grand chose, toutes les adresses ne changent pas (encore heureux), et pour celles qui change, si on les tests, il y aura une erreur comme quoi elle n'existe pas, et donc le programme s'arrete. C'est pas le but recherché.

Mais SimLo a trouvé comment faire, si tu veux savoir, va voir dans la fxreverse (pas le pdf, le fichier aide) ou casiopeia dans mon dernier topic.
Lephenixnoir Hors ligne Administrateur Points: 24232 Défis: 170 Message

Citer : Posté le 21/06/2014 18:40 | #


Je parlais par exemple de l'adresse de le VRAM. Dépend-elle de l'OS, ou du proco ?
Sinon, je vais voir sur Casiopeia.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Ziqumu Hors ligne Membre d'honneur Points: 3055 Défis: 9 Message

Citer : Posté le 21/06/2014 18:46 | #


L'adresse de la VRAM dépend de l'OS car c'est juste un endroit fixe dans la mémoire réservé à ça. Mais c'est pas parce qu'elle dépend de l'OS qu'elle change suivant les OS, ils peuvent décider de garder la même.
Lephenixnoir Hors ligne Administrateur Points: 24232 Défis: 170 Message

Citer : Posté le 21/06/2014 18:47 | #


Donc ça ne fonctionnerait pas. C'était juste pour savoir, on avais un doute avec DS tout à l'heure.
Sinon, j'ai regardé sur Casiopeia. Donc vous décidez ça à partir d'une adresse dans la RAM ?
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Ziqumu Hors ligne Membre d'honneur Points: 3055 Défis: 9 Message

Citer : Posté le 21/06/2014 18:59 | #


En fait il utilise des différences de fonctionnement entre les cpu. De mémoire, tu écris à un endroit puis tu le lit. Suivant le cpu, ça va correspondre ou non à quelquechose (une sortie il me semble), et donc tu pourra le lire et récupérer ta valeur que tu as mis alors que dans l'autre cas la valeur sera lue sera 0.

Donc non, c'est pas la ram, c'est des registres de config du cpu.
Lephenixnoir Hors ligne Administrateur Points: 24232 Défis: 170 Message

Citer : Posté le 21/06/2014 19:02 | #


Ok, donc là il s'agit bien d'un moyen fiable de reconnaître le CPU. C'est cool alors, on va avoir des add-ins adaptés à tous les modèles. On va pouvoir implémenter directement tes fonctions dans la lib par défaut pour la compilation gcc, comme ça on aura des addins puissants et nativement compatibles SH4.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Ziqumu Hors ligne Membre d'honneur Points: 3055 Défis: 9 Message

Citer : Posté le 21/06/2014 19:05 | #


Bah après on a plus qu'a prié que les prochaines versions hardware ne se comportent pas pareil avec des specs différentes.

Pour que ce soit le plus rapide possible pendant l'execution, il faudra qu'au chargement de l'addin, la version soit détecté et stocké dans une variable globale, mais je sais pas trop si c'est faisable dans votre lib gcc.
Lephenixnoir Hors ligne Administrateur Points: 24232 Défis: 170 Message

Citer : Posté le 21/06/2014 19:08 | #


Bien sûr que si, on fait ce qu'on veut.
Certaines fonctions d'initialisation sont appelées au lancement de l'add-in (fonction en 0x00300000), donc il nous suffit de la modifier pour appeler ton code (elle est dans le crt0.s).
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Ziqumu Hors ligne Membre d'honneur Points: 3055 Défis: 9 Message

Citer : Posté le 21/06/2014 19:10 | #


Ok, en effet, j'avais pas pensé à le mettre dans le code d'init de l'addin, je réfléchissait purement en "lib" et pas en systeme de compilation complet. Quand j'aurais le temps, je développerais le keydown plutot rapide et compatible toute calto (il sera sans doute fait en assembleur par contre)
Lephenixnoir Hors ligne Administrateur Points: 24232 Défis: 170 Message

Citer : Posté le 21/06/2014 19:12 | #


De tout façon, crt0.s c'est de l'asm donc pas de problème. Il faut juste je crois, qu'on pense à les appeler ces fonctions.
Mais en y réfléchissant, rien dans le code de l'add-in n'indique qu'il faut appeler la fonctions INIT_ADDIN_APPLICATION() (définie dans les pragma), donc j'ai tendance à penser qu'elle est appelée par défaut si elle existe. Je ferai des tests, et si cela s'avérait vérifié, on n'aurait qu'à la créer et appeler ce qu'on veut dedans.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Ziqumu Hors ligne Membre d'honneur Points: 3055 Défis: 9 Message

Citer : Posté le 21/06/2014 19:16 | #


Si tu compiles sous GCC, tu met pas de INIT_ADDIN_APPLICATION, je vois pas le rapport. En assembleur t'appel pas de fonction, t'appel une adresse et l’adresse de cette fonction change selon le programme. C'est juste que quand le compilateur du sdk fait l'addin, il fait en sorte que ce soit la fonction appelé à la fin du chargement. Mais si tu est sous GCC, tu fais ce que tu veux, puisque c'est toi qui fait le wrapper g1a, tu peux très bien décider de lancer n'importe quel code avant le jump sur la fonction main.
Lephenixnoir Hors ligne Administrateur Points: 24232 Défis: 170 Message

Citer : Posté le 21/06/2014 19:20 | #


Non, car le code appelé est à l'adresse 0x0030000, et on n'a pas forcément la place de coller du code là.
Je pense que la fonction INIT_ADDIN_APPLICATION() est appelée par l'OS de la calculatrice au lancement de l'application, voilà le rapport. Sinon, on sera obligé d'écrire "initialize();" au début de chaque add-in, et c'est moche.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Ziqumu Hors ligne Membre d'honneur Points: 3055 Défis: 9 Message

Citer : Posté le 21/06/2014 19:24 | #


Un OS ne peut pas appeler une fonction dans ton programme c'est impossible car il ne peut appeler qu'une adresse, et une fonction n'a pas toujours la même adresse suivant la compilation. L'OS lui il jump sur l'adresse de début du binaire dans l'addin qui est 0x00300200, et après il lui laisse la main. Tu fait ce que tu veux, la suite tu peux la décaler pour avoir plus de place. C'est du binaire, la seule chose que l'OS peut faire une fois avoir jumpé sur l'adresse c'est faire des interruptions. Après je sais pas ce qu'il y a dans le wrapper g1a, lui peut décider quelle fonction commence, mais c'est pas l'OS. Et puis lui tu peux le modifier et décaller le reste si tu as envie.

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 96 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