π
<-
Chat plein-écran
[^]

Pack outils ROM/OS/Apps compatibles 82 Advanced et 84 Plus T

Nouveautés, projets, mises à jour.

Re: Pack outils ROM/OS/Apps compatibles 82 Advanced et 84 Pl

Message non lude critor » 28 Sep 2016, 21:59

Les applications ne sont pas intégrées à l'OS TI-82 Advanced, elles viennent avec le fichier de mise à jour d'OS - nuance. ;)

En mémoire elles sont exactement aux mêmes pages que sur TI-84 Plus comme montré plus haut.


Quand on répond de suite impossible, on part perdant... ;)
C'est tout sauf impossible. :)

Brandon Wilson a déjà montré une faille permettant d'exécuter, certes à ce jour sans pouvoir retomber sur un état stable, du code assembleur sur TI-82 Advanced.

Un truc évident serait donc :
  • de reprendre et modifier son code pour qu'il installe une application spéciale (peu importe que ça se termine sur un crash/freeze+reset ensuite, ce qui est écrit en mémoire Flash est définitif : ce n'est pas effacé par un simple reset et ça restera)
  • et cette application spéciale pourrait être une sorte de gestionnaire d'applications, permettant :
    • d'installer une application transférée (on n'aurait qu'à les convertir et envoyer au format AppVar dans lequel on peut mettre n'importe quoi)
    • de supprimer une application installée
    • de réorganiser les applications (Garbage Collect)

Reste plus qu'à développer une telle application (on pourrait déjà la tester sur TI-84 Plus), et ensuite l'intégrer correctement dans son code. ;)
Image
Avatar de l’utilisateur
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Prochain niv.: 41.8%
 
Messages: 41468
Images: 14480
Inscription: 25 Oct 2008, 00:00
Localisation: Montpellier
Genre: Homme
Calculatrice(s):
MyCalcs profile
YouTube: critor3000
Twitter/X: critor2000
GitHub: critor

En ligne

Re: Pack outils ROM/OS/Apps compatibles 82 Advanced et 84 Pl

Message non lude Epharius » 28 Sep 2016, 22:08

Oui, ce serait une super idée, l'obligation étant de modifier l'OS et non de mettre un bout de code en plein milieu de la flash qu'on ne pourra pas exécuter. A voir si tout cela est possible mais je suis persuadé que oui. Pourquoi pas en effet modifier un application déjà installée en mettant au début de son code quelque chose du genre :

ld hl,ASM
call _mov9toop1
call _chkfindsym
inc de
inc de
ex de,hl
call (hl)
ret

Comme ça, dès qu'on lance l'app, paf ça saute au programme par exemple appelé ASM et rien interdit d'envoyer un programme assembleur.
Je n'ai pas essayé mais ce serait bien de savoir si ce genre de chose marche ou pas.
Le projet Geometry Dash est terminé ! N'hésitez pas à aller jeter un coup d’œil au topic du projet ! Vous pouvez le télécharger ici.

Unis par la flèche sacrée de cupidon :favorite:
Image
Avatar de l’utilisateur
EphariusPremium
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Prochain niv.: 7%
 
Messages: 1107
Images: 4
Inscription: 08 Déc 2014, 17:38
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile
Classe: Ensimag
GitHub: MathisLav

Re: Pack outils ROM/OS/Apps compatibles 82 Advanced et 84 Pl

Message non lude critor » 28 Sep 2016, 22:14

Epharius a écrit:Oui, ce serait une super idée, l'obligation étant de modifier l'OS et non de mettre un bout de code en plein milieu de la flash qu'on ne pourra pas exécuter.

Pas sûr d'avoir compris ta contrainte
Si on écrit du code en Flash au format d'une application, cette application sera listée et exécutable via :f42:.

Il n'y a pas à modifier l'OS - les applications n'y sont pas intégrées - il fait juste lister ce qu'il trouve en mémoire Flash.
Le fichier .82u au format IntelHex contient les adresses d'écriture de chaque bout de code.
Et les bouts de code ciblant les zones mémoire OS et FlashApps y sont complètement distincts.



Comme tu le décris on pourrait aussi vampiriser une application préchargée pour lui injecter du code.

Mais techniquement, je pense que ce n'est pas plus compliqué d'écrire directement en Flash à la 1ère page sans application, c'est-à-dire 0x1e, après (ou avant selon le point de vue) l'application Français. Comme ça, tu ne sacrifies pas une de tes applications.
Juste à mettre le bon header pour dire que c'est une application et c'est bon. Même pas besoin de s'embêter à rajouter une signature à la fin, comme le prouve si bien l'application Français justement. :P
Image
Avatar de l’utilisateur
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Prochain niv.: 41.8%
 
Messages: 41468
Images: 14480
Inscription: 25 Oct 2008, 00:00
Localisation: Montpellier
Genre: Homme
Calculatrice(s):
MyCalcs profile
YouTube: critor3000
Twitter/X: critor2000
GitHub: critor

En ligne

Re: Pack outils ROM/OS/Apps compatibles 82 Advanced et 84 Pl

Message non lude Epharius » 28 Sep 2016, 22:19

Mmmh, oui c'est pas faux :p
C'est juste que j'estimais plus facile de chercher une app au hasard avec ChkFinSym et de lui injecter du code que de créer soit même son application avec le header qui va avec. Mais c'est sûr qu niveau contrainte, on ne perd pas d'app avec cette technique au moins ^^

Enfin, n'ayant jamais programmé en assembleur sur Ti83+/Ti84+ je n'ai jamais connu ce système de paging, faudra que je vois qu'est-ce qui change avant de changer quoique ce soit ;)
Le projet Geometry Dash est terminé ! N'hésitez pas à aller jeter un coup d’œil au topic du projet ! Vous pouvez le télécharger ici.

Unis par la flèche sacrée de cupidon :favorite:
Image
Avatar de l’utilisateur
EphariusPremium
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Prochain niv.: 7%
 
Messages: 1107
Images: 4
Inscription: 08 Déc 2014, 17:38
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile
Classe: Ensimag
GitHub: MathisLav

Re: Pack outils ROM/OS/Apps compatibles 82 Advanced et 84 Pl

Message non lude critor » 28 Sep 2016, 22:31

La ROM des TI-z80 est divisée en pages de 16Ko chacune.

Pour les ROMs de 1Mo (TI-82 Advanced et TI-84 Plus), les applications sont écrites à l'envers et de façon continue à partir de la page 0x29.
C'est-à-dire que la page écrite suivante sera la 0x28 puis la 0x27, etc.

Chaque application commence obligatoirement au tout-début d'une page, et se réserve totalement un nombre entier de pages, peu importe sa taille.
C'est pour ça que dans le menu mémoire, les tailles d'applications sont toujours multiples de 16Ko.
Même l'application SmartPad qui a une taille de code ridicule (quelques Ko je crois) fait 16Ko.

Pour la cas particulier de la TI-82 Advanced, tu pourrais chercher l'application Français avec ChkFindSym, puisque c'est la dernière application préchargée, et ça te renverra sur la page 0x1f.
La page pour rajouter notre application est donc la 0x1e.

Ou tu peux aussi, plus proprement comme le fait mon outil, boucler à rebours de page en page à partir de la 0x29, jusqu'à ne plus trouver d'application.
Code: Tout sélectionner
Looking for apps in pages 0x29-0x0c
Page 0x29 : Prob Sim 1.1 (2 pages)
Page 0x28 :
Page 0x27 : Inequalz 1.3 (2 pages)
Page 0x26 :
Page 0x25 : PlySmlt2 1.1 (2 pages)
Page 0x24 :
Page 0x23 : CSheetFr 1.1 (3 pages)
Page 0x22 :
Page 0x21 :
Page 0x20 : P▒riod▒▒ 1.1 (1 pages)
Page 0x1f : Fran▒ais 1.1 (1 pages)
Page 0x1e : no more apps
Image
Avatar de l’utilisateur
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Prochain niv.: 41.8%
 
Messages: 41468
Images: 14480
Inscription: 25 Oct 2008, 00:00
Localisation: Montpellier
Genre: Homme
Calculatrice(s):
MyCalcs profile
YouTube: critor3000
Twitter/X: critor2000
GitHub: critor

En ligne

Re: Pack outils ROM/OS/Apps compatibles 82 Advanced et 84 Pl

Message non lude Epharius » 28 Sep 2016, 22:41

Ok merci ;)
Je vais réessayer la méthode de BW quand même, mais sur une VM, là au moins y'aura pas d'excuse pour que ça ne marche pas ^^

Ce serait possible du coup d'avoir le code source de ton programme (si tu veux bien évidemment) ? Ça me permettrait de comprendre plus en détails la structure de la mémoire, même si je ne comprends pas tout ça peut toujours être instructif :)
Le projet Geometry Dash est terminé ! N'hésitez pas à aller jeter un coup d’œil au topic du projet ! Vous pouvez le télécharger ici.

Unis par la flèche sacrée de cupidon :favorite:
Image
Avatar de l’utilisateur
EphariusPremium
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Prochain niv.: 7%
 
Messages: 1107
Images: 4
Inscription: 08 Déc 2014, 17:38
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile
Classe: Ensimag
GitHub: MathisLav

Re: Pack outils ROM/OS/Apps compatibles 82 Advanced et 84 Pl

Message non lude critor » 28 Sep 2016, 23:04

Epharius a écrit:Ce serait possible du coup d'avoir le code source de ton programme (si tu veux bien évidemment) ? Ça me permettrait de comprendre plus en détails la structure de la mémoire, même si je ne comprends pas tout ça peut toujours être instructif :)


Oui bien sûr, même si franchement le but premier n'était pas de faire quelque chosde de lisibile.
Voici la version actuelle du fichier principal :
Code: Tout sélectionner
// 512K : TI-73                     0C-15   0A   10   160Kio   163840
// 512K : TI-83 Plus               0C-15   0A   10   160Kio   163840
// 1024K : TI-84 Plus               0C-29   1E   30   480Kio   491520
// 1024K : TI-82 Advanced            0C-29   1E   30   480Kio
// 2048K : TI-83 Plus Silver Edition   0C-69   5E   94   1504Kio   1540Ko
// 2048K : TI-84 Plus Silver Edition   0C-69   5E   94   1504Kio   1540Ko
// 2048K : TI-84 Plus T               0C-69   5E   94   1504Kio
// 4096K : TI-84 Plus C Silver Edition   0C-E3   D8   216   3456Kio   3539Ko

#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#include "time.h"
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
   
#define NAME_SIZE 8
#define VER_SIZE 4
#define EXT_SIZE 4
#define FILENAME_SIZE (NAME_SIZE+1+VER_SIZE+EXT_SIZE+13)

#define MIN(a,b)   ((a<b)?a:b)

#define DATE_SIZE 8
#define NZONES  5
#define NMODELS 6
#define IHX_PAGELINE_SIZE   7
#define IHX_INTERLINE_SIZE   5
#define IHX_DATALINE_HEADSIZE   4
#define IHX_DATA_SIZE   32
#define IHX_DATALINE_SIZE   (IHX_DATALINE_HEADSIZE+IHX_DATA_SIZE+1)
uint8_t imodel_id[NMODELS]      ={2,      4,            0xA,         0xB,            0x1B,         0xF};
uint8_t imodel_type[NMODELS]   ={0x74,      0x73,         0x73,         0x73,            0x73,         0x73};

#define NROMS   4
#define PAGE_SIZE 0x4000
#define MAXPAGES 0x100   // 4MB
#define NEWLINE "\r\n"
#define NEWLINE_SIZE strlen(NEWLINE)
uint32_t irom_pgsize[NROMS]={MAXPAGES/8, MAXPAGES/4, MAXPAGES/2, MAXPAGES};

//   OS1   endapp    sig2   OS2      sig1
uint32_t irom_izone_pgoffset[NROMS][NZONES]={
   {0,   0x16,   -1,      0x18,   0x1A},   // 512K
   {0,   0x2A,   0x30,   0x34,   0x3A},   // 1024K
   {0,   0x6A,   0x70,   0x74,   0x7A},   // 2048K
   {0,   0xE4,   0xE4,   0xE8,   0xFA}   // 4096K
};

uint32_t irom_izone_pgsize[NROMS][NZONES]={
   {8,   0x0A,   0,      0x06,   0},   // 512K
   {8,   0x1E,   4,      0x0A,   0},   // 1024K
   {8,   0x5E,   4,      0x0A,   0},   // 2048K
   {8,   0xD7,   4,      0x0D,   0}   // 4096K
};

char rombuffer[MAXPAGES*PAGE_SIZE];
char appsbuffer[MAXPAGES*PAGE_SIZE];

uint8_t decinhex(uint8_t val) {
   return ((val/10)<<4)|(val%10);
}

void addck(uint8_t* array, uint32_t size) {
   uint32_t i;
   uint8_t ck=0;
   for(i=0;i<size-1;i++)
      ck-=array[i];
   array[size-1]=ck;
}

void fputbytes(uint8_t* array, uint32_t size, FILE* file) {
   uint32_t i;
   char tmp[3];
   if(size)
      fputs(":",file);
   for(i=0;i<size;i++) {
      sprintf(tmp,"%02X",array[i]);
      fputs(tmp,file);
   }
}

int main(int argc, char* argv[])
{   uint8_t tbuffer[77];
   uint8_t appname[NAME_SIZE+1];
   uint8_t apppath[FILENAME_SIZE+1];
   uint32_t romsize=0;
   int c,h=0,page=0, i, j, k;
   
   FILE* rom;
   FILE* upd=0;
   uint8_t t;
   uint8_t irom=NROMS-1;
   uint8_t imodel=0;
   uint8_t idmodel=0;
   uint32_t izone,ipage;
   
   uint8_t updinter[IHX_INTERLINE_SIZE]={0,0,0,1};
   addck(updinter,IHX_INTERLINE_SIZE);
   
   printf("+---------+\n");
   printf("| rom2xxk |\n");
   printf("+---------+\n");
   printf(" TI-z80 ROM apps extractor\n\n");
   char* rompath=0;
   for(i=1;i<argc;i++) {
      if(!rompath)
         rompath=argv[i];
   }
   
   if( !rompath)
   {   printf("ERROR: missing or bad arguments\n");
      printf("Usage: %s source.rom dest.??k\n", argv[0]);
      return 0;
   }
   
   printf("Reading ROM %s ...\n",rompath);
   rom=fopen(argv[1],"rb");
   if(!rom)
   {   printf("ROM file open error\n");
      return 0;
   }
   fseek(rom,0,SEEK_END);
   uint32_t nrompages = ftell(rom)/PAGE_SIZE, nupdpages=0;
   fseek(rom,0,SEEK_SET);
   
   printf("- size ...\t");
   while(irom_pgsize[irom]>nrompages && irom>=0)
      irom--;
   if(irom<0) {
      printf("Error : unsupported ROM size\n");
      return 0;
   }
   nrompages = irom_pgsize[irom];
   romsize=nrompages*PAGE_SIZE;
   printf("%dKio (0x%x pages)\n",romsize/1024,nrompages);
   fread(rombuffer, 1, romsize, rom);
   fclose(rom);

   time_t rawtime=time(&rawtime);
   struct tm *clock=localtime(&rawtime);
   
    strftime(tbuffer, DATE_SIZE+1, "%m%d%Y", clock);
   clock->tm_mon++;
   clock->tm_year+=1900;
//   printf("%02d/%02d/%d\n",clock->tm_mon,clock->tm_mday,clock->tm_year);

   uint32_t vmaj=0, vmin=0;

   printf("\nLooking for apps in pages 0x%02x-0x%02x\n",irom_izone_pgoffset[irom][1]-1,irom_izone_pgoffset[irom][1]-irom_izone_pgsize[irom][1]);
   ipage =irom_izone_pgoffset[irom][1];
   char* romptr=rombuffer+ipage*PAGE_SIZE;
   uint32_t appsize=0,napppages=0,namesize=0;
   char *ptr,*ptr8000;
   int datasize;
   uint32_t datablocksize;
   uint8_t pgheader[IHX_PAGELINE_SIZE]={2,0,0,2,0,0};
   uint8_t upddata[IHX_DATALINE_SIZE]={IHX_DATA_SIZE,0x40,0,0};
   i=0;
   memset(appsbuffer,0xFF,MAXPAGES*PAGE_SIZE);
   romptr=rombuffer+irom_izone_pgoffset[irom][1]*PAGE_SIZE;
   char* appsptr=appsbuffer;
   uint32_t nappspages=irom_izone_pgsize[irom][1];
   for(i=0;i<nappspages;i++) {
      romptr-=PAGE_SIZE;
      memcpy(appsptr,romptr,PAGE_SIZE);
      appsptr+=PAGE_SIZE;
   }
   for(ipage=0;ipage<nappspages;ipage++) {
      datasize=nappspages*PAGE_SIZE+appsptr-appsbuffer;
      appsptr=appsbuffer+ipage*PAGE_SIZE;
      printf("Page 0x%02x : ",irom_izone_pgoffset[irom][1]-1-ipage);
      if(!appsize) {
         if(upd) {
            fputs(NEWLINE,upd);
            fputbytes(updinter,IHX_INTERLINE_SIZE,upd);
            fclose(upd);
            upd=0;
         }
         pgheader[IHX_PAGELINE_SIZE-2]=0;
         uint32_t size8000 = getFieldDataSize(appsptr,0x8000,1,datasize);
         if(size8000) {
            uint32_t sizetot=getTotalFieldsSize(appsptr,datasize);
            ptr8000=getFieldDataPtr(appsptr,0x8000,1,datasize);
            appsize=sizetot+ptr8000-appsptr;
            ptr=getFieldDataPtr(ptr8000,0x8040,1,datasize);
            memcpy(appname,ptr,NAME_SIZE);
            appname[NAME_SIZE]=0;
            namesize=strlen(appname);
            strcpy(apppath,appname);
            apppath[NAME_SIZE]=0;
            ptr=getFieldDataPtr(ptr8000,0x8010,1,datasize);
            idmodel=*(ptr+1);
            imodel=0;
            while(imodel<NMODELS && imodel_id[imodel]!=idmodel)
               imodel++;
            if(imodel>=NMODELS) {
               printf("ERROR: unknown target model\n");
               break;
            }
            ptr=getFieldDataPtr(ptr8000,0x8020,1,datasize);
            vmaj=*ptr;
            sprintf(apppath+strlen(apppath)," %d.",vmaj);
            ptr=getFieldDataPtr(ptr8000,0x8030,1,datasize);
            vmin=*ptr;
            sprintf(apppath+strlen(apppath),"%d",vmin);
            ptr=getFieldDataPtr(ptr8000,0x8080,1,datasize);
            napppages=*ptr;
            printf("%s (%d pages)",apppath,napppages);
            if(sizetot<=size8000+6)
               strcat(apppath," \(unsigned\)");
            strcat(apppath,".8xk");
            upd=fopen(apppath,"w");
            if(!upd) {
               printf("Error creating %s !\n",apppath);
               return 0;
            }
            fputs("**TIFL**",upd);            
            fputc(vmaj,upd);
            fputc(vmin,upd);
            fputs("\x01\x88",upd);
            fputc(decinhex(clock->tm_mon),upd);
            fputc(decinhex(clock->tm_mday),upd);
            fputc(decinhex(clock->tm_year/100),upd);
            fputc(decinhex(clock->tm_year%100),upd);
            fputc(namesize,upd);
            fwrite(appname,1,namesize,upd);
            while(namesize<8) {
               namesize++;
               fputc(0,upd);
            }
            for(i=0;i<23;i++)
               fputc(0,upd);
            fputc(imodel_type[imodel],upd);
            fputc(0x24,upd);
            for(i=0;i<24;i++)
               fputc(0,upd);
            uint32_t updsize = (sizetot/PAGE_SIZE+(sizetot%PAGE_SIZE?1:0))*(IHX_PAGELINE_SIZE*2+NEWLINE_SIZE+1)+(sizetot/IHX_DATA_SIZE+(sizetot%IHX_DATA_SIZE?1:0))*(IHX_DATALINE_SIZE*2+NEWLINE_SIZE+1);
            updsize+=(IHX_INTERLINE_SIZE*2+NEWLINE_SIZE+1)-2;
            for(i=0;i<4;i++) {
               fputc(updsize%0x100,upd);
               updsize=updsize>>8;
            }
         }
         if(!appsize) {
            printf("no more apps\n");
            break;
         }
      }
      else
         fputs(NEWLINE,upd);
      upddata[1]=0x40;
      upddata[2]=0;
      addck(pgheader,IHX_PAGELINE_SIZE);
      fputbytes(pgheader,IHX_PAGELINE_SIZE,upd);
      datablocksize=MIN(PAGE_SIZE,appsize);
      for(i=0;i<datablocksize;i+=IHX_DATA_SIZE) {
         memcpy(upddata+IHX_DATALINE_HEADSIZE,appsptr,IHX_DATA_SIZE);
         appsptr+=IHX_DATA_SIZE;
         addck(upddata,IHX_DATALINE_SIZE);
         fputs(NEWLINE,upd);
         fputbytes(upddata,IHX_DATALINE_SIZE,upd);
         upddata[2]+=IHX_DATA_SIZE;
         if(!upddata[2])
            upddata[1]++;
      }
      pgheader[IHX_PAGELINE_SIZE-2]++;
      appsptr=appsbuffer+ipage*PAGE_SIZE;
      appsize=(appsize<PAGE_SIZE)?0:appsize-PAGE_SIZE;
      printf("\n");
   }
   return 0;
}


Et le fichier secondaire pour aider à la lecture des noms/versions/tailles des applications, écrits au format TI-Cerficate :
Code: Tout sélectionner
#include "stdlib.h"
#include "stdio.h"
#include "string.h"
#define TYPE_SIZE 9

unsigned char getbyte(char** p) {
   int byte = *(*p);
   *p=(*p)+1;
   return byte;
}

unsigned short gethalfword(char** p) {
   unsigned char hi = getbyte(p);
   return hi << 8 | getbyte(p);
}

unsigned int getword(char** p) {
   unsigned short hi = gethalfword(p);
   return hi << 16 | gethalfword(p);
}

int isValidField(int field) {
   return field>=0x8000 && field<0x9000 || field>=0x0200 && field<0x0400;
}

unsigned int getSize(unsigned int size,char** pp) {
   size = size & 0x000F;
   if (size == 0x0D)      size = getbyte(pp);
   else if (size == 0x0E) size = gethalfword(pp);
   else if (size == 0x0F) size = getword(pp);
   return size;
}

int getFieldData(char* buf, int cfield, int num, int dsize, char** pptr, char** fptr)
{   char* p = buf;
   unsigned int size=0;
   int inum=0;
   char* cfptr;
   while (p-buf<dsize) {
      cfptr=p;
      unsigned short field = gethalfword(&p);
      if(p-buf>dsize) break;
      size = field & 0x000F;
      field &= 0xFFF0;
      if (size == 0x0D)      size = getbyte(&p);
      else if (size == 0x0E) size = gethalfword(&p);
      else if (size == 0x0F) size = getword(&p);
      if (field == cfield) {
         inum++;
         if(!num || inum==num)
         {
            if(pptr) *pptr=p;
            if(fptr) *fptr=cfptr;
            return (p-buf+size<=dsize)?size:0;
         }
      } else if(!isValidField(field)) {
         break;
      }
      p+=size;
   }
   return 0;
}

int getFieldDataSize(char* buf, int cfield, int num, int dsize)
{   return getFieldData(buf,cfield,num,dsize,0,0);
}

int getFieldDataPtr(char* buf, int cfield, int num, int dsize)
{   char* ptr=0;
   getFieldData(buf,cfield,num,dsize,&ptr,0);
   return ptr;
}

void copyFieldData(char* buf, int cfield, int num, int dsize, char* outbuf, int bufsize) {
   unsigned int size=getFieldDataSize(buf,cfield,num,dsize);
   if(size>0) {
      char* data=getFieldDataPtr(buf,cfield,num,dsize);
      if(size>bufsize) size=bufsize;
      memcpy(outbuf,data,size);
   }
}

int getTotalFieldsSize(char* buf, int dsize) {
   char* p = buf;
   char* lastp = p;
   while (p-buf<dsize) {
      unsigned short field = gethalfword(&p);
      unsigned short cfield = field & 0xFFF0;
      if((field!=0xFFF0 && !isValidField(field)) || (cfield==0x8000 && p-buf>2)) {
         p-=2;
         break;
      }
      if(p-buf>dsize) return 0;
      unsigned int size=getSize(field,&p);
      p+=size;
      lastp=p;
      if(p-buf>dsize) return 0;
      if(cfield==0xFFF0)
         break;
   }
   return lastp-buf;
}


Une liste des ID de champs TI-Cerficate utilisés par TI est par ici :
http://wikiti.brandonw.net/index.php?ti ... _By_Number

En gros pour une application :
  • champ 0x800?
    • champ 0x801? : ID clé de signature
    • champ 0x802? : numéro de version majeur
    • champ 0x803? : numéro de version mineur
    • champ 0x804? : nom de l'application
    • champ 0x808? : nombre de pages mémoire utilisées
    • champ 0x809? : active/désactive l'écran splash Texas Instruments
    • ...
  • champ 0x020? : signature
Le ? à chaque fois donne une indication de taille du champ :
  • 0x0F : taille codée sur les 4 octets suivants
  • 0x0E : taille codée sur les 2 octets suivants
  • 0x0D : taille codée sur l'octet suivant
  • 0x00-0x0C : taille directe, pour les petits champs donc
Image
Avatar de l’utilisateur
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Prochain niv.: 41.8%
 
Messages: 41468
Images: 14480
Inscription: 25 Oct 2008, 00:00
Localisation: Montpellier
Genre: Homme
Calculatrice(s):
MyCalcs profile
YouTube: critor3000
Twitter/X: critor2000
GitHub: critor

Re: Pack outils ROM/OS/Apps compatibles 82 Advanced et 84 Pl

Message non lude critor » 28 Sep 2016, 23:30

Maintenant, l'outil rom2xxk précise dans les noms de fichiers d'apps créés si il n'y a pas de signature :
Code: Tout sélectionner
$ ls -l *\ *.8xk
-rw----r-- 1 Xavier Xavier 108633 29 sept. 00:26 CSheetFr 1.1.8xk
-rw----r-- 1 Xavier Xavier  37297 29 sept. 00:26 Fran?ais 1.1 (unsigned).8xk
-rw----r-- 1 Xavier Xavier  50404 29 sept. 00:26 Inequalz 1.3.8xk
-rw----r-- 1 Xavier Xavier  57796 29 sept. 00:26 PlySmlt2 1.1.8xk
-rw----r-- 1 Xavier Xavier  77970 29 sept. 00:26 Prob Sim 1.1.8xk
-rw----r-- 1 Xavier Xavier  39530 29 sept. 00:26 P?riod?? 1.1.8xk


Certes un détail pour la TI-82 Advanced.
Mais quand j'en serai à extraire les apps de la ROM TI-84 Plus T qui contient 6 apps de langue préchargées, ce ne sera plus une simple petite exception isolée... ;)
Image
Avatar de l’utilisateur
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Prochain niv.: 41.8%
 
Messages: 41468
Images: 14480
Inscription: 25 Oct 2008, 00:00
Localisation: Montpellier
Genre: Homme
Calculatrice(s):
MyCalcs profile
YouTube: critor3000
Twitter/X: critor2000
GitHub: critor

Re: Pack outils ROM/OS/Apps compatibles 82 Advanced et 84 Pl

Message non lude critor » 06 Oct 2016, 17:28

Présentation ce soir du 2ème des 3 outils, rom2xxu.

Il s'agit à partir d'une image ROM de regénérer un fichier d'installation d'OS.

Par exemple, à partir du dump de ma TI-82 Advanced DVT en version 5.0.0.0014, j'ai pu regénérer le fichier d'installation de l'OS 5.0.0.0014.
Il serait donc maintenant possible de downgrade toutes les TI-82 Advanced de production venant avec un OS 5.0.0.0028 qui plante dans le menu caractères, vers l'OS 5.0.0.0014 qui ne plante pas ! :bj:
Code: Tout sélectionner
Xavier@Xavier-X550C ~/projects/romto8xu
$ ./rom2xxu ti82a-5.0.0.0014_boot5.0.0.0014.rom ti82a-5.0.0.0014.82u -tid 0B

+----------+
! ROMto8XU !
+----------+
X. Andreani

Reading ROM ti82a-5.0.0.0014_boot5.0.0.0014.rom ...
- size ...      1024Kio (0x40 pages)
- date ...      10/06/2016
- version ...   5.14

Writing UPD ti82a-5.0.0.0014.82u ...
Target model :
- ID ...        0x0B
- name ...      TI-82 Advanced
Processing zone 1 : pages 00-07[08] // OS part #1
- page 00 -> 00
- page 01 -> 01
- page 02 -> 02
- page 03 -> 03
- page 04 -> 04
- page 05 -> 05
- page 06 -> 06
- page 07 -> 07
Processing zone 2 : pages 1c-29[0e] // Applications
- page 1c -> 1c
- page 1d -> 1d
- page 1e -> 1e
- page 1f -> 1f
- page 20 -> 20
- page 21 -> 21
- page 22 -> 22
- page 23 -> 23
- page 24 -> 24
- page 25 -> 25
- page 26 -> 26
- page 27 -> 27
- page 28 -> 28
- page 29 -> 29
Processing zone 3 : pages 30-33[04] // Signature #2 (2048-bits)
- page 30 -> 30
- page 31 -> 31
- page 32 -> 32
- page 33 -> 33
Processing zone 4 : pages 34-3d[0a] // OS part #2
- page 34 -> 34
- page 35 -> 35
- page 36 -> 36
- page 37 -> 37
- page 38 -> 38
- page 39 -> 39
- page 3a -> 3a
- page 3b -> 3b
- page 3c -> 3c
- page 3d -> 3d
Processing zone 5 : pages 3a-3a[00] // Signature #1 (512-bits)
- page 3a

Xavier@Xavier-X550C ~/projects/romto8xu
$ ls -l ti82a*
-rw----r-- 1 Xavier Xavier 1420312  6 oct.  18:17 ti82a-5.0.0.0014.82u
-rwx---r-x 1 Xavier Xavier 1048576  1 sept.  2015 ti82a-5.0.0.0014_boot5.0.0.0014.rom
-rwx---r-x 1 Xavier Xavier 1420312 28 mai    2015 ti82a-5.0.0.0028.82u

Xavier@Xavier-X550C ~/projects/romto8xu
$

Et oui, il s'installe sans problème sur ma 82A ! :bj:
De façon générale, c'est utile quand on récupère des machines, prototypes ou autres, venant avec une version qui n'a pas été diffusée sur le site de TI.

Mais il est aussi possible dans une certaine limite, d'écrire un fichier de mise à jour ciblant un autre modèle que celui dont provient la ROM (pourvu qu'il soit compatible).

Les situations testées avec succès sont :
  • ROM 84+ -> fichier de mise à jour 83+
  • ROM 83+ -> fichier de mise à jour 84+
  • ROM 82A -> fichier de mise à jour 84+
ROM 84+T -> fichier de mise à jour 84+ marche probablement aussi, mais je n'ai pas encore de ROM de ce dernier modèle vu que la faille permettant l'exécution de code machine sur 82A a été corrigée sur 84+T.
Image
Avatar de l’utilisateur
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Prochain niv.: 41.8%
 
Messages: 41468
Images: 14480
Inscription: 25 Oct 2008, 00:00
Localisation: Montpellier
Genre: Homme
Calculatrice(s):
MyCalcs profile
YouTube: critor3000
Twitter/X: critor2000
GitHub: critor

En ligne

Re: Pack outils ROM/OS/Apps compatibles 82 Advanced et 84 Pl

Message non lude Epharius » 06 Oct 2016, 17:35

Super ! Il est fonctionnel (EDIT : je veux dire que n'importe qui peut l'utiliser) ou pas ? On a des indices sur la nature du troisième outil ? :p
Le projet Geometry Dash est terminé ! N'hésitez pas à aller jeter un coup d’œil au topic du projet ! Vous pouvez le télécharger ici.

Unis par la flèche sacrée de cupidon :favorite:
Image
Avatar de l’utilisateur
EphariusPremium
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Prochain niv.: 7%
 
Messages: 1107
Images: 4
Inscription: 08 Déc 2014, 17:38
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile
Classe: Ensimag
GitHub: MathisLav

PrécédenteSuivante

Retourner vers Actualités

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 16 invités

-
Rechercher
-
Social TI-Planet
-
Sujets à la une
Comparaisons des meilleurs prix pour acheter sa calculatrice !
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
Phi NumWorks jailbreak
123
-
Faire un don / Premium
Pour plus de concours, de lots, de tests, nous aider à payer le serveur et les domaines...
Faire un don
Découvrez les avantages d'un compte donateur !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partenaires et pub
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
1093 utilisateurs:
>1075 invités
>13 membres
>5 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Autres sites intéressants
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)