亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ps2mouse.c

?? ps2鼠標驅動程序
?? C
字號:
#include "includes.h"
#include "i8259.h"
#include "ps2mouse.h"
#include "ps2kb.h"
#include "display/disp.h"
#include "display/graphics.h"

INT8U mousetype;
MOUSE_STRUC mouse;

extern WINDOW win;
extern XWINDOW xwin;

extern far INT16U PwrOn;

int InitPs2Mouse(void)
{
	INT8U v;
	
	setvect(PS2MOUSE_VECT, Ps2MouseInt);
	setvect(0x33, int33);
	outportb(PS2MOUSE_PORT_D, 0xae);
	if(PwrOn!=0x55aa){
		ps2get(PS2MOUSE_PORT_D, 0xffffUL);		// AA self-test passed (at power on)
		ps2get(PS2MOUSE_PORT_D, 0xffffUL);		// 00 mouse ID(at power on)
	}
 	putch('.');
    /* send 3 times reset commands */	
    	do{
		ps2sndcmd(PS2MOUSE_PORT_D, 0xff);	// reset command
		v = ps2get(PS2MOUSE_PORT_D, 0xffff);	// FA Acknowledge
		if(v==0xff)
			return -1;
	}while(v!=0xfa);
	if(ps2get(PS2MOUSE_PORT_D, 0)==0xff)		// AA self-test passed
		return -1;
	if(ps2get(PS2MOUSE_PORT_D, 0)==0xff)		// 00 mouse ID
		return -1;
	do{	
		ps2sndcmd(PS2MOUSE_PORT_D, 0xff);		// reset command
		v = ps2get(PS2MOUSE_PORT_D, 0);		// FA Acknowledge
		if(v==0xff)
			return -1;
	}while(v!=0xfa);
	if(ps2get(PS2MOUSE_PORT_D, 0)==0xff)		// AA self-test passed
		return -1;
	if(ps2get(PS2MOUSE_PORT_D, 0)==0xff)		// 00 mouse ID
		return -1;
	do{
		ps2sndcmd(PS2MOUSE_PORT_D, 0xff);		// reset command
		v = ps2get(PS2MOUSE_PORT_D, 0);		// FA Acknowledge
		if(v==0xff)
			return -1;
	}while(v!=0xfa);
	if(ps2get(PS2MOUSE_PORT_D, 0)==0xff)		// AA self-test passed
		return -1;
	
	if(ps2get(PS2MOUSE_PORT_D, 0)==0xff)		// 00 mouse ID
		return -1;
    /* Attempt to Enter Microsoft scrolling Mouse mode */	
	do{
		ps2sndcmd(PS2MOUSE_PORT_D, 0xf3);	// set sample rate
		v = ps2get(PS2MOUSE_PORT_D, 0);
		if(v==0xff)
			return -1;
	}while(v!=0xfa);
	putch('.');
	do{
		ps2sndcmd(PS2MOUSE_PORT_D, 0xc8);			
		v = ps2get(PS2MOUSE_PORT_D, 0);
		if(v==0xff)
			return -1;
	}while(v!=0xfa);
	
	do{
		ps2sndcmd(PS2MOUSE_PORT_D, 0xf3);			
		v = ps2get(PS2MOUSE_PORT_D, 0);
		if(v==0xff)
			return -1;
	}while(v!=0xfa);
	
	do{
		ps2sndcmd(PS2MOUSE_PORT_D, 0x64);			
		v = ps2get(PS2MOUSE_PORT_D, 0);
		if(v==0xff)
			return -1;
	}while(v!=0xfa);
	
	do{
		ps2sndcmd(PS2MOUSE_PORT_D, 0xf3);			
		v = ps2get(PS2MOUSE_PORT_D, 0);
		if(v==0xff)
			return -1;
	}while(v!=0xfa);
	
	do{
		ps2sndcmd(PS2MOUSE_PORT_D, 0x50);			
		v = ps2get(PS2MOUSE_PORT_D, 0);
		if(v==0xff)
			return -1;
	}while(v!=0xfa);
	
	do{	
		ps2sndcmd(PS2MOUSE_PORT_D, 0xf2);			
		v = ps2get(PS2MOUSE_PORT_D, 0);
		if(v==0xff)
			return -1;
	}while(v!=0xfa);
	mousetype = ps2get(PS2MOUSE_PORT_D, 0);			// Response 03 if microsoft scrolling mouse, Response 00 if not
	if(mousetype==0xff)
		return -1;
	putch('.');
    /* Attempt to Enter Microsoft 5-button scrolling mouse mode */	
   	do{
		ps2sndcmd(PS2MOUSE_PORT_D, 0xf3);
		v = ps2get(PS2MOUSE_PORT_D, 0);
		if(v==0xff)
			return -1;
	}while(v!=0xfa);
	
	do{
		ps2sndcmd(PS2MOUSE_PORT_D, 0xc8);
		v = ps2get(PS2MOUSE_PORT_D, 0);
		if(v==0xff)
			return -1;
	}while(v!=0xfa);
	
	do{
		ps2sndcmd(PS2MOUSE_PORT_D, 0xf3);			
		v = ps2get(PS2MOUSE_PORT_D, 0);		
		if(v==0xff)
			return -1;	
	}while(v!=0xfa);
	
	do{
		ps2sndcmd(PS2MOUSE_PORT_D, 0xc8);			
		v = ps2get(PS2MOUSE_PORT_D, 0);	
		if(v==0xff)
			return -1;		
	}while(v!=0xfa);
	
	do{	
		ps2sndcmd(PS2MOUSE_PORT_D, 0xf3);			
		v = ps2get(PS2MOUSE_PORT_D, 0);	
		if(v==0xff)
			return -1;		
	}while(v!=0xfa);
	
	do{
		ps2sndcmd(PS2MOUSE_PORT_D, 0x50);			
		v = ps2get(PS2MOUSE_PORT_D, 0);	
		if(v==0xff)
			return -1;		
	}while(v!=0xfa);
	
	do{
		ps2sndcmd(PS2MOUSE_PORT_D, 0xf2);			
		v = ps2get(PS2MOUSE_PORT_D, 0);
		if(v==0xff)
			return -1;
	}while(v!=0xfa);
	mousetype = ps2get(PS2MOUSE_PORT_D, 0);			// Response 04 if 5-button scrolling mouse
   	if(mousetype == 0xff)
   		return -1;
   	do{	
		ps2sndcmd(PS2MOUSE_PORT_D, 0xf3);	
		v = ps2get(PS2MOUSE_PORT_D, 0);		
		if(v==0xff)
			return -1;	
	}while(v!=0xfa);
	
	do{
		ps2sndcmd(PS2MOUSE_PORT_D, 0x0a);	
		v = ps2get(PS2MOUSE_PORT_D, 0);	
		if(v==0xff)
			return -1;		
	}while(v!=0xfa);
	
	do{
		ps2sndcmd(PS2MOUSE_PORT_D, 0xf2);			
		v = ps2get(PS2MOUSE_PORT_D, 0);	
		if(v==0xff)
			return -1;		
	}while(v!=0xfa);
	if(ps2get(PS2MOUSE_PORT_D, 0)==0xff)		// 00 mouse ID
		return -1;
	putch('.');
	
	do{
		ps2sndcmd(PS2MOUSE_PORT_D, 0xe8);	
		v = ps2get(PS2MOUSE_PORT_D, 0);	
		if(v==0xff)
			return -1;
	}while(v!=0xfa);
	
	do{
		ps2sndcmd(PS2MOUSE_PORT_D, 0x03);	
		v = ps2get(PS2MOUSE_PORT_D, 0);		
		if(v==0xff)
			return -1;	
	}while(v!=0xfa);
	do{
		ps2sndcmd(PS2MOUSE_PORT_D, 0xe6);	
		v = ps2get(PS2MOUSE_PORT_D, 0);	
		if(v==0xff)
			return -1;		
	}while(v!=0xfa);
	
	do{
		ps2sndcmd(PS2MOUSE_PORT_D, 0xf3);	
		v = ps2get(PS2MOUSE_PORT_D, 0);	
		if(v==0xff)
			return -1;		
	}while(v!=0xfa);
	putch('.');
	do{
		ps2sndcmd(PS2MOUSE_PORT_D, 0x28);	
		v = ps2get(PS2MOUSE_PORT_D, 0);	
		if(v==0xff)
			return -1;
	}while(v!=0xfa);
	
	do{
		ps2sndcmd(PS2MOUSE_PORT_D, 0xf4);	
		v = ps2get(PS2MOUSE_PORT_D, 0);
		if(v==0xff)
			return -1;
	}while(v!=0xfa);
	putch('.');
	return 0;
}

void interrupt Ps2MouseInt(void)
{
	INT8 *mv;
	INT8 i, Bytes;
	
	Bytes = 3;
	mv = (INT8*)&mouse;
	if(mousetype)
		Bytes = 4;
	for(i=0;i<Bytes;i++){
		while(!(inportb(PS2MOUSE_PORT_S)&1));
		*mv++ = inportb(PS2MOUSE_PORT_D);
	}
	if(Bytes==3)
		*mv = 0;
	xwin.mcurx += mouse.XMovement;
	xwin.mcury -= mouse.YMovement;
	if(xwin.mcurx<xwin.left)
		xwin.mcurx = xwin.left;
	if(xwin.mcurx>=xwin.right)
		xwin.mcurx = xwin.right;
	if(xwin.mcury<xwin.top)
		xwin.mcury = xwin.top;
	if(xwin.mcury>=xwin.bottom)
		xwin.mcury = xwin.bottom;
	mouse.leftclickcnt += mouse.LeftBtn;
	mouse.rightclickcnt += mouse.RightBtn;
	mouse.middleclickcnt += mouse.MiddleBtn;
	eoi();
}

#pragma argsused
void interrupt int33(INT16U bp, INT16U di, INT16U si,
			INT16U ds, INT16U es, INT16U dx, 
			INT16U cx, INT16U bx, INT16U ax)
{
	switch(ax){
		case 1:
			if(!mouse.visible){
				GraCursor(xwin.mcurx, xwin.mcury, xwin.crsp);
				xwin.oldmcurx = xwin.mcurx;
				xwin.oldmcury = xwin.mcury;
				mouse.visible = 1;
			}
			break;
		case 2:
			if(mouse.visible){
				GraCursor(xwin.oldmcurx, xwin.oldmcury, xwin.crsp);
				mouse.visible = 0;
			}
			break;
		case 3:
			bx = 0;
			bx = mouse.LeftBtn | (mouse.RightBtn<<1) | (mouse.MiddleBtn<<2);
			cx = xwin.mcurx;
			dx = xwin.mcury;	
			break;
		case 4:
			xwin.mcurx = cx;
			xwin.mcury = dx;
			xcursor();
			break;
		case 5:
		case 6:
			ax = mouse.LeftBtn | (mouse.RightBtn<<1) | (mouse.MiddleBtn<<2);
			if(bx==0)
				bx = mouse.leftclickcnt;
			else if (bx==1)
				bx = mouse.rightclickcnt;
			else if (bx==2)
				bx = mouse.rightclickcnt;
			cx = xwin.mcurx;
			dx = xwin.mcury;
			mouse.leftclickcnt = 0;
			mouse.rightclickcnt = 0;
			mouse.middleclickcnt = 0;
			break;
		case 7:
			xwin.left = cx;
			xwin.right = dx;
			break;
		case 8:
			xwin.top = cx;
			xwin.bottom = dx;
			break;
		case 9:
		        /*
		         * 光標數據格式說明: 此圖形光標數據格式不兼容標準鼠標數據格式
		         * 支持小光標(8*y)和大光標(16*y), y的值不定
		         * 數據格式:
		         * 第一個字指明本光標是8*y還是16*y
		         * 如果是8*y則第一個字數據為0001, 否則為0002
		         * 其他為鼠標數據字節
		         * 
		         */
			xwin.mcurx = bx;
			xwin.mcury = cx;
			xwin.crsp = MK_FP(es, dx);
			break;
		default:
			break;
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品久久夜| 亚洲午夜激情网站| 91精品国产综合久久精品| 欧美xxx久久| 欧美经典一区二区| 亚洲精品欧美专区| 日韩成人精品在线观看| 懂色av一区二区在线播放| 一本到不卡免费一区二区| 欧美一区二区视频免费观看| 日韩欧美高清在线| 精品免费99久久| 一区二区久久久| 精久久久久久久久久久| 波波电影院一区二区三区| 91福利视频久久久久| 日韩一级黄色大片| 国产精品对白交换视频| 亚洲韩国精品一区| 国产在线精品视频| 欧美日韩二区三区| 亚洲欧洲日韩综合一区二区| 亚洲第一av色| 99久精品国产| 日韩精品中文字幕在线不卡尤物 | 捆绑紧缚一区二区三区视频| 国产成人av一区二区三区在线 | 久久蜜桃av一区精品变态类天堂| 亚洲婷婷综合色高清在线| 免费高清在线一区| 91国模大尺度私拍在线视频| 久久久亚洲国产美女国产盗摄 | 欧美探花视频资源| 国产精品色呦呦| 国产一区二区主播在线| 欧美三级乱人伦电影| 国产精品的网站| 日本欧美肥老太交大片| 懂色av一区二区三区免费观看| 欧美丰满美乳xxx高潮www| 亚洲精品国产一区二区三区四区在线| 国产精品538一区二区在线| 日韩一区二区三区免费观看| 亚洲国产精品视频| 欧美伊人久久大香线蕉综合69 | 91福利视频在线| 亚洲视频一二三| 成人性视频免费网站| 精品国产一区二区三区av性色| 日韩专区一卡二卡| 欧美人与z0zoxxxx视频| 精品国产一区二区三区忘忧草 | 精品国产伦一区二区三区免费| 亚洲国产日韩在线一区模特| 色综合久久中文字幕| 亚洲色图视频网站| 亚洲高清不卡在线观看| 欧美日韩一卡二卡| 亚洲成人精品在线观看| 欧美片在线播放| 日韩激情视频网站| 91精品国产91久久久久久最新毛片 | 精品视频一区三区九区| 亚洲免费观看高清完整版在线观看熊| 97se亚洲国产综合在线| 一区二区三区在线观看视频| 欧美天堂一区二区三区| 日韩高清一区二区| 91精品国产福利| 国产精品香蕉一区二区三区| 国产精品视频一二| 欧美在线视频日韩| 美洲天堂一区二卡三卡四卡视频| 91麻豆精品国产自产在线观看一区| 日韩高清不卡一区二区| 精品国产露脸精彩对白| 国产不卡视频在线观看| 国产精品久久二区二区| jlzzjlzz亚洲日本少妇| 亚洲在线中文字幕| 91精品国产欧美一区二区 | 国产精品久久久久久久久快鸭 | 日韩精品一区二区在线观看| 丝袜诱惑制服诱惑色一区在线观看| 欧美一级二级在线观看| 国产精品18久久久久久久久 | 国产精品久久久久久久久果冻传媒 | 蜜臀久久99精品久久久画质超高清 | 天天做天天摸天天爽国产一区 | 国内久久婷婷综合| 中文字幕一区二区三区蜜月| 欧美性欧美巨大黑白大战| 亚洲 欧美综合在线网络| 久久五月婷婷丁香社区| 色天天综合久久久久综合片| 老司机午夜精品| 亚洲日本韩国一区| 欧美mv和日韩mv的网站| 国产麻豆91精品| 日日夜夜精品视频免费| 国产精品美女久久久久aⅴ | 欧美国产日韩a欧美在线观看 | 日韩av电影一区| 国产精品福利在线播放| 欧美成人女星排行榜| 99久久精品久久久久久清纯| 麻豆精品久久精品色综合| 亚洲国产精品综合小说图片区| 亚洲图片另类小说| 亚洲日穴在线视频| 亚洲色欲色欲www在线观看| 国产精品卡一卡二卡三| 国产精品乱子久久久久| 中文字幕一区日韩精品欧美| 国产精品久久久久久久久免费樱桃| 国产日韩欧美精品在线| 日韩一区二区三区电影在线观看| 欧美一区中文字幕| 91精品国产一区二区人妖| 日韩三级视频中文字幕| 91精品国产手机| 精品美女一区二区三区| wwwwww.欧美系列| 国产偷v国产偷v亚洲高清| 国产欧美一区二区精品性| 欧美国产日产图区| 亚洲手机成人高清视频| 亚洲午夜一区二区三区| 天天综合天天做天天综合| 久久疯狂做爰流白浆xx| 国产精品亚洲人在线观看| 成人教育av在线| 在线观看av不卡| 日韩欧美国产系列| 国产精品美女久久久久久久久久久| 国产精品国产三级国产| 一区二区三区精密机械公司| 午夜激情一区二区| 国产麻豆一精品一av一免费| 成人污视频在线观看| 91成人在线观看喷潮| 欧美一级淫片007| 国产精品久久久久久久久果冻传媒| 一区二区在线电影| 日韩av在线发布| 成人精品国产一区二区4080| 欧美午夜精品理论片a级按摩| 欧美成人aa大片| 自拍视频在线观看一区二区| 天天av天天翘天天综合网色鬼国产| 国产一区激情在线| 欧美性一级生活| 久久综合九色综合97婷婷 | 五月婷婷综合网| 国产精品88av| 在线观看91av| 国产精品你懂的在线| 免费av成人在线| 色哟哟一区二区在线观看| 欧美成人在线直播| 一区二区三区日韩欧美| 韩国欧美国产1区| 欧美色综合网站| 国产精品美女视频| 久久99九九99精品| 欧美怡红院视频| 中文子幕无线码一区tr| 蜜桃久久久久久| 欧美午夜精品免费| 综合中文字幕亚洲| 国产一区二区网址| 91精品国产91综合久久蜜臀| 日韩理论在线观看| 岛国精品一区二区| xfplay精品久久| 蜜臂av日日欢夜夜爽一区| 在线视频一区二区三| 中文在线资源观看网站视频免费不卡| 免费观看一级欧美片| 欧美视频第二页| 亚洲综合丝袜美腿| 91免费版pro下载短视频| 国产三级一区二区三区| 蜜桃一区二区三区在线观看| 欧美午夜精品久久久久久孕妇| 中文字幕在线观看一区二区| 久久99精品久久久久久动态图| 欧美精品精品一区| 亚洲图片一区二区| 欧美自拍偷拍一区| 亚洲精品精品亚洲| 欧美怡红院视频| 亚洲一区二区四区蜜桃| 91亚洲男人天堂| 国产精品盗摄一区二区三区| jlzzjlzz欧美大全| 有码一区二区三区| 欧美日韩一二三| 日韩高清不卡在线| 精品国产伦一区二区三区免费|