1

J'ai trouvé de la doc sur le site de la tict pour lire le clavier "en temps réel", mais j'avoue avoir un peu de mal à le faire, alors si quelqu'un pourrait m'aider avec un exemple détaillé, ça serait super sympa.

SVP
----

Ne me dites pas :
1) gros n00b, arrête tout de suite, c pas la peine de continuer t trop nul
2) cherche, il y a des exemples pour ça, donc débrouilles toi
3) c dans la faq (en plus c même pas vrai)

Parceque :
1) Je n'ai pas internet chez moi, donc je ne peux pas passer mon temps à chercher
2) Quand j'ai accès au net, c'est dans un cyber donc je paye
3) Je suis peut-être plus con qu'un autre, et donc ce qui est facile pour tout le monde ne l'est pas forcément pour moi

Je dis ça parceque maintentant beaucoup se permettent de faire ce genre de réponse, et seuls certains (Kévin et d'autres) prennent le temps d'aider les débutants...

Merci d'avance!!!

2

C'est quoi ce tutorial ?
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

j'ai trouvé 7 fichiers sur les grays, les sprites, le clavier (!), etc, mais je peux pas t'en dire plus je les ai pas sous la main

en fait je suis en train de penser qu'il est possible que je les ai trouvé sur ticalc, mais qu'ils ont été faits par des gars de la tict

4

D'après mes souvenirs, le clavier est une matrice, on peut donc représenter une touche par son n° de ligne et son n° de colonne.
Pour connaître l'état du clavier, il faut envoyer un word, codé en fonction des lignes dont tu veux connaître l'état à l'adresse 0x600018, puis là, en hardware, il se passe quelque chose : la TI analyse ce word et renvoie l'état des lignes sélectionnées dans un byte qu'elle écrit à l'adresse 0x60001B, la valeur renvoyée correspond à l'état du clavier pour les lignes sélectionnées, chaque bit te donne l'état d'une touche. Bien sûr, la TI met un certain temps à te donner le résultat, une cinquantaine de cycles.
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. »

5

ok, ça c'est le principe et les adresses ou il faut lire ou écrire, merci

quelqu'un aurait-il un exemple simple de source, svp?? merci

6

;"rowread" routine
 move.w #$700,-(a7)
 ROM_CALL OSSetSR ;disable interrupts
 move.w #$fe,$600018 ;read the keyboard directly to get the
 nop                 ;info TI's event stucture doesn't give
 nop                 ;out (The key modifiers are not given
 nop                 ;if we need them, only if we don't
 nop                 ;need them. Don't ask me why.)
 nop
 nop
 nop
 nop
 nop
 nop
 nop ;The return value is automatically put in $60001b by
 nop ;the hardware.
 move.b $60001b,d3 ;save the result of rowread to d3
 clr.w (a7)
 ROM_CALL OSSetSR ;reenable interrupts
 addq.l #2,a7

(extraît de XtraKeys).
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é

7

ok merci kévin
mais est-ce que le fait de désactiver les interruptions pendant quelques temps est génant pour les grays?

8

à cette échelle de temps, je ne pense pas smile
Bien, eu, aucune idée

9

oui moi aussi je ne pense pas, mais bon c'était juste pour savoir s'il n'y avait vraiement AUCUN problème

10

au fait, pourquoi désactiver les interruptions??


et pour remettre le pointeur de la pile, d'habitude je fais

lea 2(A7),A7

C'est mieux ou moins bien?

11

Extrait de la doc de tigcc, sur _rowread:

It is recommended to disable Auto-Int 1 and 5 (using OSSetSR) while reading the keyboard using _rowread, because keyboard reading routines implemented in these two interrupts may interfere with _rowread if an interrupt occurs just while _rowread is executing. In grayscale mode, you can not disable Auto-Int 1, since grayscale is based on interrupts. See DUMMY_HANDLER from intr.h for a solution.
Bien, eu, aucune idée

12

ok, donc ça foirera avec les grays, quoi

13

Si tu les désactives en permanence, oui. Si tu les désactives juste pour le court instant de la lecture, comme le fait mon code, non.
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

juste pour en connaitre plus sur le fonctionnement interne du proc:

ROM_CALL OSSetSR ;disable interrupts
.
. <- un interrupt devrait arriver 'pile à ce moment'
.
ROM_CALL OSSetSR ;reenable interrupts

Est-ce que l'interrupt sera executer dès le "reenable" ?



Bien, eu, aucune idée

15

Sinon, tu peux remplacer le handler d'AMS par un rte, puis tu utilises rowread sans te soucier des interruptions.
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. »

16

owread: move.w d0,$600018 moveq.l #3,d1 \_rowread_loop: dbf d1,\_rowread_loop move.b $60001B,d0 rts
Au fait, c'est bizarre Kevin, d'habitude tu es pour l'opimisation en taille, et pourtant tu proposes une routine clairement non optimisée.; In : d0.w = masque des lignes à tester
; Out : d0.b = masque des colonnes
; Détruit : d0-d1

_r
16 octets, qui dit mieux ? 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. »

17

Tiens, je viens de regarder dans TIGCCLIB et vous attendez 250 cycles environ avant de lire le résultat dans 0x60001B. Pourquoi autant ?
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. »

18

Parce qu'il faut que le clavier se remette, après écriture du paramètre dans le port $600018
Au fait, quelle valeur doit être changée pour ne lire qu'une certaine ligne? C'est le #$FE qui doit être remplacé par un paramètre?
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.

19

Oui.

Je n'ai pas compris ta réponse à ma question par contre.
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. »

20

QUand tu écris dans 600018, tu donnes au gestionnaire clavier l'ordre de lire certaines lignes du clavier: Il lui faut un certain temps pour les exécuter

Edit: 250 cycles? pourtant, douze NOP ça n'en fait que 48... confus
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.

21

Je crois qu'une dixaine de cycles sont suffisants.

22

je suis en train de faire un tunnel pour me faire la main avec quelques fonctions, et j'ai quelques problèmes. Voici mon code:

include "tios.h"
include "graphlib.h"
xdef _main
xdef _ti89
_main:
move.w #0,D0
move.w #0,D1
move.w #159,D2
move.w #100,D3
move.w #2,D4
jsr graphlib::fill
move.w #59,D0
move.w #40,D2
move.w #1,D4
jsr graphlib::fill ;ça c'est juste pour tracer la piste


loop:

move.w #$700,-(A7)
jsr tios::OSSetSR
move.w #%1111110,$600018
nop
nop
nop
nop
nop
nop
move.b $60001b,D3
clr.w (A7)
jsr tios::OSSetSR
lea 2(A7),A7
btst.b #3,D3
beq droite
btst.b #1,D3
beq gauche ;là je veux savoir si on a appuyé sur droite ou gauche

move.w abcisse,D0
move.w #96,D1
move.w #8,D2
move.w #4,D3
move.w #1,D4
jsr graphlib::fill ;là c'est pas très propre, mais en fait je "voudrais (!)" faire un rectangle blanc à la place du
;ship pour l'effacer

move.w abcisse,D0
move.w #96,D1
lea (ship),A0
jsr graphlib:tongueut_sprite ;j'affiche le ship

move.w #$700,-(A7)
jsr tios::OSSetSR
move.w #%00111111,$600018
nop
nop
nop
nop
nop
nop
move.b $60001b,D3
clr.w (A7)
jsr tios::OSSetSR
lea 2(A7),A7
btst.b #0,D3 ;je regarde si il y a esc
beq fin

bra loop

droite:
move.w #1,D0
add.w D0,abcisse
bra loop ;je voudrais que le vaisseau aille un cran à droite

gauche:
move.w #1,D0
sub.w D0,abcisse
bra loop ;et là un cran à gauche
fin:
rts

ship:
dc.w 4,1
dc.b %00011000
dc.b %00111100
dc.b %01100110
dc.b %00111100


abcisse: dc.w 77

end


L'affichage marche (mais ça défile pas encore, une chose à la fois!), la touche esc marche, mais pour les touches droite et gauche, ça fait n'importe quoi: le vaisseau se déplace aléatoirement en abcisse (et même en ordonée!!!!!!!!!!!!)
Pouvez-vous m'aider là-dessus?

Sinon, j'ai un peu de mal avec la fonction put_sprite de graphlib, parceque je ne sais pas me servir des masques.
Quel en est le principe, et comment faire avec graphlib svp?

Merci d'avance!

23

Heu, j'ai l'impression qu'il te manque quelques notions... Tu es vraiment sûr que tu veu xpas commencer par le C ?
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

24

Nerick
: Je crois qu'une dixaine de cycles sont suffisants.

Non, c'est bien 48 minimum sur HW2.
Mais Zeljko et Sebastian ont refusé de réduire le temps d'attente dans _rowread parce que:
* AMS attend encore plus longtemps,
* il paraît qu'attendre plus longtemps réduit les effets de "bouncing".
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é

25

GoldenCrystal
: Heu, j'ai l'impression qu'il te manque quelques notions... Tu es vraiment sûr que tu veu xpas commencer par le C ?





Non, dis moi ce qui ne va pqs stp

26

Pas grand chose si ce n'est que le code est affreux (dsl, mais c'est vrai).
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

27

oui je sais que c'est affreux, je m'en doute, mais plutôt que de me faire ce genre de réponse qui ne m'avancent à rien, dis-moi ce qui ne vas pas, ça m'aiderait beaucoup plus !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

28

qqes conseils :
tu devrais isoler ta fonctions pour lire les touches (et l'appeler avec un bsr)
si tu commences l'asm, commence par des trucs simples (du genre dessiner un rectangle, puis faire le faire déplacer - avec ngetchx pour récupérer les touches). Tout ce qui est vraiment proche du hardware et des interruptions est souvent beaucoup plus dur.
Par contre, c'est pas la peine de te mettre au C smile
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

29

ok, merci pour le c, tu me renforce dans ma conviction, cependant peut-être que j'essaierai pour approfondir mes connaissances
merci pour l'idée de la fonction pour le clavier.
mais keski ne marche pas dans mon exemple, ça serait possible de me le dire sa,s refondre tout mon code??
merci encore flanker

30

pour le code, essaie peut-être avec plus de nop (quand y en a pas assez, y a des résultats bizarres)
après les btst #n,d3, ça serait pas des bne (beq -> le bit est à 0) ? j'en sais rien, mais c'est juste une supposition. j'ai oublié les détails du clavier.
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant