CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[Asm] Vider le buffer clavier

roger_barry
roger_barry
Niveau 10
05 avril 2005 à 02:42:50

Bonjour, dans un de mes programmes j´ai besoin d´effacer le buffer clavier mais je ne trouve vraiment pas comment!

Sur un site j´ai vu qu´il fallais faire comme ceci:

mov ax, 40h
mov es, ax

mov di, 80h
mov bx, es:[di]
mov di, 1ah
mov es:[di], bx
mov di, 1ch
mov es:[di], bx

Mais le problème c´est que cette technique n´efface pas le buffer clavier mais la remplace par la derniere touche pressé! Donc le buffer reste la jusqua temp qu´une autre touche soi peser!

Perosnne n´auraient un truc pour effacer le buffer clavier?

DarkPaladin
DarkPaladin
Niveau 5
05 avril 2005 à 05:55:19

Salut Roger Barry, essaie ca, ca devrait fonctionner.

cli
mov ax,40h
mov es,ax
mov bx,es:[01ch]
mov es:[01ah],bx
sti

c´est un tampon circulaire, dont quand les 2 ptr ont la même position, le tampon est représenté comme vide.

roger_barry
roger_barry
Niveau 10
05 avril 2005 à 22:17:22

Sa marche mais seulement au début. Après quelques coups le buffer reste toujours le même. Aurait tu une autre idée?

DarkPaladin
DarkPaladin
Niveau 5
06 avril 2005 à 22:17:45

dis en plus sur ton prog, parce que je trouve ca bizarre un peu comme prob.

roger_barry
roger_barry
Niveau 10
06 avril 2005 à 22:53:10

Ben puisqu´ont est dans création de jeux j´ai essayer de faire un petit pong. Tout marche comme il faut sauf la raquette. Dés que je pèse sur la touche droite elle ne bouge pas que d´un seul coup vers la droite mais elle bouge jusqua temps que je pèse sur une autre touche. Même chose pour quand je pèse sur la touche droite.

Donc je cherche un moyen de vider le buffer clavier parce que j´utilise la fonction 01h de l´interuption 16h du bios. Cette fonction lit le buffer clavier et met le scan code de la touche du buffer dans ah.

DarkPaladin
DarkPaladin
Niveau 5
07 avril 2005 à 16:11:21

je n´aime pas trop l´interruption 16h, je prefere detourner l´irq du clavier pour mettre ma propre fonction avec un buffer pour l´etat des touches.
c´est l´irq 9 si je m´en souviens. L´avantage est que tu peux prendre plusieurs touche en meme temps.

Mais, j´imagine que si tu testes le retour de l´int 16h et que le zero flag est up, tu devrais stopper tout les mouvements.

Mov Dl,1
mov ah,01h
int 16h
jnz Key
Dec Dl
Key:
Mov Byte Ptr TouchePresse,Dl

TouchePresse : 1 Lit la touche dans le buf
TouchePresse : 0 Aucune Touche, Stoppe la Raquette...

LGV
LGV
Niveau 28
07 avril 2005 à 16:33:40

il me semble que la fonction 01h de l´int 16h attend qu´une touche soit pressee si aucune n´est presente dans le buffer, non ? Du coup, ca ne pourait pas se faire comme ca...

J´ai de vagues souvenirs de fonctions qui lisent le buffer en laissant les infos dedans, et d´autres qui enlevent ce qu´elles lisent, mais de memoire je ne saurai en dire plus :-?

Cela dit l´int 16h est le mal absolu, dans la mesure est tu es restreint par la repetition clavier ; si tu procedes en lisant les ports ( lesquels ? la aussi je n´ai plus souvenir des numeros... a fouiller), tu as acces direct et instantane a TOUTES les touches du clavier.

DarkPaladin
DarkPaladin
Niveau 5
07 avril 2005 à 17:40:43

LGV: je crois que tu parles de la fonction 00h et non 01h, je pense, moi aussi ca fait longtemps que je n´ai pas utiliser les int.

pour le port, c´est le 60h,

in al,60h

c´est pour ca que le best ca serait de deriver l´irq 9 pour prendre toute les touches du clavier avec un buf d´etat de 128.

LGV
LGV
Niveau 28
07 avril 2005 à 20:25:34

aaah, les bons vieux souvenirs :D . .. maintenant, c´est API de haut niveau a tout bout de champs ; bah, c´est pas plus mal apres tout :D

DarkPaladin
DarkPaladin
Niveau 5
07 avril 2005 à 21:19:16

je me souviens d´un vieux projets fin d´etude de mon cours.

j´avais fait un jeu en 3d en asm. flat shading(lol) et comme musique, la synthese FM.
pour la memoire, j´utilisait le mode flat :P.

je me souviens un peu pour le keyboard, ca ressemblait à ca.

KB DB(128) dup(0)

in al,60h
mov bx,offset KB
xor ah,ah
mov cl,al
shr cl,7
and al,07fh
mov byte ptr [bx+ax],cl

l´avantage, c´est que je pouvais prendre en compte plusieurs touche a la fois.

apres, tu testes la touche 75 et 77 pour des deplacement horizontal.

roger_barry
roger_barry
Niveau 10
07 avril 2005 à 22:01:58

Merci! J´ai encore mieux que ce que je voulais, je connais le port du buffer! Ca va aller beaucoup mieux :)

Mais pour la fin de ta fonction j´ai un doute:

mov byte ptr [bx+ax],cl

tu est sur qu´ont peut utiliser ax comme index?

DarkPaladin
DarkPaladin
Niveau 5
08 avril 2005 à 07:18:34

sur les 386 est plus, en 32bits, oui.

mov byte ptr [ebx+eax],cl

ou si tu preferes

add ebx,eax
mov [ebx],cl

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment