1

Bonjour smile

J'ai vu que l'on pouvait correctement simuler une minuterie, notamment comme le défini la fonction WaitForMillis du fichier waitms.c du projet TICHESS.
Le problème c'est que j'aurais voulu m'en servir en le fixant à 1s de délai, tout en prenant un temps beaucoup plus court pour détecter les touches ... qui plus est sans toucher aux interruptions (je risquerais fort de mal les programmer) donc en utilisant ngetchx() . (Je n'ai pas pris le soin d'analyser toutes les sources de TICHESS)

Est-ce que je suis trop ambitieux ?
(N'ayez pas peur, je penserais à mentionner le projet où la fonction est apparue : TICHESS et la TI CHESS TEAM)

2

Euh, je crois que tu n'es pas bien clair, je ne sais pas si tu fais quelques amalgames.
D'abord, tu peux tout à fait avoir un timer toutes les secondes, et c'est parfaitement indépendant tu clavier.
Ensuite, ngetchx() va attendre un appui sur une touche (tout en faisant tout un autre bordel en même temps, link etc...). Si tu ne veux pas que ton programme s'arrête, n'utilise pas ngetchx.
Si tu veux une routine de lecture clavier, tu peux t'inspirer de PedroM. Tu peux aussi te servir de ça, toujours sous GPL : http://www.mirari.fr/7PJj
L'avantage de cette routine est qu'elle n'utilise que l'int 1 (d'ailleurs, à toi de l'installer à la place du handler de l'int 1, à $64). ngetchx utilise les ints 1 et 5.

Mais essaye un peu de préciser ce que tu veux faire, on pourra plus t'aider. smile

3

tails (./1) :
J'ai vu que l'on pouvait correctement simuler une minuterie, notamment comme le défini la fonction WaitForMillis du fichier waitms.c du projet TICHESS.Le problème c'est que j'aurais voulu m'en servir en le fixant à 1s de délai

WaitForMillis est bloquant, c'est une mauvaise idée de tout bloquer pour une seconde entière.
Va voir du côté de OSRegisterTimer.
tout en prenant un temps beaucoup plus court pour détecter les touches ... qui plus est sans toucher aux interruptions (je risquerais fort de mal les programmer) donc en utilisant ngetchx() .

ngetchx est également bloquant sauf si tu l'utilises avec kbhit. Mais kbd_queue est probablement un meilleur choix.

Mais que veux-tu détecter exactement: des appuis de touches (genre "l'utilisateur a appuyé sur F1, ENTER et x") ou des états de touches (genre "2nd et F1 sont actuellement appuyées, toutes les autres touches ne le sont pas")? Le système d'exploitation propose les premiers, la lecture bas niveau (_keytest) est la meilleure solution pour les deuxièmes.
Folco (./2) :
Si tu veux une routine de lecture clavier, tu peux t'inspirer de PedroM. Tu peux aussi te servir de ça, toujours sous GPL : http://www.mirari.fr/7PJjL'avantage de cette routine est qu'elle n'utilise que l'int 1 (d'ailleurs, à toi de l'installer à la place du handler de l'int 1, à $64).

Ça ne répond pas à sa question, il ne veut pas toucher aux interruptions. Et je ne vois pas du tout l'intérêt d'émuler la lecture du clavier du système d'exploitation par de la lecture bas niveau, c'est un bidouillage qui réinvente la roue et gaspille de la place dans le programme pour rien.
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

Euh... cette routine ne touche pas à l'int5, c'est un avantage. Après, le fait de ré-inventer la roue, je vois pas le souci si on fait ça pour apprendre où s'amuser. Perso, j'ai pas cru que je serais capable d'écrire ce code un jour, et ça m'a bien amusé de le faire. (puis c'est jouissif de taper du texte avce sa propre interruption, seul un geek peut comprendre, mais c'est quand même jouissif trilove)

5

Folco (./4) :
Après, le fait de ré-inventer la roue, je vois pas le souci

[ul][li]ne sert à rien[/li][li]gaspille de la place (précieuse sur la calculatrice)[/li][li]marche souvent moins bien que l'original[/li][/ul]
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

Merci Kevin et Folco pour vos réponses (malgré le fait que je n'eusse pas été très clair dans mon premier message) smile
Effectivement, Kevin a exactement compris ce que je voulais faire : je veux surtout détecter des appuis de touches : le but est de faire un jeu de réflexion dont le temps s'écoule tout en étant réceptif à 2/3 actions utlisateurs (appeler menu, ou peut être plus tard : valider des réponses) .

Heureusement que je vous ai posé la question : j'était vraiment parti pour réadapter la fonction WaitInMillis ...
Je regarderais donc du côté de kbd_queue() utilisé conjointement avec OSRegisterTimer smile

Je reviendrais éventuellement sur cette discussion si je n'ai pas été assez débrouillard pour m'en sortir . smile
Merci beaucoup smile

7

kbd_queue() et OSdequeue sont utilisés dans de nombreux programmes: tu peux regarder comment ils sont faits smile
Dans les programmes de TICT qui les utilisent (ça ne doit pas être le cas de TI-Chess, qui utilise beaucoup de lecture à bas niveau - c'est une des raisons qui font qu'il n'est pas du tout fait pour la compatibilité on-calc), la fonction qui les utilise s'appelle souvent GetUserInput, si ma mémoire est bonne.
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.

8

yA kbhit alors, qui fait aussi ce que tu veux mais est de plus haut niveau. Mais c'est plus lent. A voir ce dont tu as besoin.

9

Je pense qu'il vaut mieux utiliser la méthode plus rapide et faire idle() (ou, si on est en grayscale, simplement écrire dans le port 0x600005) plus longtemps smile
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

Je ne ferais pas du grayscale pour l'instant : pour mon jeu de réflexion, je peux largement éviter d'avoir recours au grayscale, qui demande plus de temps et de restrictions (ou de "détours" tels que les fameuses interruptions pour gérer les touches).
[Edité] Une erreur d'innatention [/Edité]

11

Il te manque des opérateurs "adresse de" (&):
FillLines2(
&(WIN_RECT) {100,10,120,10},
&(WIN_RECT) {100,90,120,90},
NULL,
A_NORMAL

ou plus portable (il y a des compilos qui ne savent pas faire ce que j'ai écrit ci-dessus):
WIN_RECT rectangle_1 = (WIN_RECT) {100,10,120,10};
WIN_RECT rectangle_2 = (WIN_RECT) {100,90,120,90};
FillLines2(
&rectangle_1,
&rectangle_2,
NULL,
A_NORMAL
);
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.

12

Ah merci beaucoup smile
Je m'y met smile

(Pardon pour l'édition du message précédent, je l'ai fait avant de lire ton post) .

... Compilation réussie smile
Prochaine étape, le compteur proprement dit smile

13

Par contre avec la doc il peut facilement avoir confusion :
Dans la page de FillLines2
-> la lower-line est désignée comme étant la ligne située avec les coordonnées Y les plus élevés (sinon ça ne fonctionne pas) : alors que moi j'avais interprété cela comme étant le contraire :
si ABCD est le quadirlatère, alors il faut définir (ab) avant (dc) dans l'appel de la fonction
-> Il faut absolument définir un quadirlatère ABCD avec l'ordre suivant
WIN_RECT{Ax,Ay,Bx,By} et WIN_RECT{Dx,Dy,Cx,Cy}
Là aussi j'avais interprété avec l'ordre WIN_RECT{Cx,Cy,Dx,Dy}

Je ne pense m'être bien exprimé, mais cela peut éviter de publier un roman.