begin process at 2008 08 28 22:32:44
1 233 430 membres
520 nouveaux aujourd'hui
14 291 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : problème avec le port 0x60 qui fait des faire des beeps [ Archives / Autres asm ] (prunkdump)

problème avec le port 0x60 qui fait des faire des beeps le 21/04/2003 22:18:49

prunkdump
voilà lorsque j'utilise le port I\O 0x60 pour voir l'etat du clavier d'abord tout fonctionne bien puis au bout d'un moment le pc fait des beeps, comment faire pour éviter cela?

Merci.

Re : problème avec le port 0x60 qui fait des faire des beeps le 22/04/2003 23:28:24

CoreBreaker
Les beeps sont produits comme tu le sais lorsque le buffer clavier est plein. Ce buffer est géré par l'interruption 8 (interruption clavier) Il faut soit rediriger l'interruption 8 (au rique que d'autres applications ne fonctionne plus correctement mais c'est un risque qui peut être évité si ton interruption est bien programmé en permettant que les autres applis puisse chopper toute de même les touches du clavier lorsque ton appli n'en a pas besoin.

Tu peux aussi éviter que l'interruption 8 se déclenche en désactivant la ligne d'IRQ en programmant le contrôleur d'interruption matérielles.

Tu peux aussi et c'est ce que je préfère masquer temporairement les interruptions matérielles car ainsi c'est plus proche d'un multitâche préemptif en faisant:

cli
récuperer_infos_sur_port_60h
sti

Core Breaker


-------------------------------
Réponse au message :
-------------------------------

> voilà lorsque j'utilise le port I\O 0x60 pour voir l'etat du clavier d'abord tout fonctionne bien puis au bout d'un moment le pc fait des beeps, comment faire pour éviter cela?
>
> Merci.

Re : problème avec le port 0x60 qui fait des faire des beeps le 25/04/2003 20:27:34

prunkdump




-------------------------------
Réponse au message :
-------------------------------

> Les beeps sont produits comme tu le sais lorsque le buffer clavier est plein. Ce buffer est géré par l'interruption 8 (interruption clavier) Il faut soit rediriger l'interruption 8 (au rique que d'autres applications ne fonctionne plus correctement mais c'est un risque qui peut être évité si ton interruption est bien programmé en permettant que les autres applis puisse chopper toute de même les touches du clavier lorsque ton appli n'en a pas besoin.
>
> Tu peux aussi éviter que l'interruption 8 se déclenche en désactivant la ligne d'IRQ en programmant le contrôleur d'interruption matérielles.
>
> Tu peux aussi et c'est ce que je préfère masquer temporairement les interruptions matérielles car ainsi c'est plus proche d'un multitâche préemptif en faisant:
>
> cli
> récuperer_infos_sur_port_60h
> sti
>
> Core Breaker
>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > voilà lorsque j'utilise le port I\O 0x60 pour voir l'etat du clavier d'abord tout fonctionne bien puis au bout d'un moment le pc fait des beeps, comment faire pour éviter cela?
> >
> > Merci.
>

Re : problème avec le port 0x60 qui fait des faire des beeps le 25/04/2003 20:35:30

prunkdump
Tout d'abord merci pour votre réponce, mais j'ai encore un petit problême.

voila ce que j'ai fait:

j'ai dévié l'interruption 0x09 sur ma procédure que voici:

fonction:
in al, 0x60
mov [touche], al
mov al, 0x20
out 0x20, al
iret

Je lis l'état du clavier, je place le scan code dans un buffer, j'envoi au PIC la comfirmation de l'interruption.

Mais voilà utiliser cette routine fait des buggs sur l'écran (en mode graphique), et il y à quelque défaut dans l'interractivité des touches. Pourriez vous m'expliquer comment enlever ce problème.

Re : problème avec le port 0x60 qui fait des faire des beeps le 25/04/2003 21:53:45

CoreBreaker
Oui et alors ????
Un message vide ne m'inspire pas trop tu sais !!!!

Core Breaker


-------------------------------
Réponse au message :
-------------------------------

>
>
>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > Les beeps sont produits comme tu le sais lorsque le buffer clavier est plein. Ce buffer est géré par l'interruption 8 (interruption clavier) Il faut soit rediriger l'interruption 8 (au rique que d'autres applications ne fonctionne plus correctement mais c'est un risque qui peut être évité si ton interruption est bien programmé en permettant que les autres applis puisse chopper toute de même les touches du clavier lorsque ton appli n'en a pas besoin.
> >
> > Tu peux aussi éviter que l'interruption 8 se déclenche en désactivant la ligne d'IRQ en programmant le contrôleur d'interruption matérielles.
> >
> > Tu peux aussi et c'est ce que je préfère masquer temporairement les interruptions matérielles car ainsi c'est plus proche d'un multitâche préemptif en faisant:
> >
> > cli
> > récuperer_infos_sur_port_60h
> > sti
> >
> > Core Breaker
> >
> >
> > -------------------------------
> > Réponse au message :
> > -------------------------------
> >
> > > voilà lorsque j'utilise le port I\O 0x60 pour voir l'etat du clavier d'abord tout fonctionne bien puis au bout d'un moment le pc fait des beeps, comment faire pour éviter cela?
> > >
> > > Merci.
> >
>

Re : problème avec le port 0x60 qui fait des faire des beeps le 25/04/2003 22:07:10

CoreBreaker
Excuse mon ignorance à ton sujet je vois que tu maitrise un peu le sujet et excuse mon erreur c'est effectivement l'interruption 9 et pas la 8 comme je te l'avais indiqué.
Sinon essai:
fonction:
cli
in al, 0x60
mov [touche], al
mov al, 0x20
out 0x20, al
sti
iret

et dis moi si ca marche

Core Breaker


-------------------------------
Réponse au message :
-------------------------------

> Tout d'abord merci pour votre réponce, mais j'ai encore un petit problême.
>
> voila ce que j'ai fait:
>
> j'ai dévié l'interruption 0x09 sur ma procédure que voici:
>
> fonction:
> in al, 0x60
> mov [touche], al
> mov al, 0x20
> out 0x20, al
> iret
>
> Je lis l'état du clavier, je place le scan code dans un buffer, j'envoi au PIC la comfirmation de l'interruption.
>
> Mais voilà utiliser cette routine fait des buggs sur l'écran (en mode graphique), et il y à quelque défaut dans l'interractivité des touches. Pourriez vous m'expliquer comment enlever ce problème.

Re : problème avec le port 0x60 qui fait des faire des beeps le 25/04/2003 23:18:13

prunkdump

-----------------------------
prunkdump
-----------------------------

Excuse pour le message vide je suis un peu un andicapé du forum, j'espère que celui là il marchera.

Désactiver les interruptions s'a ne marche pas mais ces buggs sont vraiment étranges j'ai des ligne blanche qui apparoissent sur l'écran et des fois l'orsque j'appuis sur la touche l'action ne se déclenche pas instantanement, je pense que c'est du à mon utilisation du PIC. Faut il vraiment envoyer un message au PIC à chaque appel de l'interruption. Je n'ose pas trop m'attaquer aux interruptions du mode protégé de windows grâce à la table IDT car là si je me plante je fout tout en l'air.



-------------------------------
Réponse au message :
-------------------------------

> Excuse mon ignorance à ton sujet je vois que tu maitrise un peu le sujet et excuse mon erreur c'est effectivement l'interruption 9 et pas la 8 comme je te l'avais indiqué.
> Sinon essai:
> fonction:
> cli
> in al, 0x60
> mov [touche], al
> mov al, 0x20
> out 0x20, al
> sti
> iret
>
> et dis moi si ca marche
>
> Core Breaker
>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > Tout d'abord merci pour votre réponce, mais j'ai encore un petit problême.
> >
> > voila ce que j'ai fait:
> >
> > j'ai dévié l'interruption 0x09 sur ma procédure que voici:
> >
> > fonction:
> > in al, 0x60
> > mov [touche], al
> > mov al, 0x20
> > out 0x20, al
> > iret
> >
> > Je lis l'état du clavier, je place le scan code dans un buffer, j'envoi au PIC la comfirmation de l'interruption.
> >
> > Mais voilà utiliser cette routine fait des buggs sur l'écran (en mode graphique), et il y à quelque défaut dans l'interractivité des touches. Pourriez vous m'expliquer comment enlever ce problème.
>

Re : problème avec le port 0x60 qui fait des faire des beeps le 26/04/2003 00:05:57

CoreBreaker
Tu programmes en 32bits alors ? (tu parle de l'IDT)
en principe un cli désactive la ligne d'IRQ du processeur central donc si tu l'utilise et que tu dis que ça marche pas ça ne te servira à rien de désactiver au niveau du PIC tu auras le même problème. Mais le cli/sti reste nécessaire pour éviter d'avoir une interruption réentrante. L'action au PIC reste inutile car si tu marque l'IRQ du controleur clavier tu auras les même problème puisque les autres IRQ restent actives.
Je ne pense pas que ça vient du PIC si la réaction à une touche n'est pas instantanée c'est qu'il y a une tache quite consomme trop de temps processeur.
De toute façon, je ne pense pas non plus que tu puisses passer par l'IDT car la zone mémoire de cette table doit être de RPL de niveau 0 (donc au niveau du noyau), tu n'y aurras pas accès comme ça, il te faut pour la manipuler un code docile s'il est exécuté en DPL de niveau 3. Ce qui sera le cas puisque par défaut un code exécuté est en DPL 3. Et puis ce n'est pas simple d'avoir un code exécuté en DPL 0, 1 ou 2 car il te faut rajouter un descipteur dans la GDT ou la LDT, c'est un serpent qui se mord la queue. Seul le noyau ne pourra t'accorder un DPL < 3 à l'exécution. Mais bon on peut toujour essayer.

Si tu veux, envoi moi ton source à metaos@free.fr, je verrai ce que je pourrais faire.

C'est l'action sur une touche qui provoque les lignes blanches?

Core Breaker


-------------------------------
Réponse au message :
-------------------------------

>
> -----------------------------
> prunkdump
> -----------------------------
>
> Excuse pour le message vide je suis un peu un andicapé du forum, j'espère que celui là il marchera.
>
> Désactiver les interruptions s'a ne marche pas mais ces buggs sont vraiment étranges j'ai des ligne blanche qui apparoissent sur l'écran et des fois l'orsque j'appuis sur la touche l'action ne se déclenche pas instantanement, je pense que c'est du à mon utilisation du PIC. Faut il vraiment envoyer un message au PIC à chaque appel de l'interruption. Je n'ose pas trop m'attaquer aux interruptions du mode protégé de windows grâce à la table IDT car là si je me plante je fout tout en l'air.
>
>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > Excuse mon ignorance à ton sujet je vois que tu maitrise un peu le sujet et excuse mon erreur c'est effectivement l'interruption 9 et pas la 8 comme je te l'avais indiqué.
> > Sinon essai:
> > fonction:
> > cli
> > in al, 0x60
> > mov [touche], al
> > mov al, 0x20
> > out 0x20, al
> > sti
> > iret
> >
> > et dis moi si ca marche
> >
> > Core Breaker
> >
> >
> > -------------------------------
> > Réponse au message :
> > -------------------------------
> >
> > > Tout d'abord merci pour votre réponce, mais j'ai encore un petit problême.
> > >
> > > voila ce que j'ai fait:
> > >
> > > j'ai dévié l'interruption 0x09 sur ma procédure que voici:
> > >
> > > fonction:
> > > in al, 0x60
> > > mov [touche], al
> > > mov al, 0x20
> > > out 0x20, al
> > > iret
> > >
> > > Je lis l'état du clavier, je place le scan code dans un buffer, j'envoi au PIC la comfirmation de l'interruption.
> > >
> > > Mais voilà utiliser cette routine fait des buggs sur l'écran (en mode graphique), et il y à quelque défaut dans l'interractivité des touches. Pourriez vous m'expliquer comment enlever ce problème.
> >
>


Classé sous : problème, port, 0x60, beeps

Participer à cet échange

Pub



Appels d'offres

Recherche developpeur ...
Budget : 700€
SITE MARCHAND LOCATION...
Budget : 3 000€
SITE MARCHAND POUR HOTEL
Budget : 4 000€

CalendriCode

Août 2008
LMMJVSD
    123
45678910
11121314151617
18192021222324
25262728293031

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS