30

Kevin Kofler a répondu a ta question je pense.
Bon si tu veux vraiment un bout de source :
	moveq	#6,d0
	trap	#9               ;execute kbd_queue
	lea	kbq(pc),a1
	move.l	a0,(a1)    ;pointe sur la kbd queue de l'os
	;(...)
	
	move.l	kbq(pc),-(a7)
	pea	key(pc)
	jsr	doorsos::OSdequeue
	addq.w	#8,a7
	move.w	key(pc),d0
	tst.w	d0 			;une touche appuyée?
	beq	SkipKeyTest		;non
	and.w	#$F7FF,d0		;même code même si c'est une repetition
					;de touche (thx Nitro ;))
	;Le numero de la touche appuyée est dans d0
	;(...)
	
SkipKeyTest:
	;(...)

key	dc.w	0
kbq	dc.l	0

31

On peut améliorer cela pour se passer des 2 variables supplémentaires:

 moveq.l #6,d0
 trap #9 ;execute kbd_queue
 clr.w -(a7) ;alloue 2 octets sur la pile et les initialise à 0
 move.l a0,-(a7) ;met le résultat de kbd_queue sur la pile (en argument pour OSdequeue)
 pea.l 4(a7) ;pointeur vers l'espace alloué sur la pile (en argument pour OSdequeue)
 jsr doorsos::OSdequeue ;si tu veux... (tout le monde sait ce que je pense du mode kernel)
 addq.l #8,a7 ;ou addq.w, c'est la même chose pour un registre d'adresses
 move.w (a7)+,d0 ;récupère la touche sur la pile
 tst.w d0 ;une touche appuyée?
 beq SkipKeyTest ;non
 and.w #$F7FF,d0 ;même code même si c'est une repetition
                 ;de touche (D'ailleurs, c'est Marcos Lopez qui a trouvé cela en premier.)
 ;Le numero de la touche appuyée est dans d0
 ;(...)
	
SkipKeyTest:
 ;(...)

[edit]Edité par Kevin Kofler le 02-10-2001 à 21:46:43[/edit]
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é

32

Si tu es fignoleur, tu fais un pea (a0).

33

Kevin : Je pense quand même que c'est mieux de sauver l'adresse renvoyée par le trap #9 plutôt que de l'executer a chq fois qu'on a besoin de cette valeur.
Et pour doorsos::... : vi, c vrai, finalement même en mode kernel j'appelle les rom calls comme en nostub, c bouffe moins de place smile

34

Le moyen le plus court (en taille de code) d'appeler un ROM_CALL est dc.w $f800+OSdequeue. Mais ça ne marche que sous AMS 2.04 minimum ou alors si l'utilisateur a installé Line1111 de Paxal. Donc je préfère:
 move.l OSdequeue*4(a5),a0
 jsr (a0)

avec le contenu de $c8 en a5, ce qui est toujours plus court que jsr doorsos::OSdequeue.

Et, je ne suis pas sûr à 100%, mais je pense qu'il faut faire un clr.w key avant d'appeler OSdequeue si on veut pouvoir utiliser tst.w pour vérifier si une touche a été appuyée. (Car, si aucune touche n'est appuyée, kbd_queue est vide et OSdequeue ne fera probablement rien - sauf retourner une valeur non nulle en d0.w, plutôt que 0, qui est retourné si kbd_queue n'était pas vide.)
[edit]Edité par Kevin Kofler le 04-10-2001 à 00:34:17[/edit]
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é

35

ok, merci je vais tester ça !
ça tombe bien,j'ai mon après midi de libre !
smile
:D

36

voila, donc je récupère la page, puis je bosse la dessus, et si ça marche bien, y devrais y avoir une news ce soir ! (j'éspère)
:D

37

voila j'ai corrigé half et mouche2 !
j'éspère que ce coup ci c bon !
:D

38

Tiens c'est marrant : c'est la premiere fois ke je vois un topic (ou un tutorial, ou ce ke vs voulez), ki parle de rediger l'int 5 pour gerer les touches. Avant personne en parlait.