Précédent   Forum du club des développeurs et IT Pro > Autres langages > Assembleur > x86 16-bits
x86 16-bits Architecture x86 16 bits et ses outils (assembleurs, debuggers, émulateurs...)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 17/06/2012, 13h44   #1
col.s
Invité de passage
 
Femme Sophie COLLIN
Étudiant
Inscription : juin 2012
Messages : 1
Détails du profil
Informations personnelles :
Nom : Femme Sophie COLLIN
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2012
Messages : 1
Points : 0
Points : 0
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 :
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… )
col.s est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/06/2012, 10h15   #2
Forthman
Membre expérimenté
 
Avatar de Forthman
 
Homme François
conception mécanique
Inscription : janvier 2005
Messages : 330
Détails du profil
Informations personnelles :
Nom : Homme François
Âge : 37
Localisation : France, Tarn et Garonne (Midi Pyrénées)

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

Informations forums :
Inscription : janvier 2005
Messages : 330
Points : 532
Points : 532
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+
Forthman est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/06/2012, 00h16   #3
edfed
Membre chevronné
 
Avatar de edfed
 
être humain
Inscription : décembre 2007
Messages : 471
Détails du profil
Informations professionnelles :
Activité : être humain

Informations forums :
Inscription : décembre 2007
Messages : 471
Points : 619
Points : 619
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.
__________________
http://www.pending.me.uk/nmc/bla_1356091200.png
Vivement 21/12/2012
edfed est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2012, 07h19   #4
Forthman
Membre expérimenté
 
Avatar de Forthman
 
Homme François
conception mécanique
Inscription : janvier 2005
Messages : 330
Détails du profil
Informations personnelles :
Nom : Homme François
Âge : 37
Localisation : France, Tarn et Garonne (Midi Pyrénées)

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

Informations forums :
Inscription : janvier 2005
Messages : 330
Points : 532
Points : 532
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
Forthman est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 16h05.


 
 
 
 
Partenaires

Hébergement Web