851 /* Demonstration of reading joy stick postition uses BIOS function for reading the stick; */ #include #include #include #include #include "cursor.c" typedef struct { int sw1,sw2; int x,y; int cenx,ceny; } joy_stick; joy_stick joy; #define keypressed (bioskey(1) != 0) #define kb_clear() while keypressed bioskey(0); union REGS inregs,outregs; struct SREGS segregs; void GotoXY(int x,int y) { union REGS r; /* Set XY position */ r.h.ah = 2; r.h.bh = 0; /* Assume Video Page 0 */ r.h.dh = (char) y; r.h.dl = (char) x; int86(16,&r,&r); } disp_stick(int line) { GotoXY(0,line); printf("sw1 %d sw2 %d",joy.sw1,joy.sw2); GotoXY(0,line+1); printf("x %6d y %6d",joy.x,joy.y); } int read_buttons() { inregs.h.ah = 0x84; inregs.x.dx = 0; int86x(0x15,&inregs,&outregs,&segregs); joy.sw1 = ((outregs.h.al >> 4) & 1) == 0; joy.sw2 = ((outregs.h.al >> 5) & 1) == 0; return (int)outregs.h.al; } read_stick() { int jx,jy; inregs.h.ah = 0x84; inregs.x.dx = 1; int86x(0x15,&inregs,&outregs,&segregs); jx = outregs.x.ax; jy = outregs.x.bx; joy.x = jx-joy.cenx; joy.y = jy-joy.ceny; } center_stick() { int init_swa,init_swb,swa,swb; int c,retval; printf("Joystick testing program BIOS version\n"); printf("--------------------------------------\n\n"); printf("Center joystick and press fire\n"); kb_clear(); c = read_buttons(); init_swa = c & 0x30; init_swb = c & 0xc0; do { c = read_buttons(); swa = c & 0x30; swb = c & 0xc0; } while ((swa == init_swa) && (swb == init_swb)); if (swa != init_swa) { printf("Joystick 1 selected\n"); retval = 1; } else if (swb != init_swb) { printf("Joystick 2 selected\n"); retval = 2; } joy.cenx = joy.ceny = 0; read_stick(joy); joy.cenx = joy.x; joy.ceny = joy.y; } main() { int k; clrscr(); HideCur(); center_stick(); while (!keypressed) { read_buttons(); read_stick(); disp_stick(6); } clrscr(); ShowCur(); } . 0