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 - Projets de programmation


Index du Forum » Projets de programmation » Etude du format C1A
Louloux Hors ligne Ancien administrateur Points: 7035 Défis: 61 Message

Etude du format C1A

Posté le 01/11/2013 17:19

Comme vous le savez sûrement, la ClassPad 330 PLUS ne supporte pas le même format d'addins que les ClassPad 300/300+/330. Avant un kit de développement permettait de générer des addins au format cpa. Désormais le format des addins est le C1A, et à ce jour aucun logiciel permettant de compiler ce format ou de transformer un cpa en C1A n'a été publié publiquement.

Cependant "steps in logic" propose son application algy 2 aux deux formats ainsi que pour la ClassPad 400 (en couleur).

Simon Lothar a commencé à étudier ce format :

SimLo a écrit :
fx-CP, C1A-structure
CLASSPAD

virtual start address: 0x00300000
virtual RAM address: 0x08100000
syscall table entry: the address at 0x08100000 (obviously initialized by the system before starting the add-in.)
It has been observed that the static RAM starts at 0x081000CC.
The file format is similar to the G3A file format.

Standardheader
All file formats that are read or written by the calculator share a common header format. This header is inverted before being written and read, so a description of the inverted file data make more sense than the normal file data. The C1A-header seems to be identical to that of a G3A.

Addin subheader
Upon execution, the addin-code starting at file offset 0x1000 is virtually mapped to 0x00300000, and the OS jumps to address 0x00300000 (“Addin code”). The virtual RAM-address is still 0x08100000. But it seems, that at 0x08100000 the address to the syscall-table is stored.

Addin subheader fields (items, which differ from the G3A-structure, are printed in red)




Si vous trouvez d'autres choses, merci de m'en faire part.

Màj du 05/11/13 : remplacement de mon analyse par celle de Simon Lothar, plus complète.


Louloux Hors ligne Ancien administrateur Points: 7035 Défis: 61 Message

Citer : Posté le 04/11/2013 21:03 | #


Le problème est qu'ils ont un moyen de développer des add-ins compatibles mais qu'ils ne veulent pas nous en parler...
Totoyo Hors ligne Membre d'honneur Points: 16093 Défis: 102 Message

Citer : Posté le 04/11/2013 21:17 | #


Il vaut mieux éviter ce genre de question à Casio Europe, qui n'est qu'une antenne commerciale, et entrer en contact directement avec les développeurs. Peut-être qu'ils nous éclairerons mieux sur la politique de Casio, et les éventuelles possibilités pour une situation plus favorable pour les deux parties (et surtout pour nous ).
Louloux Hors ligne Ancien administrateur Points: 7035 Défis: 61 Message

Citer : Posté le 04/11/2013 21:20 | #


Je te laisse t'en charger, je maîtrise encore mal le japonais

Plus sérieusement, je suis certain que le support de Casio Europe est plus ou moins au courant de l'existence d'un SDK mais refuse de s'intéresser à ça (ou à nous).
Ils ont carrément zappé tout ce que j'ai dit à propos d'Algy 2 pour me répondre simplement que c'est impossible et point barre...
Dark storm Hors ligne Labélisateur Points: 11631 Défis: 176 Message

Citer : Posté le 04/11/2013 21:24 | #


Faudrait essayer d'en parler à ton contact chez Casio. On verra si il est (plus) compétent
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Totoyo Hors ligne Membre d'honneur Points: 16093 Défis: 102 Message

Citer : Posté le 04/11/2013 21:31 | #


"Compétent" n'est pas le terme que j’emploierai. Les marketeux sont là pour vendre et donner une bonne image de la marque. C'est ce point qui me parait fondamental. Je vous rappelle que leurs calculatrices ne visent pas le marché de la programmation. Même si c'est dommage qu'ils ne montrent pas plus d'ouverture au potentiel ludique et d'apprentissage à la programmation, leurs réponses ne me choquent guère. Malheureusement...
Louloux Hors ligne Ancien administrateur Points: 7035 Défis: 61 Message

Citer : Posté le 05/11/2013 19:42 | # | Fichier joint


Voilà une étude de Simon Lothar :

SimLo a écrit :
fx-CP, C1A-structure
CLASSPAD

virtual start address: 0x00300000
virtual RAM address: 0x08100000
syscall table entry: the address at 0x08100000 (obviously initialized by the system before starting the add-in.)
It has been observed that the static RAM starts at 0x081000CC.
The file format is similar to the G3A file format.

Standardheader
All file formats that are read or written by the calculator share a common header format. This header is inverted before being written and read, so a description of the inverted file data make more sense than the normal file data. The C1A-header seems to be identical to that of a G3A.

Addin subheader
Upon execution, the addin-code starting at file offset 0x1000 is virtually mapped to 0x00300000, and the OS jumps to address 0x00300000 (“Addin code”). The virtual RAM-address is still 0x08100000. But it seems, that at 0x08100000 the address to the syscall-table is stored.

Addin subheader fields (items, which differ from the G3A-structure, are printed in red)




Ajouté le 05/11/2013 à 19:45 :
Apparemment le format est le même que le G3A de la Prizm. Une possibilité de le compiler donc ?
Critor En ligne Administrateur Points: 2571 Défis: 18 Message

Citer : Posté le 13/10/2021 12:52 | #


Si l'on me permet un petit déterrage 8 ans après, on a maintenant de quoi récupérer les images système brutes lors de la mise à jour, et certaines ont été mises sur la bible.

Et comme pour Physium dont le fichier d'installation .c2a ne contenait pas grand chose, il y a plein de messages concernant Algy 2 en dur dans la dernière version 2.01.7000 du système d'exploitation fx-CP400.

Voici par exemple un des blocs de messages concernés :


Dans dans tous les cas, le petit code à la fin du fichier .c2a d'Algy 2 ne suffit pas.

J'ai l'impression que les fichiers .c1a/c2a ne sont plus que des fichiers d'activation d'applications dont le code est déjà intégralement ou en grande partie intégré en dur au système d'exploitation.
Ce qui n'autorise plus que les applications officielles, ou les applications développées en partenariat étroit avec Casio.

Bien dommage, quand on voit tout ce qui avait pu sortir pour Classpad 330 et inférieures grâce entre autres au SDK.
Je ne dis pas que c'était l'unique but recherché, mais cela permet ainsi à Algy 2 d'être payant et de ne risquer aucune concurrence.

Sans doute que Casio avait ses raisons et que ça les arrangeait pour certains pays/examens.
Mais en France en tous cas, cela a contribué à l'effondrement de l'intérêt envers la fx-CP400 (langage interprété limité et très lent + plus de possibilité de contourner le problème en développant des applications), bref nous n'avons quasiment pas de téléchargements intéressants à proposer pour ce modèle.
Lephenixnoir Hors ligne Administrateur Points: 24145 Défis: 170 Message

Citer : Posté le 13/10/2021 13:26 | #


Merci pour cette étude. Ça ne me surprendrait pas que le fichier «d'activation» soit utilisé, cela dit les autres add-ins marchent toujours non ? Il n'est pas impossible que les deux formats existent et fonctionnent indépendamment. D'ailleurs il suffit de faire un saut dans une table d'adresse linkée dans l'OS pour obtenir l'effet de l'add-in «activateur», ça pourrait donc très bien être un add-in normal appelant du code externe.
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Critor En ligne Administrateur Points: 2571 Défis: 18 Message

Citer : Posté le 13/10/2021 21:51 | #


Lephenixnoir a écrit :
cela dit les autres add-ins marchent toujours non ?

Il n'existe à ma connaissance que 2 add-ins pour fx-CP400, tous deux distribués sous forme de fichiers .c2a :
- l'add-in officiel Physium (le fichier .c2a ne contient vraiment pas grand chose, il ne fait même pas 32K), et toutes les valeurs numériques utilisées (propriétés éléments, constantes physiques) sont trouvables en dur dans l'OS, entre autres
- l'add-in payant Algy 2 semblant développé par un tiers en partenariat étroit avec Casio, puisque plein de morceaux sont directement intégrés à l'OS (fichier .c2a un peu plus gros, 219K, mais j'ai lu plus haut qu'il était binairement identique au .c1a de la Classpad 330+ - donc la section supplémentaire ne devrait pas être du code exécutable)

Rien d'autre ne marche. L'ancien format .cpa produit par le SDK n'est plus supporté.

Bien sûr cela ne démontre pas qu'il serait impossible de compiler un .c2a directement fonctionnel sans avoir à injecter du code ou des données dans l'OS.

On peut juste noter qu'aucun de ces 2 add-ins ne fait ça. Autant pour Physium qui est directement développé par Casio je peux le comprendre : c'est pratique, la mise à jour du système met donc automatiquement à jour l'add-in.
Autant pour Algy 2 je trouve que c'est un choix bien curieux (si tant est qu'il y ait eu le choix), rendant le développeur dépendant du rythme de mise à jour de Casio.

D'ailleurs cela pourrait être ton prochain gros projet après Doom, non ?
Compiler un .c2a qui marche sans avoir à modifier l'OS.
Lephenixnoir Hors ligne Administrateur Points: 24145 Défis: 170 Message

Citer : Posté le 13/10/2021 22:13 | #


Ah pardon, j'ai mal suivi à cause du contexte du topic, tu parlais uniquement des Classpad 400. Dans ce cas mon "argument" ne s'applique pas.

J'ai fait un désassemblage rapide de Physium.c2a et à première vue il semblerait qu'il n'y ait pas de code du tout dans l'add-in (et aussi un encodage bizarre des chaînes de caractères (caractères encodés par paires en little-endian).

Critor a écrit :
D'ailleurs cela pourrait être ton prochain gros projet après Doom, non ?
Compiler un .c2a qui marche sans avoir à modifier l'OS.

Pour être honnête je ne suis pas très attiré par la plateforme ; du coup je n'en ai pas, et sans pas moyen de tester. On notera quelques obstacles évidents en cas de non-support des add-ins : absence de virtualisation, absence de segment de données, les deux étant potentiellement fatals.
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Critor En ligne Administrateur Points: 2571 Défis: 18 Message

Citer : Posté le 13/10/2021 22:24 | #


Non non, je parlais aussi de la Classpad 330+, c'est exactement le même problème. Son format d'add-in est le .c1a, et l'ancien format .cpa du SDK public n'est plus supporté.
Désolé si j'ai manqué de clarté, mais même pour moi les choix de Casio concernant le haut de gamme Classpad n'ont pas toujours été évidents ni clairs.

C'est bien une Classpad 330+ que je t'ai passée il me semble, non ?

Si ça peut aider, Algy 2 est téléchargeable en version démo par ici, aux formats .cpa (Classpad 330 et inférieures, SH3), .c1a (Classpad 330+, SH4) et .c2a (fx-CP400/CG500, SH4) :
http://www.stepsinlogic.com/try
Lephenixnoir Hors ligne Administrateur Points: 24145 Défis: 170 Message

Citer : Posté le 14/10/2021 06:44 | #


Tant d'explications ! Désolé comme tu peux le voir je suis relativement ignorant sur cette série, malgré mes recherches cette erreur s'était glissée dans la page de description des modèles (c'est corrigé maintenant).

Merci pour les directions. Le .cpa (70 ko) ne semble pas contenir de code, mais en fait c'est compressé (ce que tu savais sans doute déjà mais que je découvre, je ne sais pas si c'est StepsInLogic ou Casio qui fait ça) :

% file Algy2_0_1.cpa
Algy2_0_1.cpa: MS Compress archive data, SZDD variant, n is last character of original name, original size: 130708 bytes
% cp Algy2_0_1.cpa Algy2_0_1_expanded.cpa_
% msexpand-mh Algy2_0_1_expanded.cpa_

Une fois que c'est fait on retrouve du code et des appels de syscalls normalement. Mais ce n'est pas tout, une petite inspection montre qu'il y a un ELF caché dedans après le header :

% tail Algy2_0_1_expanded.cpa -c +337 > Algy2_0_1_expanded.elf
% file Algy2_0_1_expanded.elf
Algy2_0_1_expanded.elf: ELF 32-bit MSB relocatable, Renesas SH, version 1 (SYSV), not stripped

Et c'est bien du repositionnable, ce qui montre que les Classpad contrairement à toutes les calculatrices précédentes ont un véritable loader dynamique, ou alors que Algy le shippe avec son application (ce qui serait osé/fort d'ailleurs !)

% sh-elf-objdump -h Algy2_0_1_expanded.elf

Algy2_0_1_expanded.elf:     file format elf32-sh

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 P             00012fa0  00000000  00000000  00000034  2**2
                  CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE
  1 C_binaryinfo  0000003c  00000000  00000000  00012fd4  2**2
                  CONTENTS, ALLOC, LOAD, RELOC, DATA
  2 B_heap        0000000c  00000000  00000000  00000000  2**2
                  ALLOC
  3 B             0000002d  00000000  00000000  00000000  2**2
                  ALLOC
  4 R             00000000  00000000  00000000  00000000  2**2
                  ALLOC
  5 C$VTBL        00000d74  00000000  00000000  00013010  2**2
                  CONTENTS, ALLOC, LOAD, RELOC, DATA
  6 C$INIT        00000000  00000000  00000000  00000000  2**2
                  ALLOC
  7 B$VTBL        00035560  00000000  00000000  00000000  2**2
                  ALLOC
  8 D             00000524  00000000  00000000  00013d84  2**2
                  CONTENTS, ALLOC, LOAD, RELOC, DATA
  9 C             00002b2f  00000000  00000000  000142a8  2**2
                  CONTENTS, ALLOC, LOAD, RELOC, DATA
10 B_SYSRAM      00001b14  00000000  00000000  00000000  2**2
                  ALLOC
11 C_programinfo 00000064  00000000  00000000  00016dd8  2**2
                  CONTENTS, ALLOC, LOAD, DATA

Le format C1A, à l'inverse, est un add-in plus standard avec un header de 0x1000 octets dans le style de CASIO et le code brut ensuite. Voilà tout ce que je peux trouver pour l'instant, tu savais peut-être tout ça mais bon...

Ajouté le 14/10/2021 à 07:52 :
Les headers de Physium.c2a et Algy2.C2A sont différents. Celui de Physium.c2a, qui comence par l'habituel "USBPower" inversé, fait 0x200 octets, tandis que celui de Algy2.C2A en fait 0x300 (ce n'est pas un pré-header, il commence aussi par "USBPower" inversé). Ce n'est sans doute pas sans raison, parce que le type de fichier déclaré dans l'en-tête inversé est 0x2c (via l'octet inversé 0xd3 à la position 8), aka add-in, mais celui de Physium.c2a est 0xf3 (via l'octet inversé 0x0c à la position 8), donc Physium.c2a n'est pas un add-in.

Algy2.C2A contient manifestement du code qu'il est facile d'aller chercher par désassemblage, donc il n'est pas exclu que ce soit un véritable add-in. Le seul point suspect éventuellement c'est qu'il n'y a pas beaucoup de chaînes de caractères, surtout une liste de fonctions et de messages. Mais c'est peut-être juste l'application qui est comme ça.

Le format C2A de Algy2.C2A est en surface identique au C1A documenté par SimLo. Pour Physium, voilà une tentative de description amorcée dans le bus. Clairement s'il y a des tentatives à faire sur Classpad 400+E il faut reprendre et modifier Algy2.C2A parce que je serais damné si ce n'est pas un vrai add-in complet. Il peut toujours y avoir dans l'OS de quoi empêcher le chargement d'add-ins autre que celui-ci, mais en tous cas le format doit bien être supporté encore.

0x0000: Header inversé presque classique (0x20)

Offset Taille   Description
0x0000      8   "USBPower"
0x0008      1   Type de fichier
                  0x0c: ?       (Physium.c2a)
                  0x3c: Add-in  (Algy2.C2A)
0x0009      5   0x00 0x01 0x00 0x01 0x00
0x000e      1   Contrôle: LSB de la taille (0x13) + 0x41
0x000f      1   0x01
0x0010      4   Taille du fichier en octets (big-endian)
0x0014      1   Contrôle: LSB de la taille (0x13) + 0xb8
0x0015      1   ?/0
0x0016      2   ***Checksum: ne correspond pas à l'habituelle***
0x0018      8   ?/0

===============================================================================

0x00020: Header du type 0x0c (0x1e0) [Physium.c2a] :

Offset Taille   Description
0x0020      4   Checksum:
                  Somme des octets 0x00..0x1f et 0x20..EOF-4  = 0x002186e7
                  Valeur réelle dans Physium.c2a              = 0x00218690
            4   ?: "SIUM"
            8   ?: 0000 0001 0000 0000
0x0030     12   Version "MM.mm.pppp\0\0"
0x003c     16   Date "YYYY.mmmm.dddd\0\0"
0x004c     16   ?: caa6 a514 aaa8 a5b4 ce44 a554 8a42 a514
0x005c      4   Taille du fichier (big-endian)
0x0060     48   ?: 0000 0004 7002 8474 0e02 b454 8103 8454
                   c082 b574 d842 8004 8420 01fc 0222 91fc
                   c212 a9fc e103 b9fc f132 a1fc f17a 99fc
0x0090      8   Nom de l'add-in "Physium\0"
0x0098     24   ?/0 (probablement le nom dans d'autres langues)

000000b0: 0000 0000 ffff fff8 8000 0008 b928 99c8  .............(..
000000c0: a528 a488 a528 a088 b9e5 1888 a122 0488  .(...(......."..
000000d0: a122 2488 a122 19c8 8000 0008 ffff fff8  ."$.."..........
000000e0: 0001 0000 0000 0000 0000 0000 0000 0000  ................
000000f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000100: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000110: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000120: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000130: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000140: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000150: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000160: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000170: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000180: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000190: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000001a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000001b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000001c0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000001d0: 0000 0000 6850 7379 7569 006d 0000 0000  ....hPsyui.m....
000001e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000001f0: 0000 947f 0000 0000 0000 0000 0000 0000  ................

===============================================================================

0x0020: Header du type 0x3c (0x2e0) [Algy2.C2A]:
  Pareil que https://bible.planet-casio.com/simlo/chm/v20/fxCP_C1A.htm

Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)

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 77 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