C Code To Interface Game port Joystick

Article by: Ravee H Bhalla

Program To Read Joystick Button Values


/* Program to read joystick button values */
#include&ltstdio.h>
#include&ltconio.h>
#include&ltdos.h>

union REGS in, out;

int main()
{
 unsigned char al, j1b1, j1b2, j2b1, j2b2;
 in.h.ah = 0x84; // function number
 in.x.dx = 0x00; // sub-function number

 while(!kbhit())
 {
  int86(0x15,&in,&out); // interrupt 15h
  al = out.h.al; // output obtained in al register

  // 0 indicates pressed
  if((al&0x80) == 0x00) // bit d7 corresponds to button1 of joystick1
   j1b1 = 1;
  else
   j1b1 = 0;

  if((al&0x40) == 0x00) // bit d6 corresponds to button2 of joystick1
   j1b2 = 1;
  else
   j1b2 = 0;

  if((al&0x20) == 0x00) // bit d5 corresponds to button1 of joystick2
   j2b1 = 1;
  else
   j2b1 = 0;

  if((al&0x10) == 0x00) // bit d4 corresponds to button1 of joystick2
   j2b2 = 1;
  else
   j2b2 = 0;

  printf("(Joystick 1)Button 1: %d Button 2: %d   ",j1b1,j1b2);
  printf("(Joystick 2)Button 1: %d Button 2: %d\n",j2b1,j2b2);
 }

 getch();
 return 0;
}

Program To Read Joystick (X,Y) Co-ordinates

/* Program to read joystick (x,y) coordinates */
#include&ltstdio.h>
#include&ltconio.h>
#include&ltdos.h>

union REGS in, out;

int main()
{
 unsigned char j1x, j1y, j2x, j2y;
 in.h.ah = 0x84; // function number
 in.x.dx = 0x01; // sub-function number

 while(!kbhit())
 {
  int86(0x15,&in,&out); // interrupt 15h

  j1x = out.x.ax; // x coordinate of joystick 1
  j1y = out.x.bx; // y coordinate of joystick 1
  j2x = out.x.cx; // x coordinate of joystick 2
  j2y = out.x.dx; // y coordinate of joystick 2

  printf("(Joystick 1) X: %d Y: %d   ",j1x,j1y);
  printf("(Joystick 2) X: %d Y: %d\n",j2x,j2y);
  delay(50);
 }

 getch();
 return 0;
}