60

Oh, le hack d'origine est probablement venu du monde de la 92.

AMS a pas mal changé entre les 92 d'origines et les premiere 89 et 92+
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

61

Je vais tester, on verra bien.

Pen^2 (./59) :
Tu ne peux pas faire un jsr sur un bout de code qui s'occupe de faire le patch, ajouté à la fin de l'exe compressé, puis un rts pour démarrer la version décompressée ?
Si, mais le souci est de trouver une zone inutilisée qu'on peut écraser, parce que le format d'exécutable est assez complexe et changer la taille n'est pas trivial. Mais j'ai une solution qui devrait marcher, même si elle est un peu crade.
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

62

Normalement tu dois pouvoir ajouter des octets à la fin de vti.exe, peu importe la taille originale, non ?

63

Non pas forcement, tout va dependre de comment est decompressé le truc.
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

64

Et surtout, ce n'est pas parce que tu ajoutes des octets à la fin du fichier qu'ils seront chargés en mémoire smile
Un fichier EXE n'est pas une simple copie du code. Il est divisé en plusieurs sections (code, données, ressources, relogements...), et les caractéristiques de ces sections (y compris leur taille et leur position en mémoire) sont stockées dans le fichier lui-même. Il me semble que s'il y a des octets en trop à la fin, le chargeur va simplement les ignorer.

Sinon, comme les NOP chagrinaient Folco, voici un patch qui n'en utilise pas :
nKiI
Accessoirement, ça réduit le nombre d'octets à patcher, donc la taille du code qui va le faire, ce qui le rend plus facile à caser ^^
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

65

J'aurais plutot fait l'inverse: ajouter PLEIN de NOPs!
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

66

Mdr Zerosquare grin
Joli boulot en tout cas ^^

67

Râh, cette saleté de compresseur utilise du code automodifiant qui vient taper pile-poil là où je voulais mettre l'appel de mon patcheur. Va falloir être plus subtil...
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

68

He he he he he

Mais ca reste mal..
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

69

Bon travail smile
Tant que tu en es à changer le code: à 40C14A et 40C151, $800 devrait être $7D0, cf. ./12 et HEAP_MAX_SIZE de
debrouxl/tiemuGitHubTIEmu is an emulator of Texas Instruments hand-helds (89/89T/92/92+/V200) for Linux & Windows, written with GTK+. Features include highly accurate emulation and a graphical debugger. - debroux...
.

Le patch ne s'occupe que d'AMS 2.xx ou PedroM récent, on dirait. La méthode portable de détermination de l'adresse du tas utilisée par TIEmu, linkée en ./12, est plus complexe. Ca tombe bien, il y a plein d'octets à récupérer avec ce code inefficace car compilé en debug ^^
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.

70

Zerosquare (./64) :
Et surtout, ce n'est pas parce que tu ajoutes des octets à la fin du fichier qu'ils seront chargés en mémoire
Ah oui, tiens.
J'avais déjà utilisé la technique d'ajouter des données à la fin de l'exe mais justement, il s'agissait juste des données cheeky

71

Après tu peux ouvrir l'exe pour récupérer les octets, mais il faut ensuite les charger en mémoire, probablement faire du SMC, ce qui dans un système récent est pas très recommandé, voir impossible..

Sinon, l'installateur du C++Builder que j'ai utilise une version de InstallShield, et non windows ne gere pas le bootstrap 16bit.
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

72

Godzil (./71) :
Après tu peux ouvrir l'exe pour récupérer les octets
Oué mais pour ça faudrait injecter du code quelque part, donc... grin

73

Hehe


Je sais pas comment des gens on pu utiliser et aimer Borland C++ builder, ce machin est confusant au possible, et le projet VTI semble avoir été fait avec BCB++ 3, je n'arrive pas a compiler avec la version 6, et VTI a du code ASM écrit a la main, c'est une blague?


@asm_86_readmem_word proc near cmp ax,4000h jb a86rmw_rom0 cmp ax,8000h jb a86rmw_pageA cmp ax,0c000h jb a86rmw_pageB and eax,03fffh add eax,_ram mov ax,word ptr [eax] bswap eax shr eax,16 ret
Et ce fichier ne semble pas être assemblé:

zySc
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

74

Question con, ça serait pas possible d'ourir le source avec un autres éditeur et de recompiler, même s'il y aurait des choses à adapter ?
Je ne sais pas si C++ Builder est un framework complet ou un simple compilateur, et comment il a été utilisé pour VTI.

75

C++ Builder, Borland oblige est plus qu'un simple compilateur. Il faudrait aussi convertir la GUI et le code lié a la GUI.

Ce n'est pas impossible, mais pas simple non plus.
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

76

Ok, pas impossible mais certainement très compliqué alors.
Merci bien. smile

77

C'est un peu comme convertire du GTK vers du Qt ou l'inverse!
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

78

Ok, tout le code de l'UI à reprendre quoi, pas une mince affaire.
Bon ben finalement, un patch binaire c'est peut-être le mieux en effet, un grand merci à Zerosquare de s'y être collé encore une fois ! top

79

Hmmm pas que le code de la GUI, plein d'autre trucs assez crade comme reinvention du setjmp/longjmp, utilisation de code assembler pour des raisons probablement douteuses, et j'en passe.

Je n'ose imaginer le type hell (aka pas compilable en 64bit tel que)
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

80

J'ai regardé tout à l'heure, il y a plein de dfm (les fichiers d'interfaces) qui semblent être des binaires.
Donc un peu pénible, oué.

81

Godzil (./79) :
(aka pas compilable en 64bit tel que)
À la rigueur osef du 64 bits pour ce que c'est cheeky

82

Sur un OS moderne tu veux compiler en 64bit, et ca permet de supprimer des bugs.

Et genre tant qu'a refaire l'interface, tu veux pouvoir le faire trouner sous Linux, si ton Lirnux est 64bit(e) tu n'as pas le choix.
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

83

Godzil (./82) :
Sur un OS moderne tu veux compiler en 64bit
Certes mais si c'est un enfer et qu'en l'occurrence ça n'apporte rien... Mais si tu es motivé, je préfère aussi grin
et ca permet de supprimer des bugs.
Mmm ?

Godzil (./82) :
tu veux pouvoir le faire trouner sous Linux
S'il avait été écrit en JAVA on n'aurait pas été ennuyé embarrassed

Godzil (./82) :
si ton Lirnux est 64bit(e) tu n'as pas le choix.
... quel os inférieur embarrassed

84

Godzil > regarde la gueule des sources de VTI, avant de dire que tu veux compiler ça en 64 bits tongue
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

85

A mon avis c'est pour ça qu'il dit que porter le code vers une compatibilité 64 bits, ça supprime des bugs, parce que ça supprime des hacks qui pèteront sur une archi 64b.

86

Zéro: je viens d’y passer une heure pour essayer de compiler le bousin donc je les ai vu les sources!

Pen^2 (./83) :
et ca permet de supprimer des bugs.
Mmm ?

[quote]Folco (./85) :
A mon avis c'est pour ça qu'il dit que porter le code vers une compatibilité 64 bits, ça supprime des bugs, parce que ça supprime des hacks qui pèteront sur une archi 64b.

Oui Folco a raison, sur pas mal de code que j'ai vu non compiler en 64bit, ou planter suite a une compilation en 64bit sont du a des bugs de codes ou assomptions qui sont invalide en dehors du monde du 32bit.
Et oui ca permet/force de virer des hacks moches pour pouvoir supporter proprement des archi/bitness different.

En l'occurence VTI n'est pas portable meme vers une autre archi 32bit si on en exclus la GUI


Edit: Ceci dit j'avoue ne pas avoir regardé en détail le code, et je crois qu'on tiens le gagnant en terme de coding style a gerber:

void op_e000(void) /* ASR */ { ULONG srcreg = imm8_table[((opcode >> 9) & 7)]; ULONG dstreg = opcode & 7; {{ ULONG cnt = srcreg; { BYTE data = regs.d[dstreg].D; { UBYTE val = data; ULONG cmask = 0x80; ULONG sign = cmask & val; cnt &= 63; CLEARFLGS; if (!cnt) { CFLG = 0; } else { if (cnt >= 8) { val = sign ? 0xff : 0; CFLG=regs.x= sign ? 1 : 0; } else { CFLG=regs.x=(val >> (cnt-1)) & 1; val >>= cnt; if (sign) val |= 0xff << (8 - cnt); }} regs.d[dstreg].B.l = val; NFLG = sign != 0; ZFLG = val == 0; }}}}}

Ca aussi c'est magnifique:

for (i=0;i<0x10000;i++) garbageMem[i]=0x14; MC68000_Reset(); regs.pc=initialPC; contrast=16; ram128=0; memprotect=0; kbmask=0xff; for (i=0;i<10;i++) kbmatrix[i]=0xff; ramWrap=0; memAnd=0x3ffff; onheld=1; lcdBase=0x4c00; for (i=0;i<6;i++) oldScreenBase[i]=lcdBase; timer=0; timerInit=0xb2; int0Count=0; transflag=0; recvflag=0; transnotready=0; lcdRefresh=0;
L'indentation qui est la juste pour tromper

Et F* maintenant j'ai presque envie de savoir a quel point VTI pourrait etre convertit pour se passer de C++Builder et avoir du code un poil plus propre (et virer ce code ASM stupide)


je reve pas ce truc utilise un version faite main de setjmp/longjmp pour gerere les addresses error o_O
Mais bordel ##facepalm## mur
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

87

J'ai vu aussi vu traîner une boucle infinie qui attend qu'une variable change d'état... sans appel à une quelconque fonction de synchro, entre autres. Et je me demande si ça n'a pas été compilé en debug juste parce qu'en release ça marche pas grin
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

88

Pourquoi on a pas de smiley atomic facepalm ici....


avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

89

Si tu veux un émulateur TI portable et pour Linux, ça vaut probablement plus le coup d'utiliser TIEmu que d'essayer de convertir un projet BCB (et des sources un peu fouillis) vers un framework moderne.

Pour info, j'avais essayé moi aussi de compiler avec le BCB (version 5) que j'ai sous la main, et j'ai eu les mêmes erreurs. Au lieu d'essayer de faire manger des sources assembleur à BCB, j'ai utilisé les fonctions "debug" de readmem/writemem (qui sont écrites en C) au lieu de leur équivalent asm, et j'ai viré deux autres trucs à cause d'autres fonctions que le compilateur n'arrivait pas à trouver.
Et aussi, j'ai eu le droit à je ne sais quelle erreur de TASM à cours de hash, donc je lui en ai rajouté une fournée (il y a une option pour ça, cachée dans un menu de réglages) et ça a compilé smile Par contre ça n'émulait plus rien du tout.

Entre temps, comme Zerosquare était en train de faire de la dentelle assembleur directement sur l'exécutable d'origine, j'ai préféré arrêter le massacre ici grin
avatar
Appartiens à l'Unification Ultime !

Exec "4e444e750000"

90

Voici VTI_Folco smile
http://www.mirari.fr/OBWA

Pour l'instant, ça ne gère que la 89, je rajouterai le support de la 92 après une pizza bien méritée embarrassed
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo