IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

x86 16-bits Assembleur Discussion :

Problème clavier :(


Sujet :

x86 16-bits Assembleur

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Problème clavier :(
    Salut
    J'ai à peu près suivi ce que vous avez indiqué dans cette discussion, mais j'ai toujours un problème au niveau du déplacement avec les flèches de mon clavier. Je suis entrain de faire un Space Invaders, et je dois faire bouger un petit vaisseau avec les flèches. Quand j'appuie sur la flèche de gauche, il va bien à gauche, et quand j'appuie sur celle de droite il va bien à droite mais le problème c'est qu'il "fuse"… Lorsque j'appuie sur la flèche de gauche par exemple, il se déplace jusqu'à l'extrémité gauche de mon cadre de jeu au lieu de se déplacer que de quelques pixels… J'ai l'impression que le registre garde en mémoire la touche que j'ai appuyé… Je sais pas trop si vous me suivez…

    Voici un bout de mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    @@deb:
    push ax
        mov ah,0Ch
        mov al,0Ah
        in al,60h
        mov bl,0
        cmp al,1
        jz @@deb
     
    ; --- Droite ? ---
    	cmp al,04Dh
    	je droite
     
    ; --- Gauche ? ---
    	cmp al,04Bh
    	je gauche
     
    ; --- Droite
    droite:
        cmp cx,555
        je gauche
    	inc cx
    	mov dx,380
    	pop ax
    	int 16h
    	jmp debut
     
    ; --- Gauche
    gauche:
        cmp cx,-65
        je droite
    	dec cx
    	mov dx, 380
    	pop ax
    	int 16h
    	jmp debut
    ( Le label "debut" contient le "call vaisseau" qui permet de dessiner le vaisseau… )

  2. #2
    Membre chevronné
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    Janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Points : 1 905
    Points
    1 905
    Par défaut
    Bonjour,

    plusieurs petites choses:

    - le port 60h ne devrait pas être lu directement car il déclenche une interruption (INT9)
    et donc on ne peu pas être sur du code renvoyé... mais dans la pratique ça marche quand-même
    - à la fin de tes routines droite et gauche, tu devrais remettre al=0 pour effacer la direction
    - il faudrait mettre une temporisation car même en étant très rapide, ton vaisseau va faire
    tout le trajet d'un coup

    a+

  3. #3
    Membre éclairé
    Avatar de edfed
    Profil pro
    être humain
    Inscrit en
    Décembre 2007
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : être humain

    Informations forums :
    Inscription : Décembre 2007
    Messages : 476
    Points : 701
    Points
    701
    Billets dans le blog
    1
    Par défaut
    la lecture du port 60h ne declenche pas d'interruption. son contenu est mis à jour à chaque evenement materiel du clavier, l'interruption est declenchée pour signifier un changement à traiter dans l'immediat. la lecture donnera donc le dernier etat du clavier.

    pour ce qui est du deplacement du curseur, la temporisation est une solution, mais la meilleure est d'utiliser un peu de maths, du genre dx=Speed*dt (delta x=speed* delta t), et ajouter ce delta X à la position du curseur.
    ça permetra d'avoir la meme vitesse apparente quel que soit la vitesse de la machine.

    un clavier emet une interruption à l'appui d'une touche, mais aussi au relachement. ce qui permet de tenir un bitmap du clavier, ce qui permet de ne plus utiliser le port 60h, mais juste lire dans le bitmap, pour connaitre l'etat de n'importe quelle touche en temps reel. et aussi prendre en compte les appuis de plusieurs touches en meme temps.

  4. #4
    Membre chevronné
    Avatar de Forthman
    Homme Profil pro
    conception mécanique
    Inscrit en
    Janvier 2005
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 702
    Points : 1 905
    Points
    1 905
    Par défaut
    Oui, je m'a mal exprimé pour l'int

    En fait, comme tu dis, il faut refaire le code de l'int 9 pour placer tous ces petits codes
    dans un beau tableau. (au relâchement de la touche le code = code de touche + 128)
    Ca permet de gérer plusieurs touches en même temps de manière simple.

    Pour la vitesse de défilement, j'ai souvent utilisé la synchro de l'écran, mais je ne pense pas que ça fonctionne avec un émulateur si ? (ça fait trop longtemps que je n'ai pas
    programmé, faut que je m'y remette )

    a+ François

Discussions similaires

  1. [TP 7] Problème clavier
    Par hoelbihan dans le forum Turbo Pascal
    Réponses: 2
    Dernier message: 06/03/2007, 17h37
  2. Problème clavier ?
    Par elwiss dans le forum Dev-C++
    Réponses: 2
    Dernier message: 21/12/2006, 14h48
  3. Problème clavier/souris sans fil logitech
    Par arnaud_verlaine dans le forum Windows XP
    Réponses: 4
    Dernier message: 20/12/2006, 11h48
  4. Problème clavier avec command.com
    Par SLE dans le forum Autres Logiciels
    Réponses: 4
    Dernier message: 26/04/2006, 16h48
  5. [Win XP]Problème clavier QWERTY - AZERTY
    Par SLE dans le forum Windows XP
    Réponses: 5
    Dernier message: 01/03/2006, 09h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo