Les Chevaliers de Malte/Développeur - Assembleur et Pascal - Manette de jeux


Introduction

La manette de jeux est un périphérique rattacher à carte de son, à un contrôleur IDE ou tous simplement à carte de manette de jeux. Leur programmation se faisait à l'origine de façon directe par les ports d'Entrée/Sortie et à partir de l'arrivée de PC/AT d'IBM, un support BIOS par l'entremise de l'interruption 15h fut offert aux programmeurs.

On peut connaître l'état des boutons des deux manettes de jeux avec la fonction suivante;

Function GetJoyButton:Byte;Assembler;ASM
 MOV DX,0201h
 IN AL,DX
 NOT AL
 MOV CL,4
 SHR AL,CL
END;

Cette fonction retournera les bits suivant:

Bits Description
0

Vaut 1 si le bouton A de la première manette de jeux est enfoncée

1

Vaut 1 si le bouton B de la première manette de jeux est enfoncée

2

Vaut 1 si le bouton A de la deuxième manette de jeux est enfoncée

3

Vaut 1 si le bouton B de la deuxième manette de jeux est enfoncée



Pour obtenir la position d'une manette de jeux on utilisera la fonction suivante:

Function JoyPos(Axe:Byte):Word;Assembler;ASM
 MOV CL,Axe
 MOV BX,1
 SHL BX,CL
 MOV CX,0FFFFh
 XOR AX,AX
 XOR SI,SI
 MOV DX,0201h
 CLI
 OUT DX,AL
 @@Next:
 IN AL,DX
 TEST AL,BL
 JE @@Done
INC SI
LOOP @@Next
@@Done:
STI
 MOV AX,SI
@@End:
END;

Le paramètre axe aura la signification suivante:

Valeur Description
0

Axe horizontal de la première manette de jeux

1

Axe vertical de la première manette de jeux

2

Axe horizontal de la deuxième manette de jeux

3

Axe vertical de la deuxième manette de jeux



Cette même procédure pourra utiliser la méthode suivante pour faire un accès au BIOS plutôt:

Function JoyPos(Axe:Byte):Word;Assembler;ASM
 MOV AH,084h
 MOV DX,01h
 INT 015h
 CMP Axe,0
 JE @@End
 MOV BX,AX
 CMP Axe,1
 JE @@End
 MOV CX,AX
 CMP Axe,2
 JE @@End
 MOV DX,AX
@@End:
END;


Dernière mise à jour: Vendredi, le 27 janvier 2006