90

Pas plus facile de regarder directemnt sur l'écran plutôt que d'utiliser GetPixel ??
Sinon, essaie quand même de passer à des versions de libs plus récentes wink - graphlib et userlib, par ex, que j'utilisais il y a plus de 5 ans... -

Sinon, le addq marche sur autre chose que des registres ??
De toute façon, essaie d'expliciter le plus souvent possible les .b, .w, .l ainsi que la fonction ASM exacte que tu veux - même chose pour les bsr, bne, ... -

Sinon, le btst est la fonction que tu devrais utiliser pour le point que j'ai abordé au début de ce post...
Site : http://www.phareaway.com/
Membre du groupe Phare Away et webmaster du site

91

Miles-> ok merci, je vais voir ça

Au fait, j'ai refait la routine de scroll "à la main" pour ne plus passer par graphlib, j'utilise donc un buffer.
A ce propos, j'ai vu dans un tuto (pdf) qu'on pouvait créer un heap de cette manière:

pea 250(PC),-(A7) ;avec 250 en WORD
jsr tios::HeapAlloc
et restauration de la pile

Ca a toujours planté, et pourtant la première fois j'ai parfaitement recopié le code du tuto...
Je le fais donc maintenant avec un move, et ça marche très bien.
Sinon je me demandais, pour lire l'écran et le recopier dans le buffer, je fais:

move.l (A1),D1 ;A1 pointe vers une zone de l'écran
move.l D1,(A2)+ ;A2 pointe vers le buffer.
add.l #4,A1 ;c'est bon, je sais pour le addq smile

Je l'ai fait pour suivre scrupuleusement les modes d'adressage présentés dans 68kguide
n'est-il pas possible de faire directement:

move.l (A1)+,(A2)+

ou:

move.l (A1),(A2)+
add.l #4,A1

ça gagnerait du temps...

Je voulais savoir aussi, la taille de l'écran sur 92 est de 3840 octets
celle de la 89 est de 30*100, ou 30*128 comme sur la 92???

Merci!

92

1. pea.l 250(PC),-(A7) ne fait pas ce que tu veux : il place l'adresse de l'instruction+250 das la pile.
Ce n'est certainement pas ce que tu veux.
Avec move, ça ne devrait pas marcher non plus neutral
C'est quel tuto ?
Et puis je ne comprends pas ce que tu veux dire par ; 250 en WORD

2. Renseigne-toi sur les modes d'adressage disponibles pour l'instruction move, et tu sauras si c'est possible (tu peux consulter le fichier 68KPM.pdf)

3. Sur TI-89 l'écran est de 3840 octets, comme pour la TI-92+, mais on n'en voit qu'une zone rectangulaire de 160x100 pixels.
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. »

93

1. au début, j'ai suivi le tuto, et j'ai bien vu que ça ne marchait pas, mais avec un pove ça marche. 250 en WORD veut dire un heap de 250 words, et non pas octets comme d'habitude. Mais encore une fois, ça ne vient pas de moi, mais du tuto
2. justement, des renseignements j'en demande à ceux qui sont sur le forum
3.d'accord, merci. Donc on peut faire ce qu'on veut de la partie non affichée de l'écran, on peut y lire et y écrire à volonté?

94

et si ça marche avec un move:

move.l #360,-(A7)
jsr tios::HeapAlloc ;handle 8*30=240 octets
lea 4(A7),A7
move.w D0,handle
tios:grinEREF D0,A0
move.l A0,A5

95

1. Comment HeapAlloc sait que tu veux allouer 250 words et pas 250 octets d'après toi ?
Il alloue forcément 250 octets. Si tu veux 250 words, tu dois passer 500 en paramètre à HeapAlloc.
OK pour ton exemple avec move.
Je croyais que tu remplaçais simplement l'instruction pea par un move, ce qui aurait donné : move.l 250(pc),-(a7) et qui n'aurait pas fonctionné non plus, mais ce que tu as écrit au post ./94 fonctionne (par contre, je ne comprends pas pourquoi tu mets 360 et pas 240).

2. Oui, mais bon, c'est vraiment le genre de renseignement qui se trouve en 2 clics.

3. Tout à fait trivil
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. »

96

Je répète, je paye les connexions internet, donc les 2 clics à répétition, ce n'est pas forcément donné pour certains....

sinon le 240/360, juste une faute d'inatention

sinon pour les words à la place des octets, ce n'est pas moi qui le disait, mais le tuto. ceci dit, je sais très bien que c'est faux

97

Je te conseille alors de télécharger le 68kPM.pdf et le 68kUM.pdf.
Ils sont tous les deux sur http://tict.ticalc.org (dans la section Documents)
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. »

98

merci, j'ai déjà 20 tutos, je ne vais pas dl tout internet pour trouver la réponse.

Quelqu'un aurait-il une réponse qui m'aiderait plus que ça (par rapport aux optimisations des move plus haut (./91))?



je reprécise:

move.l (A1),D1 ;A1 pointe vers une zone de l'écran
move.l D1,(A2)+ ;A2 pointe vers le buffer.
add.l #4,A1 ;c'est bon, je sais pour le addq

Je l'ai fait pour suivre scrupuleusement les modes d'adressage présentés dans 68kguide
n'est-il pas possible de faire directement:

move.l (A1)+,(A2)+

ou:

move.l (A1),(A2)+
add.l #4,A1

ça gagnerait du temps...

99

Je pense que ce que voulait dire Sasume est que tu auras très certainement de toute façon besoin tôt ou tard de ces deux fichiers si tu continues la programmation ASM 68k, et pas seulement pour trouver la réponse à la question précise que tu te poses maintenant, donc autant les télécharger une bonne fois.
Et en règle générale, 20 ou même 200 tutos ne remplacent *pas* un manuel de référence...
avatar
« Le bonheur, c'est une carte de bibliothèque ! » — The gostak distims the doshes.
Membrane fondatrice de la confrérie des artistes flous.
L'univers est-il un dodécaèdre de Poincaré ?
(``·\ powaaaaaaaaa ! #love#

100

ok, de toute façon je télécharge tous les tutos que je trouve par principe, donc dès que j'ai vu ça, je les ai dl direct smile
Mais quelqu'un peut me répondre tout de même???

101

Ben la réponse est dedans confus
Allez, je t'aide, page 221 du 68kPM smile
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. »

102

c vrai ça??
je jette tout de suite un oeil

103

et si ça marche avec un move:
move.l #360,-(A7)

En effet, mais il y a mieux: pea.l (360).w. L'idée du pea était bonne, mais le (PC) n'allait pas.
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é

104

PS:
nounoun
: Je répète, je paye les connexions internet, donc les 2 clics à répétition, ce n'est pas forcément donné pour certains....

Tu te fiches de ma gueule? 2 clics, ça prend à peu près 1 minute. 1 minute dans un cybercafé, ça fait environ 10 cents...
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é

105

Kevin Kofler
:
et si ça marche avec un move:
move.l #360,-(A7)

En effet, mais il y a mieux: pea.l (360).w. L'idée du pea était bonne, mais le (PC) n'allait pas.
Pourquoi est-ce plus optimisé ?
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. »

106

2 octets en moins.
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é

107

Ah bon ?
pea.l 360.w
pea : 2 octets
360 : 2 octets

move.w #360,-(a7)
move : 2 octets
360 : 2 octes

Non ?
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. »

108

pea pushe toujours un long, donc c'est équivalent à move.l #360,-(a7). Il y a une extension de signe automatique.
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é

109

move.w #360,-(a7) ne marche pas car HeapAlloc necessite un long.

110

Kevin-> deux clics quand t'as trouvé la bonne page c vraic pas long, le plsu long c de la trouver cette bonne page.


J'ai refait le scroll à la main, pour ne plus utiliser les fonctions de graphlib (scrtomem et memtoscr):
;Enregistre l'écran dans le heap (buffer)
move.w #98,D0 ;compteur de la boucle
move.l #$4C00,A1 ;adresse de départ (à l'écran x=0 y=0)
move.l A4,A2 ;adresse du heap (buffer)
rec2:
move.l (A1)+,(A2)+
move.l (A1)+,(A2)+
move.l (A1)+,(A2)+
move.l (A1)+,(A2)+
move.l (A1)+,(A2)+
lea 10(A1),A1
dbra D0,rec2
;Ecrit l'écran une ligne plus bas
move.w #98,D0 ;compteur de la boucle
move.l #$4C1E,A1 ;adresse de départ (à l'écran x=0 y=1)
move.l A4,A2 ;adresse du heap (buffer)
print3:
move.l (A2)+,(A1)+
move.l (A2)+,(A1)+
move.l (A2)+,(A1)+
move.l (A2)+,(A1)+
move.l (A2)+,(A1)+
lea 10(A1),A1
dbra D0,print3
rts

Donc sans avoir compris 100% de la doc que j'ai dl, j'ai su que move.l (A2)+,(A1)+ ça marche smile (Merci VTI!)

Mais maintenant c'est beaucoup trop rapide, comment puis-je faire pour ralentir ça comme je veux?
Je dois surement utiliser les int, mais dans tous les tutos que j'ai, on explique juste ce que c'est qu'un int, mais on a aucune indication pour savoir comment l'utiliser concrètement (exemple de code???).
Merci de m'aider!

111

PpHd
: move.w #360,-(a7) ne marche pas car HeapAlloc necessite un long.
Ah ok, je croyais qu'un short faisait l'affaire... neutral
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. »

112

Je voudrais aussi avoir un nombre aléatoire sans utiliser userlib, et sans prendre la routine du tios, car la doc de tigcc dit qu'elle est très lente, mais je ne sais pas du tout comment m'y prendre

113

et maintenant ça va trop vite, g un pb de phasing, j'ai donc absolument besoin d'utiliser les int, parceque là ça fait dégueu

114

Si ça va trop vite, tu peux peut-être te permettre d'utiliser la routine du TIOS pour avoir un nombre aléatoire ?
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. »

115

mais c pas ca qui m apprendra a ,e servir des int

116

Non, en effet.
Les interruptions automatiques sont celles qui t'intéressent.
Sur le 68000, les interruptions ont toutes un numéro, et un programme associé, l'adresse de ce programme est fonction du numéro. Par exemple, si l'interruption automatique 5 (de n° $74) est demandée, le 68000 exécutera le programme dont l'adresse est située à l'adresse 4*$74=$1D0.
Bref, donc si tu veux modifier le programme de l'interruption 5, il te suffit de remplacer l'adresse qui est à l'adresse $1D0 par l'adresse de ton programme (et ce programme doit se terminer par un rte, pas un rts).
N'oublie pas de restaurer l'ancien programme d'interruption, à la fin de ton jeu ! (il faut donc que tu sauves l'adresse qui était là avant que tu ne mettes la tienne)

En fait, il y a un problème sur les TIs : les concepteur des TI-89/92+ ont mis des protections qui nous empêchent de modifier directement les valeurs des adresses des programmes d'interruption, pour contourner cet obstacle, il faut savoir que la mémoire possède un "espace fantôme", c'est-à-dire un espace qui contient exactement les mêmes choses que ce qui est à un certain endroit de la mémoire, mais qui est situé à une adresse différente. Cet espace commence à l'adresse $40000, et tu retrouveras à partir de cette adresse le contenu exact de la mémoire en partant de l'adresse 0.
Il faut donc que tu ajoutes $40000 à l'adresse à laquelle tu veux mettre l'adresse de ton programme d'interruption : pour continuer dans notre exemple sur l'auto_int5, il faut que tu fasses un lea.l Prog_Int(pc),$401D0

Voilà, c'est tout smile

P.S. : quelle est la taille de l'expace fantôme ? Et celle de l'espace protégé ?
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. »

117

Merci beaucoup, c'est la première fois que quelqu'un prends le temps de m'expliquer comment ça marche vraiment, je vais tester tout ça !!!


Je pense donc que c'est comme ça qu'on fait des tsr? Un programme programme lancé par un int fait un peu ce qu'il veut, et rend la main?

118

Sasume > je n'ai plus la doc pour confirmer, mais il me semblait que les adresse des interruptions etaient contigues en memoire, et que pour trouver l'adresse d'une int, il fallait se rendre a l'adresse de la 1ere int + 4*n° de l'int
mais peut etre que je me trompe, ca fait longtemps que je n'ai plus retouche a tout ca smile

119

Nerick> Oui c'est pas faux :
intr.h:
#define AUTO_INT(IntNo) ((long) (IntNo) * 4 + 0x60)


Sinon pour l'adresse de tous les vecteurs (en particulier les interruptions), c'est mais il y a un tableau mieux présenté .
avatar
;)

120

Oui, et il suffit de désactiver la protection de la mémoire basse (effacer le bit 2 à $600001) pour changer le vecteur d'IT.

trap.txt:

Address in table   Assigned function
----------------   -----------------
0000 to 0007       Reset vector (initial SSP and PC)  (0-1)
0008 to 000B       Bus error vector                     (2)
000C to 000F       Address error vector                 (3)
0010 to 0013       Illegal instruction vector           (4)
0014 to 0017       Zero divide vector                   (5)
0018 to 001B       CHK instruction vector               (6)
001C to 001F       TRAPV instruction vector             (7)
0020 to 0023       Privilege violation vector           (8)
0024 to 0027       Trace vector                         (9)
0028 to 002F       Line 1010/1111 emulator vectors  (10-11)
0030 to 003B       Unassigned, reserved             (12-14)
003C to 003F       Uninitialised interrupt vector      (15)
0040 to 005F       Unassigned, reserved             (16-23)
0060 to 0063       Spurious interrupt vector           (24)
0064 to 007F       Level 1-7 interrupt auto-vectors (25-31)
0080 to 00BF       TRAP #0-15 instruction vectors   (32-47)
00C0 to 00FF       Unassigned, reserved             (48-63)
0100 to 03FF       User interrupt vectors          (64-255)


Edit: cross avec BiHi hehe
avatar
Que cache le pays des Dieux ? - Forum Ghibli - Forum Littéraire

La fin d'un monde souillé est venue. L'oiseau blanc plane dans le ciel annonçant le début d'une longue ère de purification. Détachons-nous à jamais de notre vie dans ce monde de souffrance. Ô toi l'oiseau blanc, l'être vêtu de bleu, guide nous vers ce monde de pureté. - Sutra originel dork.