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

📄 sdl_sysjoystick.c

📁 SDL库 在进行视频显示程序spcaview安装时必须的库文件
💻 C
📖 第 1 页 / 共 2 页
字号:
			break;		default:			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_PAD0:		case PORTA_PAD1:		case PORTA_PAD2:		case PORTA_PAD3:		case PORTB_PAD0:		case PORTB_PAD1:		case PORTB_PAD2:		case PORTB_PAD3:			{				int numjoypad,i;								numjoypad = 0;				switch(numjoystick) {					case PORTA_PAD0:						numjoypad = 0;	break;					case PORTA_PAD1:						numjoypad = 1;	break;					case PORTA_PAD2:						numjoypad = 2;	break;					case PORTA_PAD3:						numjoypad = 3;	break;					case PORTB_PAD0:						numjoypad = 4;	break;					case PORTB_PAD1:						numjoypad = 5;	break;					case PORTB_PAD2:						numjoypad = 6;	break;					case PORTB_PAD3:						numjoypad = 7;	break;				}												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 const Uint16 joypad_masks[8*4]={	0xfffe, 0xfffd, 0xfffb, 0xfff7,	0xfff0, 0xfff1, 0xfff2, 0xfff3,	0xfff4, 0xfff5, 0xfff6, 0xfff8,	0xfff9, 0xfffa, 0xfffc, 0xffff,	0xffef, 0xffdf, 0xffbf, 0xff7f,	0xff0f, 0xff1f, 0xff2f, 0xff3f,	0xff4f, 0xff5f, 0xff6f, 0xff8f,	0xff9f, 0xffaf, 0xffcf, 0xffff};static void UpdateJoypads(void){	Uint16 tmp, i, j;	Uint32 cur_fire, cur_dir;	/*--- 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 joypads on teamtap port A */		for (i=0; i<4; i++) {		jp_joypads[i] = 0;		for (j=0; j<4; j++) {			JOYPAD_IO.directions = joypad_masks[(i*4)+j];			cur_fire = (~(JOYPAD_IO.fires) & 3)<<16;			cur_dir = (~(JOYPAD_IO.directions)>>8) & 15;			jp_joypads[i] |= cur_fire<<(j*2);			jp_joypads[i] |= cur_dir<<(j*4);		}	}	/* Update joypads on teamtap port B */		for (i=4; i<8; i++) {		jp_joypads[i] = 0;		for (j=0; j<4; j++) {			JOYPAD_IO.directions = joypad_masks[(i*4)+j];			cur_fire = (~(JOYPAD_IO.fires) & 0xc)<<14;			cur_dir = (~(JOYPAD_IO.directions)>>12) & 15;			jp_joypads[i] |= cur_fire<<(j*2);			jp_joypads[i] |= cur_dir<<(j*4);		}	}	JOYPAD_IO.directions=0xffff;}#endif /* SDL_JOYSTICK_MINT */

⌨️ 快捷键说明

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