1

-

2

1) C'est parce que LCD_MEM = $4C00, alors que sscreen pointe vers l'adresse de ton écran virtuel.
2) Je ne sais pas (moi aussi, je débute), et j'aimerais bien savoir
3) Je ne sais pas non plus.
4) Il existe db92. Je crois qu'il y a une version 89.

3

Orion_ a écrit :
alors, d'abord, j'ai pris le tutorial de Kevin Kofler (Agent Double K wink)
et y'a quelque truc que je pige pas trop, d'abord, dans cette routine:

	pea.l	3840			; memcpy(sscreen,LCD_MEM,3840)
	pea.l	LCD_MEM
	move.l	sscreen,-(a7)
	call	memcpy


pourquoi on peu utiliser:
pea.l LCD_MEM

alors que: pea.l sscreen
ne marche po et qu'on est obliger de mettre: move.l sscreen,-(a7)
confus (sscreen contient l'ards qui pointe vers 3840 octets de mémoire reservé: sscreen dc.l 0)

Parce que LCD_MEM est un equate alors que sscreen est un label.
ensuite, dans cette routine:
	move.w	#4,-(a7)		; noir sur blanc
	pea.l	title1(pc)		; Texte
	; x=10 y=10
	move.l	#$000A000A,-(a7)
	call	DrawStr

pourquoi doit on mettre (pc) juste apres title1 ?

On ne "doit" pas, mais ça donne du code plus efficace.
PS: je suis tombé (sans me faire mal) sur un bug(?) de VTI(?) ou A68k(?)
ou, une erreur de programmation de ma part, je ne sais pas. (bon, ok, il etait tard (grin) mais quand même)
http://perso.wanadoo.fr/orionthebest/yn/bugasm.jpg

mulu.l n'existe pas. Ça s'appelle mulu.w et ça multiplie 2 words pour donner un longword. Si tu veux multiplier 2 longwords, voilà ce qu'il y a dans TIGCCLIB:
__mulsi3:
	move.l (4,%sp),%d1
	move.l (8,%sp),%d2
	move.l %d2,%d0
	mulu %d1,%d0
	swap %d2
	mulu %d1,%d2
	swap %d1
	mulu (10,%sp),%d1
	add.w %d1,%d2
	swap %d2
	clr.w %d2
	add.l %d2,%d0
	rts

je precise que la fonction est censé afficher un sprite 8x8, dont l'adresse est donnée
dans a0, avec pour coordonnée: D1=X/8 et D2=Y/8 pour faciliter la programmation, et d'ou le mulu.l #240,d3 (8 lignes * 30 octets)
alors ? c'est grave docteur ? smile

Oui, parce que mulu.l n'existe pas. grin
j'en profite pour demander si il existe un debugger asm pour TI, parceque
pour la programmation oncalc c quand même plus pratique.
je crois que j'en avait déja essayer un , (un port nostub de kevin)
mais que j'avait jamais compris comment m'en servir et que même avec l'exemple
fourni sa marchait po sad

Il n'y a que DB92 à ma connaissance. Va voir topics/15660-nouvelle-version-de-db92/7 pour la version la plus récente. C'est du _nostub.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

4

En ce qui concerne le pea sscreen, c'est logique, pea veut dire Push Effective Address donc quand tu fais pea sscreen, le processeur va mettre sur la pile l'adresse de sscreen, et non pas l'adresse contenue dans sscreen. En gros si tu avais appelé sscreen plus clairement adresse_ecran tu aurais tout de suite vu ton erreur, pea adresse_ecran voulant dire "mettre sur la pile l'adresse de adresse_ecran" au lieu de mets sur la pile adresse_ecran.

Pour le (pc) en fait c'est simple, au lieu de faire un adressage absolu on fait un adressage relatif, et si tu trouves des bonnes documentations sur la vitesse des instructions tu verras que l'adressage compte et que c'est plus lent en absolu. De plus, tu gagnes 4 octets en changeant un pea title1 en pea title1(pc).

Pour le débuggeur, DB92 marche très bien, et je le préfère même à VTI. Télécharge la dernière version et lis bien le readme. Tu verras. J'utilise aussi le débuggage symbolique de temps en temps dans certaines routines, enfin je connais pas sur pc mais sur TI ça marche bien. [nosmile]smile
avatar
;)

5

BiHi
a écrit : De plus, tu gagnes 4 octets en changeant un pea title1 en pea title1(pc).

6, pas 4. 2 dans l'instruction elle-même + 4 dans la table de relogements.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

6

Ok merci.
Ensuite tu ne pourrais pas m'indiquer de la documentation ou bien m'expliquer l'histoire de la table de relogements? Parce que je comprends bien que les adressages absolus ne peuvent fonctionner simplement car la place dans la RAM de l'exécutable peut être différente selon la calculatrice, etc. mais en pratique comment ça fonctionne?
avatar
;)

7

La table de relogements est une table à la fin du programme qui contient des paires d'entrées:
- 2 octets pour indiquer l'endroit où il faut une adresse absolue
- 2 octets pour indiquer l'endroit du programme vers lequel l'adresse doit pointer

Le ROM_CALL EX_patch calcule les adresses absolues à partir des 2 octets indiquant l'endroit de destination et les insère aux endroits indiqués par les 2 autres octets.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

8

Ce qui fait que le programme est légèrement "modifié" à l'éxécutionwhat
(le "patch" de EX_patch n'est pas là pour rien)
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.

9

Oui.

10

Ces octets sont situés où? A la fin du programme ça veut dire quoi? Avant le ASM_TAG?
Comment on peut trouver leur position?
L'endroit où il faut une valeur absolue et l'endroit vers laquelle l'adresse doit pointer sont comptés en relatif par rapport au début de la variable? On compte à partir de quel endroit précisement?
avatar
;)

11

BiHi
a écrit : Ces octets sont situés où? A la fin du programme ça veut dire quoi? Avant le ASM_TAG?

Oui.
Comment on peut trouver leur position? L'endroit où il faut une valeur absolue et l'endroit vers laquelle l'adresse doit pointer sont comptés en relatif par rapport au début de la variable? On compte à partir de quel endroit précisement?

Tu as besoin de tout cela pour quoi faire? Si c'est pour reloger un programme en assembleur, il suffit d'appeler EX_patch.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

12

... pour les progs nostub ...

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

13

En effet. Mais de toute façon, pour les programmes pour kernel, le format n'est pas du tout celui-là. Les programmes pour kernel sont beaucoup plus compliqués. Déjà, le relogement fait plein de trucs supplémentaires par rapport à ce qu'un relogement fait normalement (par exemple insérer des adresses absolues de ROM_CALLs, ce qui est totalement inutile vu que l'utilisation de la table en $c8 prend moins de place). Ensuite, pour gagner de la place, le relogement change des informations nécessaires pour reloger le programme, et il faut donc le déreloger après l'exécution avant de pouvoir le reloger à nouveau. Et enfin, la table de relogements des programmes pour kernel est dans le header, pas à la fin du programme.

Pour reloger un programme pour kernel, ce n'est pas la peine d'essayer de le faire toi-même (c'est beaucoup trop compliqué - presque tout le code d'un kernel est du code de relogement), il faut appeler une fonction exportée par le kernel. Voilà ce qu'il faut faire:
		;si pas de kernel ou reloc2/unreloc2 non supportés, refuse
		pea.l (a1)
		tst.l $3c
		beq IncompatibleKernel
		move.l $3c,a1
		cmp.w #$a352,(a1)
		beq IncompatibleKernel
		tst.l $44
		beq IncompatibleKernel
		move.l $44,a1
		cmp.w #$a352,(a1)
		beq IncompatibleKernel
		movea.l (a7)+,a1
 
		;reloge le programme
		movem.l d0-d7/a0-a6,-(a7)
; [Les 2 lignes suivantes mettent en a6 l'adresse du début du handle contenant le programme.]
		move.l a0,a6
		suba.l #$3fffe,a6
		move.l a6,DoorsUnrelocAddr
		move.l $3c,a0
		jsr (a0)
		movem.l (a7)+,d0-d7/a0-a6

Et pour le déreloger:
	move.l DoorsUnrelocAddr(PC),d0
	beq NoDoorsUnreloc
 
	;déreloge le programme
	move.l d0,a6
	move.l $44,a0
	jsr (a0)
 
NoDoorsUnreloc:

(C'est extrait des sources de DB92. C'est moi qui ai codé cet extrait-là.)
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

14

Kevin Kofler a écrit :
Tu as besoin de tout cela pour quoi faire? Si c'est pour reloger un programme en assembleur, il suffit d'appeler EX_patch.


Ben c'est pour savoir... Enfin si c'est interdit d'apprendre...roll
avatar
;)

15

Bon, si tu veux. Mais tu n'en auras jamais besoin à moins de vouloir programmer un linker ou un système d'exploitation pour calculatrices. smile
BiHi
a écrit : Comment on peut trouver leur position?

La table est en sens inverse, donc on commence par trouver la fin. On obtient donc un tout d'abord un pointeur vers le ASM_TAG (par exemple avec HToESI).
Elle s'arrête quand l'adresse relative d'un relogement est 0 (on ne peut donc pas mettre une adresse absolue à reloger tout au début d'un exécutable, mais ce n'est pas un problème parce que ce ne serait de toute façon pas une instruction "légale"). Dans ce cas, l'adresse de destination, qui normalement se trouve juste avant, est omise.
Et attention: la table peut aussi être à une adresse impaire! Ce n'est jamais le cas pour les exécutables créés avec TIGCC <= 0.94 (pour 0.95, ça pourraît l'être), mais pour AS de Nitro, par exemple, ça peut être le cas. Il faut donc lire la table octet par octet. AMS le fait.
L'endroit où il faut une valeur absolue et l'endroit vers laquelle l'adresse doit pointer sont comptés en relatif par rapport au début de la variable?

Oui.
On compte à partir de quel endroit précisement?

L'octet 0 est l'octet juste après les 2 octets de taille (les 2 octets de taille ne sont pas comptés).
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

16

> Ben c'est pour savoir... Enfin si c'est interdit d'apprendre...
Mais non...
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.

17

> Et attention: la table peut aussi être à une adresse impaire!
Je trouve ça débile smile On est pas à un octet près (surtout pour un prog nostub qui prend 8 octets par relocation grin)

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

18

Quel chipoteur grin
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

19

Pollux a écrit :
Je trouve ça débile smile

C'est prévu par AMS, donc c'est autorisé.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

20

excellente raison roll

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

21

Bien sûr que c'est une excellente raison !
Ceux qui ont programmé eux-mêmes, la relocation d'un programme, sans raison valable (ne pas utiliser un ROM_CALL qui est un peu lent, mais qui prend un temps faible par rapport au temps de chargement du programme, n'est pas une bonne raison...), en seront pour leurs frais.

Le fait d'avoir une table de relogement à une adresse impaire, va breaker tous les programmes mal écrits et donc buggés, et c'est tant mieux !
Il vaut mieux essayer d'écrire du code sûr. Les kernels et programmes kernel-based n'étaient vraiment pas sûrs quand AMS 2.xx est apparu, vu le nombre d'incompatibilités avec AMS 2.xx... Utilisation d'adresses absolues (notamment les RAM_CALLs de fonts...), de valeurs codées en dur alors qu'elles ont changé sous AMS 2.xx, et j'en passe...
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.

22

En tout cas, TIGCC 0.95 permettra d'avoir ses tables de relogement à des adresses impaires (avec GNU as seulement - le format AmigaOS ne permet pas les sections de taille non multiple de 4).
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

23

-

24

-

25

bien compris toutes tes explications, mais tu dis bien que sscreen contient l'adresse alors que tableau contient les données elles-mêmes. Donc le move.l sscreen,a1Je n'ai pas très le move.l #tableau,a0 marche alors que je le trouve plutôt étrange.
Essaye de remplacer move.l #tableau,a0 par lea tableau(pc),a0 puisque tu veux l'adresse du tableau. Si le tableau est trop loin de l'instruction, ne mets pas le (pc) mais normalement il ne devrait pas y avoir de problème! :)
avatar
;)

26

Mets un even devant tableau, il est à une adresse impaire! :)
avatar
;)

27

-

28

Si, il me semble qu'AS reconnait even.
Il faut le mettre après un espace (pas en début de ligne)

29

Orion_
a écrit : move.l tableau,-(a7) <<<<<<< Crash Intercepted

C'est parce que:
1. Il faut pea.l tableau(PC) ici. Tu dois passer l'adresse du label, pas le contenu.
2. tableau est à une adresse impaire.

Mais tableau peut très bien être à une adresse impaire normalement, à condition d'utiliser la bonne instruction!
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

30

petite question: comment savez vous que tableau est a une adresse impaire??
- Pourquoi "abreviation" est un mot si long ?
- D'où vient l'idée de stériliser l'aiguille qui va servir à une injection fatale d'un condamné à mort ?
- Pourquoi n'y a-t-il pas de nourriture pour chat avec goût de souris ?
- Pourquoi les établissements ouverts 24 heures sur 24 ont-ils des serrures ?
- Si un mot est mal écrit dans le dictionnaire, comment fait-on pour le savoir?
- Si Superman est tellement malin, pourquoi met-il son slip par dessus son pantalon ?