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 :

[Assembleur 16 bits] 2 touches utilisées en même temps


Sujet :

x86 16-bits Assembleur

  1. #1
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2007
    Messages : 48
    Points : 27
    Points
    27
    Par défaut [Assembleur 16 bits] 2 touches utilisées en même temps
    Bonjour les amis.
    je suis un dut info et je vais devoir coder un pong en assembleur 16 bits
    j'aimerais savoir si il existe une ou des instruction qui permette d'avoir deux raquette qui pourrai bouger en même temps ou si seul l'interruption 16,10h permet de taper une touche et a ce moment la chose n'est plus possible...

    Merci beaucoup d'avance et vive l'assembleur

  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
    Hello,

    Quand une touche est actionne sur le clavier, celui-ci envoit des donnes
    a la carte mere. Celle-ci analyse tout ca, et si ca lui convient, active
    l'interruption 09h

    Les donnees provenant du clavier arrivent sur le port 60h octet par octet
    (il faut donc creer une routine simple qui remplacera celle de l'int 09h)

    si le bit 7 (le plus a gauche) de cet octet vaut 1 c'est que la touche
    est relachee, sinon c'est qu'elle est appuyee
    Ce qui nous fait 128 touches possibles :-)

    Pourquoi, je sais pas, mais ca devait etre trop simple alors on
    a invente des "codes etendus". Ca concerne les touches flechees, inser,
    suppr, fin, page-up, page-down, home, impr-ecran, la petite touche enter
    et d'autres encore...

    les codes etendus sont composes de 2 octets envoyes l'un apres l'autre :
    E0h + code clavier
    ainsi la touche CTRL de gauche = 1Dh et celle de droite = E0h,1Dh

    Mais c'est pas tout ! (arggrr !!!) certaines touches ne se contentent pas
    d'ajouter E0h comme code etendu mais E0h,2Ah,E0h+"code touche"
    (cas tres particulier de la touche "Pause")

    voila, avec ca, tu va pouvoir detecter plus d'une touche a la fois

    a+ Francois

  3. #3
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2007
    Messages : 48
    Points : 27
    Points
    27
    Par défaut
    wow!
    je n'est pas encore de connaisance aussi poussé en assembler mais merci de cette réponse je vais bien le relire et tout analyser...
    merci beaucoup....

  4. #4
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut Re:
    Rien ne t'empêche de faire une boucle et de tester si l'utilisateur a tapé (ou enfonce ...) une touche. C'est ce qu'on appelle agir par scrutation. On ne peut pas appuyer sur deux touches simultanément, il y a toujours un qui arrive, avec une chance sur 2 (?), en premier (différences de Heisenberg ).

  5. #5
    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, mais il faut pouvoir differencier l'appuis et le relachement de la touche

    Dans le cas du Pong a 2 joueurs, il faut pouvoir gerer deux fois deux touches
    separements (haut et bas pour chaque joueur)

    a+ Francois

    Edit : la revectorisation des touches fonctionne dans les programmes DOS sous XP

  6. #6
    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
    tout simple, tu utilise mon int9 au lieu de celle du bios

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    ;pour FASM  
    call int9
    ;puis pour tester une touche, tu regarde sa valeur dans le tableau
    mov al,[key+key.???]
    ; et voilà tu connais l'etat de la touche désirée
    ;là, c'est ton programme
    ;...
    exit:
    call oldint9 ; vau mieu le faire sous dos, et meme sous WIN9x.
    ret           ;maintenant, tu quitte le programme
    include 'int9.inc'
    bon, c'est pour du 32 bit, mais rienne t'empeche de le convertir en 16 bits

    attention, ce fichier est sous licence UFO NOSS
    pour les curieux, allez sur acronymfinder.com ou org, je sais plus... ;-)
    Fichiers attachés Fichiers attachés

  7. #7
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2007
    Messages : 48
    Points : 27
    Points
    27
    Par défaut
    Merci pour toute vos réponse...
    ça vas me permettre d'avancer
    A bientôt je viendrais poster mon prog dans sa version finale
    ciao

  8. #8
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 54
    Points : 39
    Points
    39
    Par défaut
    Tient c'est bizare, j'aurai un pong à coder en 16bits en asm à la rentrée aussi
    Le mien est presque fini, mais y'a qu'un seul joueur pour l'instant (donc pas trop interessant...)

  9. #9
    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
    alors, pour coder un pong, la meilleure technique (et j'en ai essayé pas mal) est de creer une sorte de language objet.
    la balle est un objet vectoriel ( angle, vitesse), et sa routine, c'est de bouger
    une raquette, c'est un joueur, et sa routine est de bouger en fonction soit d'une touche, soit d'un truc IA-esque
    les murs aussi, ce sont des objets, qui ne bougent pas, ou peuvent bouger
    et la zone de sortie, c'est aussi un objet qui lui n'est la que pour detecter la sortie de la baballe

    donc, en assignant a chaque objet une routine, on peu facilement creer de nouvelles raquettes, augmenter le nombre de baballes...

    ha oui, joubliai, il faut les collisions, pour ça, il y a la balle et une liste d'objet
    à tester, et comme chaque objet possede aussi une routine d'action sur la baballe, ça marche, ou plutot, ça roule.

Discussions similaires

  1. Réponses: 0
    Dernier message: 29/04/2012, 17h15
  2. [Pygame]Gérer deux touches appuyées en même temps
    Par yetimothee dans le forum Programmation multimédia/Jeux
    Réponses: 2
    Dernier message: 19/11/2008, 20h13
  3. Réponses: 7
    Dernier message: 05/06/2006, 13h44
  4. Tester l'état de plusieurs touches du clavier en même temps
    Par wikers dans le forum Composants VCL
    Réponses: 7
    Dernier message: 11/11/2004, 09h13
  5. utiliser le même fichier dans plusieurs projets vc++6
    Par yannick_sch dans le forum MFC
    Réponses: 5
    Dernier message: 12/02/2004, 17h39

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