home *** CD-ROM | disk | FTP | other *** search
- Xref: sparky comp.os.msdos.programmer:10710 rec.games.programmer:4720
- Path: sparky!uunet!charon.amdahl.com!pacbell.com!sgiblab!sdd.hp.com!elroy.jpl.nasa.gov!usc!news.service.uci.edu!balboa.eng.uci.edu!cnc
- From: cnc@balboa.eng.uci.edu (Christopher Christensen)
- Subject: Re: Joystick Routines Needed
- Nntp-Posting-Host: balboa.eng.uci.edu
- Message-ID: <2B093C3C.10748@news.service.uci.edu>
- Newsgroups: comp.os.msdos.programmer,rec.games.programmer
- Organization: University of California, Irvine
- Lines: 108
- Date: 17 Nov 92 18:38:52 GMT
- References: <1992Nov16.211134.29296@jarvis.csri.toronto.edu>
-
-
- Here's a joystick routine I wrote. Hope it helps.
-
- ----------------------------- cut -------------------------------
- /*
- "jstk.c" -- Joystick demo code
-
- read_jstk() is an assembly language routine which does the actual
- reading. It puts the values in jstk*_*. The values will range
- between 0 and jrange. The jsense value controls the joystick
- sensitivity (the lower the value, the more sensitive the reading).
- The jsense value will have to be adjusted to suit the cpu speed.
- Oh, the status of the 4 buttons is returned in the 4 LSBs of the
- return value of read_jstk().
-
- make recipe (Borland C):
- bcc jstk.c jstka.asm
-
- */
-
- extern int jstk1_x;
- extern int jstk1_y;
- extern int jstk2_x;
- extern int jstk2_y;
- extern int jsense;
- extern int jrange;
- extern read_jstk();
-
- int main()
- {
- int button, button2;
- int new_button;
-
- button=0;
- jsense=20;
- jrange=500; /* arbitrary */
- while(!kbhit())
- {
- button2=button;
- button=read_jstk();
- new_button=(button^button2)&button;
- if (new_button&1) jsense--;
- if (new_button&2) jsense++;
- if (jsense<1) jsense=1;
- printf("%04x %04x %04x %04x s=%d\n",
- jstk1_x, jstk1_y, jstk2_x, jstk2_y, jsense);
- }
- return(0);
- }
- ----------------------------- cut -------------------------------
-
- ----------------------------- cut -------------------------------
- ; "jstka.asm"
- GAMEPORT = 201h
-
- IDEAL
- MODEL small
-
- DATASEG
- PUBLIC _jstk1_x, _jstk1_y, _jstk2_x, _jstk2_y
- PUBLIC _jsense, _jrange
-
- _jstk1_x dw 0 ; joystick 1 x-axis
- _jstk1_y dw 0 ; joystick 1 y-axis
- _jstk2_x dw 0 ; joystick 2 x-axis
- _jstk2_y dw 0 ; joystick 2 y-axis
- _jsense dw 1 ; joystick sensitivity
- _jrange dw 300 ; joystick range
- CODESEG
-
- PUBLIC _read_jstk
- PROC _read_jstk
- mov dx,GAMEPORT
- out dx,al ;start timer
- xor ax,ax
- mov [_jstk1_x],ax ;initialize to zero
- mov [_jstk1_y],ax ;
- mov [_jstk2_x],ax ;
- mov [_jstk2_y],ax ;
- mov cx,[_jrange] ;# times to iterate rangeloop
- rangeloop:
- mov bx,[_jsense]
- delay:
- in al,dx
- dec bx
- jnz delay
-
- shr al,1
- adc [_jstk1_x],bx
- shr al,1
- adc [_jstk1_y],bx
- shr al,1
- adc [_jstk2_x],bx
- shr al,1
- adc [_jstk2_y],bx
- loop rangeloop
- not al
- and ax,0fh ;return the button status in ax
- ret
- ENDP _read_jstk
-
- END
- ----------------------------- cut -------------------------------
-
-
- --
- | Christopher | Computer Engineering graduate student, UC Irvine |
- | Christensen | cnc@balboa.eng.uci.edu |
-