Article View: comp.sys.amiga.tech
Article #10210Proportional joysticks
From: Barry A. Whitebook
Date: Sat, 05 Nov 1988 20:19
Date: Sat, 05 Nov 1988 20:19
127 lines
3532 bytes
3532 bytes
[eat this line -- please]
this is amiga!bart. as this subject keeps resurfacing in various venues i'm
going to post a some code to read prop joysticks using interrupt handlers.
/******************************************************************************
* $Header: propjoy.c,v 34.1 85/11/24 17:59:44 bart Exp $
******************************************************************************/
#include <exec/types.h>
#include <exec/nodes.h>
#include <exec/execbase.h>
#include <exec/execname.h>
#include <graphics/gfxbase.h>
#include <graphics/graphint.h>
#include <hardware/cia.h>
#include <hardware/custom.h>
#include <hardware/intbits.h>
#include <resources/potgo.h>
extern struct Custom custom;
#define V1_POINT_2 33
#define NUM_SERVERS 2
#define MAX_COUNT (UWORD)~1
#define POTGO &custom.potgo
#define POT0DAT &custom.pot0dat
#define POT1DAT &custom.pot1dat
#define HIGHINTPRI 127L
#define LOWINTPRI -127L
#define START_B 0
#define DATRX_B 8
#define DATRY_B 10
#define DATLX_B 12
#define DATLY_B 14
#define START_F (1L << START_B)
#define DATRX_F (1L << DATRX_B)
#define DATRY_F (1L << DATRY_B)
#define DATLX_F (1L << DATLX_B)
#define DATLY_F (1L << DATLY_B)
#define RPOTX (START_F | DATRX_F)
#define RPOTY (START_F | DATRY_F)
#define RPOTXY (START_F | DATRX_F | DATRY_F)
#define LPOTX (START_F | DATLX_F)
#define LPOTY (START_F | DATLY_F)
#define LPOTXY (START_F | DATLX_F | DATLY_F)
struct ExecBase *ExecBase = NULL;
struct GfxBase *GfxBase = NULL;
struct PotgoBase *PotgoBase = NULL;
UWORD oldbits = NULL;
UWORD potbits = NULL;
ULONG potdat = NULL;
struct Isrvstr server[NUM_SERVERS] = {NULL};
first_server(i)
int i;
{
potdat = *(ULONG *)POT0DAT;
WritePotgo(oldbits,((~1)<<8)|oldbits);
return(NULL);
}
second_server(i)
int i;
{
WritePotgo(potbits,((~1)<<8)|potbits);
return(NULL);
}
use(data)
ULONG data;
{
printf("use: data == %08lx\n",data);
}
main()
{
LONG error = FALSE;
struct Isrvstr *iserver[NUM_SERVERS];
LONG i;
server[0].is_Node.ln_Pri = HIGHINTPRI;
server[1].is_Node.ln_Pri = LOWINTPRI;
iserver[0] = &server[0];
iserver[1] = &server[1];
if((ExecBase = (struct ExecBase *)
OpenLibrary(EXECNAME,V1_POINT_2)) != NULL)
{
if((GfxBase = (struct GfxBase *)
OpenLibrary("graphics.library",V1_POINT_2)) != NULL)
{
if((PotgoBase =
OpenResource(POTGONAME,V1_POINT_2)) != NULL)
{
oldbits = ~(AllocPotBits(~1));
FreePotBits(~oldbits);
potbits = AllocPotBits(START_F);
Forbid();
iserver,first_server,0);
AddTOF(iserver[0],first_server,0);
iserver,second_server,1);
AddTOF(iserver[1],second_server,1);
Permit();
for(i=0; i < MAX_COUNT; i++)
{
WaitTOF();
use(propjoy);
}
Forbid();
for(i=0; i < NUM_SERVERS; i++)
{
RemTOF(iserver[i]);
}
Permit();
FreePotBits(potbits);
CloseLibrary(GfxBase);
}
else { error = TRUE; }
}
else { error = TRUE; }
CloseLibrary(ExecBase);
} else { error = TRUE; }
exit(error);
}
Technical Details
Message-ID:
<3086@amiga.UUCP>Path:
arc1-ca.pugleaf.net!utzoo!attcan!uunet!husc6!bloom-beacon!apple!claris!ames!oliveb!amiga!bartShow Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!utzoo!attcan!uunet!husc6!bloom-beacon!apple!claris!ames!oliveb!amiga!bart From: bart@amiga.UUCP (Barry A. Whitebook) Newsgroups: comp.sys.amiga.tech Subject: Proportional joysticks Keywords: interrupt handler Message-ID: <3086@amiga.UUCP> Date: 5 Nov 88 20:19:09 GMT Reply-To: bart@amiga.UUCP (Barry A. Whitebook) Organization: Commodore-Amiga Inc, Los Gatos CA Lines: 127