⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sdl_sysjoystick.c

📁 linux下面的一个开源的多媒体中间件
💻 C
📖 第 1 页 / 共 2 页
字号:
			joystick->nhats=1;			joystick->nbuttons=1;			break;	}	return(0);}void SDL_SYS_JoystickUpdate(SDL_Joystick *joystick){	int numjoystick;	Uint8 hatstate;	Uint32 curstate,prevstate;		numjoystick=GetEnabledAtariJoystick(joystick->index);	if (numjoystick==-1)		return;	prevstate = atarijoysticks[numjoystick].prevstate;	if (joypad_ports_enabled) {		Supexec(UpdateJoypads);	}	switch (numjoystick) {		case IKBD_JOY1:		case XBIOS_JOY1:			{				curstate = 0;				if (numjoystick==IKBD_JOY1) {					curstate = SDL_AtariIkbd_joystick & 0xff;				}				if (numjoystick==XBIOS_JOY1) {					curstate = SDL_AtariXbios_joystick & 0xff;				}				if (curstate != prevstate) {					hatstate = SDL_HAT_CENTERED;					if (curstate & IKBD_JOY_LEFT) {						hatstate |= SDL_HAT_LEFT;					}					if (curstate & IKBD_JOY_RIGHT) {						hatstate |= SDL_HAT_RIGHT;					}					if (curstate & IKBD_JOY_UP) {						hatstate |= SDL_HAT_UP;					}					if (curstate & IKBD_JOY_DOWN) {						hatstate |= SDL_HAT_DOWN;					}					SDL_PrivateJoystickHat(joystick, 0, hatstate);					/* Button */					if ((curstate & IKBD_JOY_FIRE) && !(prevstate & IKBD_JOY_FIRE)) {						SDL_PrivateJoystickButton(joystick,0,SDL_PRESSED);					}					if (!(curstate & IKBD_JOY_FIRE) && (prevstate & IKBD_JOY_FIRE)) {						SDL_PrivateJoystickButton(joystick,0,SDL_RELEASED);					}				}				atarijoysticks[numjoystick].prevstate = curstate;			}			break;		case PORTA_PAD:		case PORTB_PAD:			{				int numjoypad,i;								numjoypad=0;				if (numjoystick==PORTB_PAD) numjoypad=1;								curstate=jp_joypads[numjoypad];				if (curstate!=prevstate) {					hatstate = SDL_HAT_CENTERED;					if (curstate & (1<<JP_LEFT)) {						hatstate |= SDL_HAT_LEFT;					}					if (curstate & (1<<JP_RIGHT)) {						hatstate |= SDL_HAT_RIGHT;					}					if (curstate & (1<<JP_UP)) {						hatstate |= SDL_HAT_UP;					}					if (curstate & (1<<JP_DOWN)) {						hatstate |= SDL_HAT_DOWN;					}					SDL_PrivateJoystickHat(joystick, 0, hatstate);					/* Buttons */					for (i=0;i<JP_NUM_BUTTONS;i++) {						int button;												button=1<<jp_buttons[i];						if ((curstate & button) && !(prevstate & button)) {							SDL_PrivateJoystickButton(joystick,i,SDL_PRESSED);						}						if (!(curstate & button) && (prevstate & button)) {							SDL_PrivateJoystickButton(joystick,i,SDL_RELEASED);						}					}				}				atarijoysticks[numjoystick].prevstate = curstate;			}			break;		case PORTA_JOY0:		case PORTA_JOY1:		case PORTB_JOY0:		case PORTB_JOY1:			{				int fire_shift=0,dir_shift=0;								if (numjoystick==PORTA_JOY0) {	fire_shift=0; dir_shift=0; }				if (numjoystick==PORTA_JOY1) {	fire_shift=1; dir_shift=4; }				if (numjoystick==PORTB_JOY0) {	fire_shift=2; dir_shift=8; }				if (numjoystick==PORTB_JOY1) {	fire_shift=3; dir_shift=12; }				curstate = (jp_directions>>dir_shift) & 15;				curstate |= ((jp_fires>>fire_shift) & 1)<<4;				if (curstate != prevstate) {					hatstate = SDL_HAT_CENTERED;					if (curstate & PORT_JS_LEFT) {						hatstate |= SDL_HAT_LEFT;					}					if (curstate & PORT_JS_RIGHT) {						hatstate |= SDL_HAT_RIGHT;					}					if (curstate & PORT_JS_UP) {						hatstate |= SDL_HAT_UP;					}					if (curstate & PORT_JS_DOWN) {						hatstate |= SDL_HAT_DOWN;					}					SDL_PrivateJoystickHat(joystick, 0, hatstate);					/* Button */					if ((curstate & PORT_JS_FIRE) && !(prevstate & PORT_JS_FIRE)) {						SDL_PrivateJoystickButton(joystick,0,SDL_PRESSED);					}					if (!(curstate & PORT_JS_FIRE) && (prevstate & PORT_JS_FIRE)) {						SDL_PrivateJoystickButton(joystick,0,SDL_RELEASED);					}				}				atarijoysticks[numjoystick].prevstate = curstate;			}			break;		case PORTA_LP:			{				int i;				curstate = jp_lightpens[0]>>1;				curstate |= (jp_lightpens[1]>>1)<<15;				curstate |= (jp_fires & 3)<<30;				if (curstate != prevstate) {					/* X axis */					SDL_PrivateJoystickAxis(joystick,0,jp_lightpens[0] ^ 0x8000);					/* Y axis */					SDL_PrivateJoystickAxis(joystick,1,jp_lightpens[1] ^ 0x8000);					/* Buttons */					for (i=0;i<2;i++) {						int button;												button=1<<(30+i);						if ((curstate & button) && !(prevstate & button)) {							SDL_PrivateJoystickButton(joystick,i,SDL_PRESSED);						}						if (!(curstate & button) && (prevstate & button)) {							SDL_PrivateJoystickButton(joystick,i,SDL_RELEASED);						}					}				}				atarijoysticks[numjoystick].prevstate = curstate;			}			break;		case PORTA_ANPAD:		case PORTB_ANPAD:			{				int numpaddle, i;								numpaddle=0<<1;				if (numjoystick==PORTB_ANPAD) numpaddle=1<<1;				curstate = jp_paddles[numpaddle]>>1;				curstate |= (jp_paddles[numpaddle+1]>>1)<<15;				curstate |= ((jp_fires>>numpaddle) & 3)<<30;				if (curstate != prevstate) {					/* X axis */					SDL_PrivateJoystickAxis(joystick,0,jp_paddles[numpaddle] ^ 0x8000);					/* Y axis */					SDL_PrivateJoystickAxis(joystick,1,jp_paddles[numpaddle+1] ^ 0x8000);					/* Buttons */					for (i=0;i<2;i++) {						int button;												button=1<<(30+i);						if ((curstate & button) && !(prevstate & button)) {							SDL_PrivateJoystickButton(joystick,i,SDL_PRESSED);						}						if (!(curstate & button) && (prevstate & button)) {							SDL_PrivateJoystickButton(joystick,i,SDL_RELEASED);						}					}				}				atarijoysticks[numjoystick].prevstate = curstate;			}			break;#if 0		case PARA_JOY0:		case PARA_JOY1:			break;#endif	};	return;}void SDL_SYS_JoystickClose(SDL_Joystick *joystick){	return;}void SDL_SYS_JoystickQuit(void){	SDL_numjoysticks=0;	return;}/*--- Joypad I/O read/write interface ---*/#define JOYPAD_IO_BASE (0xffff9200)struct JOYPAD_IO_S {	Uint16 fires;	Uint16 directions;	Uint16 dummy1[6];	Uint16 paddles[4];	Uint16 dummy2[4];	Uint16 lightpens[2];};#define JOYPAD_IO ((*(volatile struct JOYPAD_IO_S *)JOYPAD_IO_BASE))static void UpdateJoypads(void){	Uint16 tmp;	/*--- This function is called in supervisor mode ---*/	/* Update joysticks */	jp_fires = (~(JOYPAD_IO.fires)) & 15;	jp_directions = (~(JOYPAD_IO.directions));		/* Update lightpen */	tmp = JOYPAD_IO.lightpens[0] & 1023;	jp_lightpens[0] = (tmp<<6) | (tmp>>4);	tmp = JOYPAD_IO.lightpens[1] & 1023;	jp_lightpens[1] = (tmp<<6) | (tmp>>4);		/* Update paddles */	tmp = (JOYPAD_IO.paddles[0] & 255);	jp_paddles[0] = (tmp<<8) | tmp;	tmp = (JOYPAD_IO.paddles[1] & 255);	jp_paddles[1] = (tmp<<8) | tmp;	tmp = (JOYPAD_IO.paddles[2] & 255);	jp_paddles[2] = (tmp<<8) | tmp;	tmp = (JOYPAD_IO.paddles[3] & 255);	jp_paddles[3] = (tmp<<8) | tmp;	/* Update joypad 0 */		JOYPAD_IO.directions=0xfffe;	jp_joypads[0]=((~(JOYPAD_IO.fires)) & 3)<<(16);	JOYPAD_IO.directions=0xfffe;	jp_joypads[0] |= ((~(JOYPAD_IO.directions))>>8) & 15;	JOYPAD_IO.directions=0xfffd;	jp_joypads[0] |= ((~(JOYPAD_IO.fires)) & 3)<<(16+2);	JOYPAD_IO.directions=0xfffd;	jp_joypads[0] |= (((~(JOYPAD_IO.directions))>>8) & 15)<<4;	JOYPAD_IO.directions=0xfffb;	jp_joypads[0] |= ((~(JOYPAD_IO.fires)) & 3)<<(16+4);	JOYPAD_IO.directions=0xfffb;	jp_joypads[0] |= (((~(JOYPAD_IO.directions))>>8) & 15)<<8;	JOYPAD_IO.directions=0xfff7;	jp_joypads[0] |= ((~(JOYPAD_IO.fires)) & 3)<<(16+6);	JOYPAD_IO.directions=0xfff7;	jp_joypads[0] |= (((~(JOYPAD_IO.directions))>>8) & 15)<<12;	/* Update joypad 1 */		JOYPAD_IO.directions=0xffef;	jp_joypads[1]=((~(JOYPAD_IO.fires)) & (3<<2))<<(16-2);	JOYPAD_IO.directions=0xffef;	jp_joypads[1] |= ((~(JOYPAD_IO.directions))>>12) & 15;	JOYPAD_IO.directions=0xffdf;	jp_joypads[1] |= ((~(JOYPAD_IO.fires)) & (3<<2))<<(16);	JOYPAD_IO.directions=0xffdf;	jp_joypads[1] |= (((~(JOYPAD_IO.directions))>>12) & 15)<<4;	JOYPAD_IO.directions=0xffbf;	jp_joypads[1] |= ((~(JOYPAD_IO.fires)) & (3<<2))<<(16+2);	JOYPAD_IO.directions=0xffbf;	jp_joypads[1] |= (((~(JOYPAD_IO.directions))>>12) & 15)<<8;	JOYPAD_IO.directions=0xff7f;	jp_joypads[1] |= ((~(JOYPAD_IO.fires)) & (3<<2))<<(16+4);	JOYPAD_IO.directions=0xff7f;	jp_joypads[1] |= (((~(JOYPAD_IO.directions))>>12) & 15)<<12;}#endif /* SDL_JOYSTICK_MINT */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -