30

J'ai retrouvé un vieux cache-nez, ça devrait faire l'affaire.

Par contre Folco, t'aurais pu prévenir que ton exécutable était compressé, j'ai failli me casser une dent en mordant dedans 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

31

Erf grin
J'ignorais ^^

32

Folco: c'est ca que tu veux:

jBwL EWCl

? grin

(oui un CD pressé officiel qui a été vérifié avec un anti virus xD. Je l'ai recup pour gratuit il y a un moment, je pense qu'il a été dans une librarie, le bousin viens avec un bouquin bien épais...)
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.

33

Non mais je rêve, t'aurais pas pu le dire avant que je me casse la tête ? 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

34

Tant pis, maintenant que c'est commencé...

nS3i
(en rouge, les instructions patchées)

Ça marche. Enfin, du moins ça affiche des trucs. Je laisse Folco vérifier si les handles trouvés sont vraisemblables.
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

35

Je ne savais pas je viens de trouver ce topic tongue
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.

36

top

37

Tu ne le verrais pas tourner sur un windows recent par contre, ca sors du 32bit, l'installateur, Borland Oblige est.. 16bit #w00t#
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.

38

Les versions 64 bits de Windows sont capables de faire tourner certains des installeurs 16 bits les plus courants, donc ça vaut le coup d'essayer quand même.
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

39

Merci Zerosquare, je te dis ça après le taf love
Godzil je t'aime, ça tournerait parfaitement dans une VM Win7 ça grin

40

Zerosquare (./38) :
Les versions 64 bits de Windows sont capables de faire tourner certains des installeurs 16 bits les plus courants, donc ça vaut le coup d'essayer quand même.
Ah ?!
Je pensais que les exécutables win16 c'était fini depuis un moment... ? Il y a un truc spécial pour les installeurs ?

41

	clr.w	-(sp)
	ROMC	HeapDeref
	movea.l	a0,a2
	move.w	#1,-(sp)
	ROMC	HeapDeref
	movea.l	a0,a3
	move.w	#2,-(sp)
	ROMC	HeapDeref
	movea.l	a0,a4
	move.w	#3,-(sp)
	ROMC	HeapDeref
	movea.l	a0,a5
	move.w	#4,-(sp)
	ROMC	HeapDeref
	movea.l	a0,a6
	bra	*
Ca liste les adresses des handles 0-4 dans a2-a6
Les adresses sont :
#0 : FFFFFFFF
#1: 00003FD44
#2: 00423538
#3: 0008862
#4: 0008888
Donc ça colle pas avec ta sortie.
Truc marrant, ton handle #0 serait à l'adresse de l'écran.
Tous les autres seraient hors flash sur 89 standard (car au-delà de 2Mo)

Lionel Debroux a été invité sur ce sujet.
Une idée ? cheeky

42

Non ça c'est du 32bit et du 68000, je doute que Windows fasse tourner ça!
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.

43

Pen^2 (./40) :
Je pensais que les exécutables win16 c'était fini depuis un moment... ? Il y a un truc spécial pour les installeurs ?
Pas mal de softs ont continué à utiliser des installeurs 16 bits pendant un certain temps, parce que :
1) ça continuait à marcher tel quel, donc ils avaient la flemme de passer aux versions 32 bits des installeurs (et potentiellement de devoir racheter une licence)
2) ça permettait d'avoir un installeur universel qui fonctionnait aussi bien sur Windows 3.x que sur Windows 9x/NT (en installant soit la version 16 bits du soft, soit la version 32 bits, suivant l'OS utilisé).

Pour le grand-public ça fait longtemps que ce n'est plus un problème, mais dans les entreprises on trouvait encore des softs avec de vieux installeurs, en tout cas à l'époque de Windows Vista/7.
Quant à l'implémentation, je me souviens plus exactement, mais je pense qu'ils avaient intégré un interpréteur des formats de scripts d'installation les plus répandus.

Folco > t'es sûr de ton offset ? Les patches sont relativement simples, donc je ne vois pas trop où j'aurais pu me planter.
Sur ce, je vais dormir, je te laisse chercher cheeky

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

44

Ton add EDX,$441, il fait quoi exactement ?
En fait, il faut lire l'adresse à 0xC8 dans la RAM TI. De là, il faut lui ajouter 441*4, l'adresse ainsi obtenue étant l'adresse de la table.

Je m'explique :
 movea.l $C8,a0
lea 0(a0,441*4),a0 ; Maintenant a0[x] contient l'adresse du handle #x

45

Zerosquare (./43) :
Sur ce, je vais dormir, je te laisse chercher
mouarf grin

46

Bonne sieste grin

47

En effet, le screenshot de ./34 montre les vecteurs, et non les HANDLEs, dans la section Handles.

Moi aussi, je me serais davantage attendu à 0x441*4 qu'à 0x441, mais si c'est couplé à une lecture utilisant un scaling factor (cette extension au mode d'ea indexé existe aussi sur les 68020+), comme on en voit un dans l'instruction 40C1C8, 0x441 n'est pas un problème.

Dans le binaire d'origine, pourquoi cette écriture vers la pile et cette lecture depuis le même endroit de la pile en 40C1B5 & 40C1BB ? Pourquoi pas mov edx,eax à la place de la lecture ?

J'ai cherché C++Builder de mon côté, même s'il ne me semblait pas en avoir un. J'ai trouvé les CDs associés à Delphi 7 Education, dont même un Kylix, là où ils étaient censés être, mais non, pas de C++Builder ici.
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.

48

Les vecteurs, bien vu, avec SSP à $0.l...

ps -> la table des vecteurs est à $0 en RAM, c'est pas là que tu lis en fait ? Quelle est la valeur du pointeur qui fait la lecture ?

Folco (./41) :
Tous les autres seraient hors flash sur 89 standard (car au-delà de 2Mo)
Ah oué je sors des putaings de conneries aussi triso

49

En même temps les unités ne sont pas indiquées embarrassed

50

Folco, il raconte n'importe quoi embarrassed :
- il a oublié le $ devant 441 dans le post ./44
- il a oublié que le code de VTI définit HANDLE_TABLE comme ça : #define HANDLE_TABLE hw->getmem_dword(ROMTBL(0x2f)+0x11a), et qu'il faut donc tenir compte du 0x2F "en trop" pour corriger l'offset

Reste que même si j'essaie de lire les handles à la main avec l'explorateur mémoire de VTI, je n'obtiens pas la même table que lui :
- à l'adresse $C8, il y a la valeur $2290E6
- si j'ajoute $441 * 4, ça donne $22A1EA
- à cette adresse, j'ai $0000647E, $00221D5A, $00221D5A, $00221D5A...

Folco, t'as bien utilisé le PedroM TI-89 que tu as mis dans l'archive pour exécuter ton programme ?

Sinon pour répondre à Lionel, VTI est compilé en mode debug, c'est pas le seul endroit où le code généré est inefficace. D'ailleurs il reste même une partie des symboles de debug dans l'exécutable - évidemment, pas ceux de TDebugWnd::Update() (ç'aurait été trop facile !), mais suffisamment pour faciliter l'analyse du code quand même.
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

51

Zerosquare (./50) :
VTI est compilé en mode debug
Oo

52

Sur un programme d'une toolchain à destination de dev, ça ne me dérange pas plus que ça que ce soit compilé en mode debug, ça aide bien le responsable du dev.
Je distribue mes programmes compilés en mode debug à mes collègues, comme ça en cas de pb j'ai des billes : eux ne sont carrément pas dans l'info, je ne compte pas sur eux pour un test case minimaliste ou une procédure systématique de reproduction du problème.

Zerosquare -> j'ai fait la connerie d'utiliser un PedroM différent, parce que j'utilise une version patchée (et sur 92+ tant qu'à faire).
Je refais un petit programme de test dont je poste le code ici, avec la version 89 de PedroM.

53

Bon, plusieurs éléments : un nouveau ZIP pour ne plus s'y perdre : http://www.mirari.fr/YZ6l

Le contenu est minimaliste :
build.sh
PedroM-89.tib
test.89z
test.asm
tios.h
Vti.exe
Même pas de skin grin

Le programme de test :
	xdef	_ti89
	xdef	_main
	
	include "tios.h"
	
_main:
	suba.l	a0,a0		; Handle in a0
	trap	#3		; Deref it
	movea.l	a0,a2		; Save it
	
	movea.l	#1,a0
	trap	#3
	movea.l	a0,a3
		
	movea.l	#2,a0
	trap	#3
	movea.l	a0,a4
		
	movea.l	#3,a0
	trap	#3
	movea.l	a0,a5
		
	movea.l	#4,a0
	trap	#3
	movea.l	a0,a6
	
	bra	*
	rts
Sous PedroM, le trap #3 déréférence le handle contenu dans a0.w, et renvoie son adresse dans a0.l (feature géniale de PedroM BTW).

Et les résultats de l'exécution :
#0 $FFFFFFFF
#1 $0003FD44
#2 $00223564
#3 $00008482
#4 $000084A8
Donc on a un handle fictif, un en mémoire haute, un en flash et deux en mémoire basse.
J'obtiens ça avec la ROM fraichement bootée, uniquement le programme de test envoyé, aucun autre programme ou commande exécuté.

Merci encore pour ton boulot cheeky

54

OK. J'ai bien les mêmes valeurs que toi dans le débogueur de VTI.

Mais j'ai compris le problème : le code que tu as posté dans le post ./44 n'est pas correct. Il ne renvoie pas un pointeur sur le début de la table des handles, mais un pointeur sur ce pointeur. En d'autres termes, le lea devrait être un move.

Bon du coup, ça va demander un patch un peu plus complexe. Je vais y réfléchir.
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

55

Ayé, ça fonctionne comme il faut :
nVQE

Par contre, comme l'exécutable est compressé, je ne peux pas patcher directement le code dedans. Il faut que je trouve un moyen de le patcher à chaud après décompression, si possible sans changer la taille sur le disque (pour pas avoir à modifier plein de trucs pour compenser).
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

56

Félicitations ! \o/
Je ne connaissais pas la notion d'exécutable compressé sur PC !!
C'est pas possible de le garder décompressé, tout simplement ?

Et un grand merci ! top

bon par contre, tous ces NOP, c'est pas très économique pour cette pauvre planète embarrassed

57

Folco (./56) :
C'est pas possible de le garder décompressé, tout simplement ?
Il n'y a pas de décompresseur officiel pour le compresseur utilisé (ASPack). Il y a des outils non officiels qui le font, mais c'est le genre de machins qui se trouvent sur des sites de cracks russes, donc j'ai moyennement confiance. Sinon on peut le faire à la main aussi, en reconstruisant un exécutable correspondant à l'état de la mémoire du processus après décompression, mais c'est assez pénible (il y a plusieurs sections différentes à reconstruire).

Et puis, c'est plus élégant que l'exécutable patché ne soit pas plus gros que l'original smile

(et si de simples NOP te hérissent le poil, ne regarde jamais les sources de VTI, et encore moins ce qui sort du compilo, parce que tu vas faire une crise d'apoplexie.)

Rien à voir : l'algo de récupération des handles est le même pour la TI92 ? Ou il y a des trucs à changer ?
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

58

92 ou 92+ ?
92+ je ne vois pas de raison qu'il y ait une différence.
Par contre 92 je n'en sais rien, mais je ne vois pas pourquoi l'algo aurait cassé, vu que la plateforme n'a pas changé au niveau SW ou HW.

59

Zerosquare (./55) :
Il faut que je trouve un moyen de le patcher à chaud après décompression, si possible sans changer la taille sur le disque (pour pas avoir à modifier plein de trucs pour compenser).
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 ?

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.