Communication avec la souris ps2

Signaler
Messages postés
75
Date d'inscription
mardi 29 juillet 2008
Statut
Membre
Dernière intervention
25 mars 2019
-
Messages postés
75
Date d'inscription
mardi 29 juillet 2008
Statut
Membre
Dernière intervention
25 mars 2019
-
Bonjour,

j'essaie de gérer la souris ps2 par les ports 60 et 64h.Mais j'ai quelques problèmes ....
J'arrive à envoyer des commandes et à recevoir les accusés de réceptions(ACK) mais pas à lire d'autres données.
Quand j'envoie la commande E9h pour obtenir les 3 octets de status de la souris,j'ai bien en retour l'ACK mais les octets suivants sur le port 60h me donnent toujours la valeur de l'ack ????
je suis sous dosxbox avec Windows 8 (donc souris déjà initialisée)

qu'est ce qui ne va pas ?

voici le code


org 100h

%macro affiche 4
	;%1=x,%2=y,%3=LPtext,%4=couleur
	mov si,%3
	mov bx,%1
	mov di,%2
	mov ah,%4
	call VGA3
%endmacro
	
mov ax,cs
mov ds,ax

;passage en mode texte 80*25 16 couleurs

mov ah,0	
mov al,3h
int 10h

;tester souris

boucle:
cli
call souris
sti

;fin

ret

;-----------------------
souris:
	cli
	mov ah,0D4h	;communication avec la souris demandée
	call CMDsourisPS2

	mov ah,0E9h	;demande 3 octets de status
	call CMDsourisPS2

	;réponse dans le buffer de sortie ?

	mov cx,50	;50 tentatives
souris1:
	in al,64h
	test al,1	;y a qqchose pour nous en buffer sortie ?
	loope souris1	

	mov cx,100
tempo:	
	loop tempo

	in al,60h    ;ici al vaut toujours ACK (FAh)
	sti
ret


CMDsourisPS2:

;le buffer d'entrée est il libre ?
PS2_1:
	in 	al,64h	;lecture du registre d'état	
	test 	al,10b	;bit 1 armé ?
	jnz 	PS2_1 	;non on attend

;on envoie notre commande:
	mov 	al,ah
	out	60h,al
	
;a t'on une réponse dans le buffer de sortie ?
PS2_2:	
	in 	al,64h	;lecture du registre d'état
	test 	al,1	;bit 1 armé ?
	jz 	PS2_2 	;non on attend

;on attend l'accuse de réception sur 60h
PS2_3:
	in	al,60h
	cmp	al,0FAh
	jne	PS2_3	;on boucle tant que pas ack produit par controleur
			;(dès qu'on a lu,le buffer de sortie est vide)
ret			

 

5 réponses

il y a une commande bios pour activer la souris ou directement sur un port, je ne sais plus. L'interruption peut aussi etre activé pour la souris PS2 mais je crois que c'est uniquement pour les systemes MCA.

Je ne suis pas chez moi et il me manque "PC programmation system" et je n'ai pas encore trouvé ce que je cherche sur google. Mais chez moi, je n'ai plus internet, ... zut de zut.

Si je trouves plus d'info, je te dis ça...

regarde par là:
http://wiki.osdev.org/Mouse_Input#PS2_Mouse_--_Basic_Operation_.28Microsoft_compliant.29
Messages postés
75
Date d'inscription
mardi 29 juillet 2008
Statut
Membre
Dernière intervention
25 mars 2019

Merci pour le lien patatalo,je vais potasser tout ça.

--
Messages postés
142
Date d'inscription
mercredi 5 avril 2006
Statut
Membre
Dernière intervention
29 janvier 2016
1
Le problème peut venir du fait que le PC est trop rapide pour la souris utilisée. On peut le vérifier en insérant un petit délai à la suite des commandes d'entrée ou sortie souris. Par exemple:
...
out 60h,al
jmp $+2 ; vide le cache
in al,64h
...
.Amicalement
Messages postés
142
Date d'inscription
mercredi 5 avril 2006
Statut
Membre
Dernière intervention
29 janvier 2016
1
-D'après "The Indispensable PC Hardware Book" de H.P.Messmer, le port du clavier est partagé avec la souris PS 2.
Il faut donc pour dialoguer avec celle ci la sélectioner avec la commande D4h.
Exemple pour "set scaling 2-1" :

Out 4h,d4h ; command write auxiliary device for controller
wait:
In al,64h ; read status register
test al,02h ;chek wheter input buffer is empty
jnz wait ;input buffer full, thus wait
out 60,e7h ;commznd "set scaling" for mouse

Plusieurs pages sont consacrées à la souris PS2, je peux les scanner et de les faire parvenir mais comment?
Amicalement


--
Messages postés
75
Date d'inscription
mardi 29 juillet 2008
Statut
Membre
Dernière intervention
25 mars 2019

Merci gilou34,je t'ai envoyé un MP.


--