
Ça permettra peut-être d'ouvrir des pistes d'exploration pour voir comment tout ce petit foutoir marche. Du coup y'a un debuggeur qui fonctionne pour la 82A ou pas ? Ça serait pratique pour naviguer rapidement dans la mémoire.
$ ./rom2xxk.exe ./ti84plust_5.1.0.0029_boot1.00.rom
+---------+
| rom2xxk |
+---------+
TI-z80 ROM apps extractor
Reading ROM ./ti84plust_5.1.0.0029_boot1.00.rom ...
- size ... 2048Kio (0x80 pages)
Looking for apps in pages 0x69-0x0c
Page 0x69 : Deutsch▒ 1.1 (1 pages)
Page 0x68 : Espa▒ol▒ 1.1 (1 pages)
Page 0x67 : Fran▒ais 1.1 (1 pages)
Page 0x66 : Nederlan 1.1 (1 pages)
Page 0x65 : Portug▒▒ 1.1 (1 pages)
Page 0x64 : Svenska▒ 1.1 (1 pages)
Page 0x63 : Inequalz 1.3 (2 pages)
Page 0x62 :
Page 0x61 : Conics▒▒ 1.1 (2 pages)
Page 0x60 :
Page 0x5f : PlySmlt2 1.1 (2 pages)
Page 0x5e :
Page 0x5d : CabriJr 1.1 (4 pages)
Page 0x5c :
Page 0x5b :
Page 0x5a :
Page 0x59 : CelSheet 1.1 (3 pages)
Page 0x58 :
Page 0x57 :
Page 0x56 : EasyData 1.1 (4 pages)
Page 0x55 :
Page 0x54 :
Page 0x53 :
Page 0x52 : Periodic 1.1 (1 pages)
Page 0x51 : Prob Sim 1.1 (2 pages)
Page 0x50 :
Page 0x4f : SciTools 1.1 (2 pages)
Page 0x4e :
Page 0x4d : Transfrm 1.3 (1 pages)
Page 0x4c : no more apps
$ ls -l *.8xk
ls: impossible de comparer les noms de fichier « Svenska\200 1.1.8xk » et « Transfrm 1.3.8xk »: Invalid or incomplete multibyte or wide character
-rw----r-- 1 Xavier Xavier 149460 20 nov. 14:40 CabriJr 1.1.8xk
-rw----r-- 1 Xavier Xavier 108402 20 nov. 14:40 CelSheet 1.1.8xk
-rw----r-- 1 Xavier Xavier 49711 20 nov. 14:40 Conics?? 1.1.8xk
-rw----r-- 1 Xavier Xavier 34987 20 nov. 14:40 Deutsch? 1.1.8xk
-rw----r-- 1 Xavier Xavier 156236 20 nov. 14:40 EasyData 1.1.8xk
-rw----r-- 1 Xavier Xavier 37220 20 nov. 14:40 Espa?ol? 1.1.8xk
-rw----r-- 1 Xavier Xavier 37451 20 nov. 14:40 Fran?ais 1.1.8xk
-rw----r-- 1 Xavier Xavier 50404 20 nov. 14:40 Inequalz 1.3.8xk
-rw----r-- 1 Xavier Xavier 35064 20 nov. 14:40 Nederlan 1.1.8xk
-rw----r-- 1 Xavier Xavier 39145 20 nov. 14:40 Periodic 1.1.8xk
-rw----r-- 1 Xavier Xavier 57796 20 nov. 14:40 PlySmlt2 1.1.8xk
-rw----r-- 1 Xavier Xavier 37143 20 nov. 14:40 Portug?? 1.1.8xk
-rw----r-- 1 Xavier Xavier 77970 20 nov. 14:40 Prob Sim 1.1.8xk
-rw----r-- 1 Xavier Xavier 55024 20 nov. 14:40 SciTools 1.1.8xk
-rw----r-- 1 Xavier Xavier 37913 20 nov. 14:40 Svenska? 1.1.8xk
-rw----r-- 1 Xavier Xavier 31368 20 nov. 14:40 Transfrm 1.3.8xk
Mon profil TI-Planet | Devenez premium ! |
![]() | |
Modérateur de TI-Planet.org depuis décembre 2015, et membre de la communauté depuis Mai 2015. | Cliquez ci-dessus pour faire un don à TI-Planet.org via PayPal et devenir Donateur ou Premium (à partir de 3€) ! Vous aurez accès à des générations illimitées et prioritaires avec Mviewer GX Creator, ainsi qu'au forum secret ! ![]() ![]() |
// romto8xu.cpp : définit le point d'entrée pour l'application console.
//
// 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"
#define DATE_SIZE 8
#define NZONES 5
#define NMODELS 6
#define NUPDS 5
#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};
char* imodel_name[NMODELS] ={"TI-73", "TI-83 Plus", "TI-84 Plus", "TI-82 Advanced", "TI-84 Plus T", "TI-84 Plus C Silver Edition"};
uint8_t imodel_upd[NMODELS] ={0, 0, 1, 2, 3, 4};
uint8_t imodel_hwrev[NMODELS] ={0, 1, 3, 3, 3, 5};
uint8_t imodel_type[NMODELS] ={0x74, 0x73, 0x73, 0x73, 0x73, 0x73};
uint8_t imodel_irom_minpgsize[NMODELS]={0, 0, 0, 1, 2, 3};
uint8_t imodel_irom_maxpgsize[NMODELS]={2, 2, 2, 1, 2, 3};
uint8_t imodel_irom_defpgsize[NMODELS]={0, 0, 1, 1, 2, 3};
#define NROMS 4
#define PAGE_SIZE 0x4000
#define MAXPAGES 0x100 // 4MB
#define VALID_OFFSET 0x56
uint32_t irom_pgsize[NROMS]={MAXPAGES/8, MAXPAGES/4, MAXPAGES/2, MAXPAGES};
char* izone_name[NZONES]={"OS part #1", "Applications", "Signature #2 (2048-bits)", "OS part #2", "Signature #1 (512-bits)"};
// 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
};
uint32_t iupd_izone_pgoffset[NUPDS][NZONES]={
{0, -1, -1, 0x18, -1}, // TI-73 / TI-83 Plus
{0, -1, 0x10, 0x14, -1}, // TI-84 Plus
{0, 0x2A, 0x30, 0x34, -1}, // TI-82 Advanced
{0, 0x6A, 0x70, 0x74, -1}, // TI-84 Plus T
{0, -1, 0xE4, 0xE8, -1} // TI-84 Plus C Silver Edition
};
uint32_t iupd_izone_pgsize[NUPDS][NZONES]={
{8, 0, 0, 0x06, 0}, // TI-73 / TI-83 Plus
{8, 0, 4, 0x0A, 0}, // TI-84 Plus
{8, 0x0E, 4, 0x0A, 0}, // TI-82 Advanced
{8, 0x1E, 4, 0x0A, 0}, // TI-84 Plus T
{8, 0, 4, 0x0D, 0} // TI-84 Plus C Silver Edition
};
char rombuffer[MAXPAGES*PAGE_SIZE];
#define BUFFER_SIZE (2*(IHX_DATALINE_SIZE+1)+1)
int main(int argc, char* argv[])
{ char* hexa="0123456789ABCDEF";
int mode=0, tromsize=0;
int c,h=0,page=0, i, j, k;
FILE* rom;
FILE* upd;
uint8_t t;
uint8_t irom=0;
uint8_t imodel=0;
uint8_t idmodel=0;
uint8_t iupd;
uint32_t izone,ipage;
printf("+---------+\n");
printf("! xxu2rom !\n");
printf("+---------+\n");
printf(" X. Andreani\n\n");
char* rompath=0;
char* updpath=0;
for(i=1;i<argc;i++) {
if(!strcmp(argv[i],"-size "))
i++;
if(i<argc)
tromsize=strtol(argv[i],NULL,10)*1024;
if(!updpath)
updpath=argv[i];
else if(!rompath)
rompath=argv[i];
}
if( !rompath || !updpath)
{ printf("ERROR: missing or bad arguments\n");
printf("Usage: %s source.??u dest.rom [-size]\n", argv[0]);
printf("-size : target ROM size in KB (valid values : 512, 1024, 2048, 4096)\n");
return 0;
}
upd=fopen(updpath,"rb");
if(!upd)
{ printf("UPD file open error\n");
return 0;
}
memset(rombuffer,0xFF,MAXPAGES*PAGE_SIZE);
rom=fopen(rompath,"rb");
if(rom) {
uint32_t size;
fseek(rom,0,SEEK_END);
size=ftell(rom);
if(!tromsize)
tromsize=size;
fseek(rom,0,SEEK_SET);
fread(rombuffer,1,size,rom);
fclose(rom);
}
while(irom_pgsize[irom]*PAGE_SIZE<tromsize && irom<NROMS-1)
irom++;
rom=fopen(rompath,"r+");
if(!rom)
{ rom=fopen(rompath,"w+");
if(!rom) {
printf("ROM file open error\n");
fclose(upd);
return 0;
}
}
fseek(upd,0x4E,SEEK_SET);
uint8_t updhead[IHX_DATALINE_SIZE];
uint8_t updhead2[IHX_DATALINE_SIZE];
memset(updhead2,0xFF,IHX_DATALINE_SIZE);
char buffer[2*IHX_DATALINE_SIZE+3];
int8_t curpage=-1;
uint16_t delta=0;
while(!feof(upd)) {
fscanf(upd,":");
fgets(buffer,BUFFER_SIZE,upd);
uint8_t n;
sscanf(buffer,"%02hhX",&n);
for(i=0;i<n+IHX_DATALINE_HEADSIZE;i++)
sscanf(buffer+2*i,"%02hhX",&(updhead[i]));
n=updhead[0];
uint16_t pgoffs=((updhead[1]&((1<<6)-1))<<8)|updhead[2];
pgoffs+=delta;
if(n==2 && !pgoffs) {
curpage=updhead[IHX_DATALINE_HEADSIZE+1];
printf("update page %02x",curpage);
for(i=NZONES-1;i>0;i--)
if(curpage>=iupd_izone_pgoffset[imodel_upd[imodel]][i])
break;
curpage=curpage+irom_izone_pgoffset[irom][i]-iupd_izone_pgoffset[imodel_upd[imodel]][i];
printf(" -> ROM page %02x\n",curpage);
}
else if(curpage<0 && n) {
uint32_t datasize = IHX_DATALINE_SIZE-IHX_DATALINE_HEADSIZE;
uint8_t* ptr8000=getFieldDataPtr(updhead+IHX_DATALINE_HEADSIZE,0x8000,1,datasize);
uint8_t* ptr=getFieldDataPtr(ptr8000,0x8010,1,datasize);
idmodel=*ptr;
imodel=0;
while(imodel<NMODELS && imodel_id[imodel]!=idmodel)
imodel++;
if(imodel>=NMODELS) {
printf("ERROR: unknown target model\n");
break;
}
printf("Target model :\n"),
printf("- ID ... \t0x%02X\n",idmodel);
printf("- name ... \t%s\n",imodel_name[imodel]);
if(!tromsize)
irom=imodel_irom_defpgsize[imodel];
printf("- ROM ... \t%dKB\n",irom_pgsize[irom]*PAGE_SIZE/1024);
memcpy(updhead2,updhead,IHX_DATALINE_SIZE);
}
else if(curpage>=0 && n) {
// printf("write page %x offset %x = %x\n",curpage,pgoffs,curpage*PAGE_SIZE+pgoffs);
memcpy(rombuffer+curpage*PAGE_SIZE+pgoffs,updhead+IHX_DATALINE_HEADSIZE,n);
}
else if(curpage>0 && !n && !delta) { // RSA 512-bits signature special case
curpage=irom_izone_pgoffset[irom][NZONES-1];
printf("update page sig1 -> ROM page %x\n",curpage);
memcpy(rombuffer+curpage*PAGE_SIZE,updhead2+IHX_DATALINE_HEADSIZE,updhead2[0]);
delta=0x100-2;
}
}
if(imodel<NMODELS) {
rombuffer[VALID_OFFSET]=0x5A;
rombuffer[irom_izone_pgoffset[irom][NZONES-1]*PAGE_SIZE+0x100-2]=0xFF;
rombuffer[irom_izone_pgoffset[irom][NZONES-1]*PAGE_SIZE+0x100-1]=0xFF;
int r=fwrite(rombuffer,1,irom_pgsize[irom]*PAGE_SIZE,rom);
}
fclose(upd);
return 0;
}
Users browsing this forum: ClaudeBot [spider] and 4 guests