1

Bonjour,
hier j'ai installer PreOs 1.0.1 sur ma chère Ti89-Titanium .Lors de l'utilisation de l'explorateur avec Othello,
le nom de l'auteur étant trop grand, un bug apparait et la commentaire contenu dans l'executable "depasse" l'écran.
J'ai donc modifier les sources de PreOs :

Fichier libs/dklibs/brwslib/brwselib.asm ; Fonction InfoString :

brwselib@0003:
InfoString:
move.w #15,-(a7) ;
pea (a0) ; Recopie le nom mais tronqué à 15 caractères.
pea (a0) ;
jsr tios::strncpy ;

movem.l d0-d2/a0-a1,-(a7)
add.w #FDBOX_X1-1,d0 ; add window's left,top corner to coordinates
add.w #FDBOX_Y1-1,d1
; void DrawStrXY(WORD x,WORD y,BYTE;string,WORD color)
move.w d2,-(a7)
pea (a0)
move.w d1,-(a7)
move.w d0,-(a7)
jsr tios:grinrawStrXY
lea 10(a7),a7
movem.l (a7)+,d0-d2/a0-a1
rts


Comme vous pouvez la voir, j'ai utilisé une fonction stncpy. Cependant, Tiemu ne supportant pas PreOs() et comme ce code est vraiment bas niveau, je voulais savoir si cela était correct et si je pouvez envoyer ce nouvel PreOs en toute sécurité.
(La compilation n'indique rien d'anormal). Merci.

2

Les chaînes dst et src ne doivent pas avoir une zone mémoire commune

Donc ton code n'est pas valide.
Cependant, il te suffit pour arrivr à faire ce dont tu as envie, de mettre 0 au quinzième caractère de la chaine, si celle-ci est fait plus de 15 caractères.
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

3

Et SEULEMENT si elle fait plus de 15 caractères: sinon, tu mettras un \0 un peu n'importe où...
avatar
Maintenant j'ai la flemme de garder une signature à jour sur ce site. Je n'ai même plus ma chaîne Exec sous la main.

4

> Cependant, Tiemu ne supportant pas PreOs() et comme ce code est vraiment bas niveau, je voulais savoir si cela était correct et si je pouvez envoyer ce nouvel PreOs en toute sécurité.
Surprenant. Qulle version utilises-tu ? A reporter à Romain Liévin (roms) ou Kevin Kofler, par mail.
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.

5

t13b0>
* il faut dépiler les arguments que tu as empilés, donc ici avec lea 10(a7),a7 (tu as empilé 10 octets) ; et je ne sais pas si c'est grave, mais tu appelles ta fonction avant le movem, ce qui fait que d0-d2/a0-a1 sont désormais détruits par InfoString, ce qui n'était pas le cas avant...
* strncpy n'attend pas un "long" pour la longueur ? (et pas un "short")
* strncpy ne rajoute pas de 0 dans le cas où la chaîne fait 15 caractères ou plus : donc au final tu n'auras rien arrangé
* est-ce que la doc de brwselib t'autorise à modifer la chaîne en argument ? probablement pas, il faudrait plutôt que tu crées un buffer sur la pile pour stocker la nouvelle chaîne...

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

6

Merci pour vos réponses.
Cependant, je viens juste de découvrir l'assembleur sous Ti.
Je voulais juste soulever un probleme et essayer de le resoudre; Je ne pense pas avoir assez d'experience
pour le résoudre moi-meme.

Pour répondre a lionel, j'utilise TiEmu II - Version 1.80-050419 (debian) et PreOS 1.0.1
Et pour Pollux: Merci pour ces explications mais tu ne pourrai pas donner du code smile ?


7

brwselib@0003:
InfoString:
	movem.l	d0-d2/a0-a1,-(a7)
	lea -16(a7),a7
	moveq #15-1,d0
	move.l a7,a1
\loop
	move.b (a0)+,(a1)+
	dbeq d0,\loop
	clr.b (a1)
	movem.l	16(a7),d0-d2/a0-a1
	move.l a7,a0
	add.w	#FDBOX_X1-1,d0				; add window's left,top corner to coordinates
	add.w	#FDBOX_Y1-1,d1
	; void DrawStrXY(WORD x,WORD y,BYTE;string,WORD color)
	move.w	d2,-(a7)
	pea	(a0)
	move.w	d1,-(a7)
	move.w	d0,-(a7)
	jsr	tios::DrawStrXY
	lea	10+16(a7),a7
	movem.l	(a7)+,d0-d2/a0-a1
	rts


En gros : j'alloue 16 octets sur la pile avec "lea -16(a7),a7", ensuite je recopie la chaîne (je m'arrête dès que je tombe sur un 0 ou que je dépasse 15 caractères) et je rajoute un 0 terminal (en fait si la chaîne de départ faisait moins de 15 caractères ça fait deux 0 terminaux, mais c'est pas grave puisque comme ça fait strictement moins de 15 caractères on ne débordera pas du buffer de 16 octets); ensuite je restaure les registres que j'ai détruits avec un movem, et je charge l'adresse de la nouvelle chaîne dans a0 (à la place de l'ancienne, donc).

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

8

Impeccable, je vais tester.
merci.

9

> Pour répondre a lionel, j'utilise TiEmu II - Version 1.80-050419 (debian)
Argh, version complètement dépassée... Il y a TIEmu 2.00 RC3, avec plus de features, plus stable, plus performante, depuis plus d'une semaine... Probable, mais pas sûr, qu'elle existe en package spécial Debian, car si Romain utilisait sid il y a un certain temps, Kevin est Fedora Core à fond.
> et PreOS 1.0.1
Version à jour.
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.

10


Surprenant. Qulle version utilises-tu ? A reporter à Romain Liévin (roms) ou Kevin Kofler, par mail.

Ben normalement toutes les versions marchent y compris avec la 1.80-050419 (debian)

/6: Oui mais sur 92+, il faut pouvoir afficher plus non ?

11

Kevin m'a ecrit :

>Bon, déjà pour la prochaine fois, merci de reporter les problèmes de TiEmu
>aux auteurs (Romain et moi) plutôt que dans un topic sur yN qui n'a a priori
>rien à voir.
>
>Et ensuite, PreOs marche très bien avec TiEmu si tu as installé le HW3Patch
>d'abord, comme sur la vraie machine. TiEmu émule une vraie TI, et cela
>comprend la protection anti-exécution.

J'essaye totu de suite.

12

J'ai essayé d'installer HW3Patch mais le seul résultat que j'obtiens est :
BUSY puis barre noir et reset.
Comme l'a dit Lionel, ca doit surement etre du a mon ancienne version de TiEmu.

13

Sur la mailing list de TIEmu, je vois qu'il y a des problèmes similaires dans la 2.00 RC3... Mais passe d'abord quand même à la 2.00 RC3 (c'est ce qu'ils te diront de toute façon de faire).
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.

14

Marrant. J'arrive pas a reprodiure ce bug...

15

A mais oui. Je suis bete. Sur PedroM, DrawStrSY s'arrete proprement et n'affiche pas n'importe quoi n'importe ou !
Va falloir que je teste sous AMS.