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

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

?? hal_indirect.c

?? 是一個手機功能的模擬程序
?? C
?? 第 1 頁 / 共 3 頁
字號:
	if (HalInfo.dwFlags & fINDIRECT_DATA16)
    {
	    loword = *HalIndInfo.pData16;
	    hiword = *HalIndInfo.pData16;
    }
	else
    {
	    loword  = *HalIndInfo.pData8;
	    loword |= (UInt16)((*HalIndInfo.pData8)<<8);
	    hiword  = *HalIndInfo.pData8;
	    hiword |= (UInt16)((*HalIndInfo.pData8)<<8);
    }
	halSetProcessExclusivity( FALSE );

	return MAKELONG(loword, hiword);
}




//---------------------------------------------------------------------------
// INDIRECT FUNCTION: halpSerReadData()
// WARNING: DO NOT USE ODD ADDRESSES FOR 16-bit or 32bit ACCESSES!
//---------------------------------------------------------------------------
void halpSerReadData( int Size, UInt32 Offset, void* pData, UInt32 Count )
{
	if ( Count && pData )
	{
		halSetProcessExclusivity( TRUE );

		if ( Size == sizeof(UInt8) )
		{
			pUInt8 pWrite = pData;
			SetDisplayAddrSerial( Offset );

			*HalIndInfo.pIndex8 = SER_READ;
			do
			{
				*pWrite++ = *HalIndInfo.pData8;
			} while ( --Count );
		}
		else if ( Size == sizeof(UInt16) )
		{
			pUInt16 pWrite  = pData;
            UInt16  wVal;
			SetDisplayAddrSerial( Offset );

			*HalIndInfo.pIndex8 = SER_READ;
			if (HalInfo.dwFlags & fINDIRECT_DATA16)
            {
			    do
			    {
				    *pWrite++ = *HalIndInfo.pData16;
			    } while ( --Count );
            } else
            {
			    do
			    {
				    wVal  = *HalIndInfo.pData8;
				    wVal |= (UInt16)((*HalIndInfo.pData8)<<8);
                    *pWrite++ = wVal;
			    } while ( --Count );
            }
		}
		else if ( Size == sizeof(UInt32) )
		{
			UInt16 loword, hiword;
			pUInt32 pWrite = pData;
			SetDisplayAddrSerial( Offset );

			*HalIndInfo.pIndex8 = SER_READ;
			if (HalInfo.dwFlags & fINDIRECT_DATA16)
            {
			    do
			    {
				    loword = *HalIndInfo.pData16;
				    hiword = *HalIndInfo.pData16;
				    *pWrite++ = MAKELONG(loword,hiword);
			    } while ( --Count );
            } else
            {
			    do
			    {
				    loword  = *HalIndInfo.pData8;
				    loword |= (UInt16)((*HalIndInfo.pData8)<<8);
				    hiword  = *HalIndInfo.pData8;
				    hiword |= (UInt16)((*HalIndInfo.pData8)<<8);
				    *pWrite++ = MAKELONG(loword,hiword);
			    } while ( --Count );
            }
		}

		halSetProcessExclusivity( FALSE );
	}
}
#endif



//---------------------------------------------------------------------------
// INDIRECT FUNCTION: halpParReadData()
// WARNING: DO NOT USE ODD ADDRESSES FOR 16-bit or 32bit ACCESSES!
//---------------------------------------------------------------------------
void halpParReadData( int Size, UInt32 Offset, void* pData, UInt32 Count )
{
	if ( Count && pData )
	{
		halSetProcessExclusivity( TRUE );

		if ( Size == sizeof(UInt8) )
		{
			pUInt8 pWrite = pData;
			SetDisplayAddrParallel( Offset );
			do
			{
				*pWrite++ = *HalIndInfo.pData8;
			} while ( --Count );
		}
		else if ( Size == sizeof(UInt16) )
		{
			pUInt16 pWrite = pData;
			SetDisplayAddrParallel( Offset );
			do
			{
				tmplbyte= *HalIndInfo.pData8;
				tmphbyte= *HalIndInfo.pData8;
				*pWrite++ = MAKEWORD(tmplbyte, tmphbyte);
			} while ( --Count );
		}
		else if ( Size == sizeof(UInt32) )
		{
			UInt16 loword, hiword;
			pUInt32 pWrite = pData;
			SetDisplayAddrParallel( Offset );
			do
			{
				tmplbyte=*HalIndInfo.pData8;
				tmphbyte=*HalIndInfo.pData8;
				tmplword=MAKEWORD(tmplbyte, tmphbyte);
				tmplbyte=*HalIndInfo.pData8;
				tmphbyte=*HalIndInfo.pData8;
				tmphword=MAKEWORD(tmplbyte, tmphbyte);

				*pWrite++ = MAKELONG(tmplword,tmphword);
			} while ( --Count );
		}

		halSetProcessExclusivity( FALSE );
	}
}



#if 0
//---------------------------------------------------------------------------
// INDIRECT FUNCTION: halpSerWriteData()
// WARNING: DO NOT USE ODD ADDRESSES FOR 16-bit or 32bit ACCESSES!
//---------------------------------------------------------------------------
void halpSerWriteData( int Size, UInt32 Offset, const void* pData, UInt32 Count )
{
	if ( Count && pData )
	{
		halSetProcessExclusivity( TRUE );

		if ( Size == sizeof(UInt8) )
		{
			const UInt8* pRead = pData;
			SetDisplayAddrSerial( Offset );

			*HalIndInfo.pIndex8  = SER_WRITE;
			do
			{
				*HalIndInfo.pData8 = *pRead++;
			} while ( --Count );
		}
		else if ( Size == sizeof(UInt16) )
		{
			const UInt16* pRead = pData;
			SetDisplayAddrSerial( Offset );

			*HalIndInfo.pIndex8  = SER_WRITE;
			if (HalInfo.dwFlags & fINDIRECT_DATA16)
            {
			    do
			    {
				    *HalIndInfo.pData16 = LOWORD(*pRead);
				    pRead++;
			    } while ( --Count );
            } else
            {
                UInt16 wVal;
			    do
			    {
                    wVal = LOWORD(*pRead);
				    *HalIndInfo.pData8 = LOBYTE(wVal);
				    *HalIndInfo.pData8 = HIBYTE(wVal);
				    pRead++;
			    } while ( --Count );
            }
		}
		else if ( Size == sizeof(UInt32) )
		{
			const UInt32* pRead = pData;
			SetDisplayAddrSerial( Offset );

			*HalIndInfo.pIndex8  = SER_WRITE;
			if (HalInfo.dwFlags & fINDIRECT_DATA16)
            {
			    do
			    {
				    *HalIndInfo.pData16 = LOWORD(*pRead);
				    *HalIndInfo.pData16 = HIWORD(*pRead);
					pRead++;
			    } while ( --Count );
            } else
            {
                UInt32 dwVal;
                UInt16 wVal;
			    do
			    {
                    dwVal = *pRead++;
                    wVal = LOWORD(dwVal);
				    *HalIndInfo.pData8 = LOBYTE(wVal);
				    *HalIndInfo.pData8 = HIBYTE(wVal);
                    wVal = HIWORD(dwVal);
				    *HalIndInfo.pData8 = LOBYTE(wVal);
				    *HalIndInfo.pData8 = HIBYTE(wVal);
			    } while ( --Count );
            }
		}

		halSetProcessExclusivity( FALSE );
	}
}
#endif



//---------------------------------------------------------------------------
// INDIRECT FUNCTION: halpParWriteData()
// WARNING: DO NOT USE ODD ADDRESSES FOR 16-bit or 32bit ACCESSES!
//---------------------------------------------------------------------------
void halpParWriteData( int Size, UInt32 Offset, const void* pData, UInt32 Count )
{
	if ( Count && pData )
	{
		halSetProcessExclusivity( TRUE );

		if ( Size == sizeof(UInt8) )
		{
			const UInt8* pRead = pData;
			SetDisplayAddrParallel( Offset );
			do
			{
				UInt8  temp8;
				temp8 =(unsigned char)*pRead; 
				*HalIndInfo.pData8 = temp8;
			} while ( --Count );
		}
		else if ( Size == sizeof(UInt16) )
		{
			const UInt16* pRead = pData;
			SetDisplayAddrParallel( Offset );
			do
			{
				//*HalIndInfo.pData16 = *pRead;
				//*HalIndInfo.pData16  = *( volatile unsigned short *)0x200c000;
				UInt8  temp8;
				
				temp8 =(unsigned char)*pRead; 				
				*HalIndInfo.pData8 = temp8; 
				
				temp8 =(unsigned char)(*pRead>>8);
				*HalIndInfo.pData8 = temp8; //If use 8 bits module the program must like this. 
				

				//tmp =*pRead;
				//*HalIndInfo.pData16 = tmp;
				pRead++;
			} while ( --Count );
			
			/*
			SetDisplayAddrParallel( Offset );
			do
			{	
				if (HalInfo.dwFlags & fINDIRECT_DATA16)
					*HalIndInfo.pData16 = *pRead;
				else
				{
					*HalIndInfo.pData8 = HIBYTE(*pRead);
					*HalIndInfo.pData8 = LOBYTE(*pRead);
					//*HalIndInfo.pData8 = HIBYTE(0xFFFF);
					//*HalIndInfo.pData8 = LOBYTE(0xFFFF);					
					 //pRead++;
				}
				
			} while ( --Count );
			*/
		}
		else if ( Size == sizeof(UInt32) )
		{
			const UInt32* pRead = pData;
			SetDisplayAddrParallel( Offset );
			do
			{
				*HalIndInfo.pData8=LOBYTE(LOWORD(*pRead));
				*HalIndInfo.pData8=HIBYTE(LOWORD(*pRead));
				*HalIndInfo.pData8=LOBYTE(HIWORD(*pRead));
				*HalIndInfo.pData8=HIBYTE(HIWORD(*pRead));
				//*HalIndInfo.pData16 = LOWORD(*pRead);
				//*HalIndInfo.pData16 = HIWORD(*pRead);
				pRead++;
			} while ( --Count );
		}

		halSetProcessExclusivity( FALSE );
	}
}




//---------------------------------------------------------------------------
//	FUNCTION: IndirectSetDisplayAddr()
//
//	DESCRIPTION:
//		This routine sets the Host Interface Address registers to the address
//		specified by addr. For the Serial Interface, this routine also sets
//		the interface to read or write.
//
//	PARAMETERS:
//		addr	- a thirty-two bit value containing the offset to the desired
//				  memory addrsss.
//		SerialDir - for serial indirect I/O, set SerialDir to
//					either SER_WRITE or SER_READ.
//					For parallel indirect I/O, this parameter is ignored.
//---------------------------------------------------------------------------
void IndirectSetDisplayAddr( UInt32 addr, UInt8 SerialDir )
{
	halSetProcessExclusivity( TRUE );

	if (HalInfo.dwFlags & fINDIRECT_SERIAL)
	{
		SetDisplayAddrSerial(addr);

		if (HalInfo.dwFlags & fINDIRECT_ADDR16)
			*HalIndInfo.pIndex16 = SerialDir;
		else
			*HalIndInfo.pIndex8  = SerialDir;
	}
	else
		SetDisplayAddrParallel(addr);

	halSetProcessExclusivity( FALSE );
}


//---------------------------------------------------------------------------
//	FUNCTION: SetSerialAddrParallel()
//
//	DESCRIPTION:
//		This routine sets the Host Interface Address registers to the address
//		specified by addr.
//
//		Because we don't know the last register to be accessed we must write
//		the full address every time.
//
//		This function MUST be called within a process exclusive block!
//
//	PARAMETERS:
//		addr	- a thirty-two bit value containing the offset to the desired
//				  memory addrsss.
//---------------------------------------------------------------------------
static void SetDisplayAddrParallel( UInt32 addr )
{
	// Setup the address
	if (HalInfo.dwFlags & fINDIRECT_ADDR16)
	{
		*HalIndInfo.pIndex16 = 0x0020;
		*HalIndInfo.pData8   = LOBYTE(LOWORD(addr));
		*HalIndInfo.pIndex16 = 0x0021;
		*HalIndInfo.pData8   = HIBYTE(LOWORD(addr));
		*HalIndInfo.pIndex16 = 0x0022;
		*HalIndInfo.pData8   = LOBYTE(HIWORD(addr));
		
		*HalIndInfo.pIndex16 = 0x28;
	}
	else
	{
		*HalIndInfo.pIndex8 = 0x20;
		*HalIndInfo.pIndex8 = 0x00;
		*HalIndInfo.pData8  = LOBYTE(LOWORD(addr));
		*HalIndInfo.pIndex8 = 0x21;
		*HalIndInfo.pData8  = HIBYTE(LOWORD(addr));
		*HalIndInfo.pIndex8 = 0x22;
		*HalIndInfo.pData8  = LOBYTE(HIWORD(addr));
		
		*HalIndInfo.pIndex8 = 0x28;
	}
}

//---------------------------------------------------------------------------
//	FUNCTION: SetDisplayAddrSerial()
//
//	DESCRIPTION:
//		This routine sets the Host Interface Address registers to the address
//		specified by addr. After setting the address the routine points the
//		'register pointer' to the Host Interface Memory Access Port.
//
//		Because we don't know the last register to be accessed we must write
//		the full address every time.
//
//		This function MUST be called within a process exclusive block!
//
//	PARAMETERS:
//		addrs	- a thirty-two bit value containing the offset to the desired
//				  memory addrsss.
//---------------------------------------------------------------------------


static void SetDisplayAddrSerial( UInt32 addr )
{
	// Setup the register address of the Host Interface Memory Address register
	if (HalInfo.dwFlags & fINDIRECT_ADDR16)
	{
		*HalIndInfo.pIndex16 = SER_SET_ADDR;
		*HalIndInfo.pData16   = 0x2000;
		
		// Set the LSB of 'addr'
		*HalIndInfo.pIndex16 = SER_WRITE;
		*HalIndInfo.pData8   = LOBYTE(LOWORD(addr));
		
		// Point to the next Host Interface Memory Address register
		*HalIndInfo.pIndex16 = SER_SET_ADDR;
		*HalIndInfo.pData8   = 0x21;
		
		// Set the next byte of 'addr'
		*HalIndInfo.pIndex16 = SER_WRITE;
		*HalIndInfo.pData8   = HIBYTE(LOWORD(addr));
		
		// Point to the last Host Interface Memory Address register
		*HalIndInfo.pIndex16 = SER_SET_ADDR;
		*HalIndInfo.pData8   = 0x22;
		
		// Set the MSB byte of 'addr'
		*HalIndInfo.pIndex16 = SER_WRITE;
		*HalIndInfo.pData8   = LOBYTE(HIWORD(addr));
		
		// Point to the Host Interface Memory Access Port
		*HalIndInfo.pIndex16 = SER_SET_ADDR;
		*HalIndInfo.pData8   = 0x28;
	}
	else
	{
		*HalIndInfo.pIndex8  = SER_SET_ADDR;
		*HalIndInfo.pData8   = 0x20;		// REG0020_HOSTMEMADDR0
		*HalIndInfo.pData8   = 0x00;		// MSB of 0x0020 = 0x00
		
		// Set the LSB of 'addr'
		*HalIndInfo.pIndex8  = SER_WRITE;
		*HalIndInfo.pData8   = LOBYTE(LOWORD(addr));
		
		// Point to the next Host Interface Memory Address register
		*HalIndInfo.pIndex8  = SER_SET_ADDR;
		*HalIndInfo.pData8   = 0x21;
		
		// Set the next byte of 'addr'
		*HalIndInfo.pIndex8  = SER_WRITE;
		*HalIndInfo.pData8   = HIBYTE(LOWORD(addr));
		
		// Point to the last Host Interface Memory Address register
		*HalIndInfo.pIndex8  = SER_SET_ADDR;
		*HalIndInfo.pData8   = 0x22;
		
		// Set the MSB byte of 'addr'
		*HalIndInfo.pIndex8  = SER_WRITE;
		*HalIndInfo.pData8   = LOBYTE(HIWORD(addr));
		
		// Point to the Host Interface Memory Access Port
		*HalIndInfo.pIndex8  = SER_SET_ADDR;
		*HalIndInfo.pData8   = 0x28;
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一区二区视频在线| 狠狠色丁香久久婷婷综合丁香| 亚洲国产成人tv| 精品在线播放免费| 欧美色图在线观看| 国产精品不卡在线观看| 精品一二三四区| 欧美日本一道本在线视频| 国产婷婷色一区二区三区四区| 偷拍与自拍一区| av午夜精品一区二区三区| 欧美videos大乳护士334| 一区二区三区小说| heyzo一本久久综合| 久久久精品天堂| 久久精品久久久精品美女| 精品视频在线免费| 亚洲乱码国产乱码精品精可以看| 国产成人精品亚洲午夜麻豆| 日韩午夜激情av| 午夜av电影一区| 欧美色图一区二区三区| 亚洲精品水蜜桃| 97国产精品videossex| 国产精品久久网站| 成人性色生活片| 欧美国产一区视频在线观看| 国产精品中文字幕日韩精品 | 亚洲欧美精品午睡沙发| 国产99久久久国产精品| 久久精品一区二区三区四区| 精品一区二区国语对白| 精品国产123| 韩国成人精品a∨在线观看| 欧美成人在线直播| 久久99在线观看| 亚洲精品一区二区三区香蕉| 精品一区免费av| 久久久亚洲精品石原莉奈| 国产激情一区二区三区桃花岛亚洲 | 在线欧美日韩精品| 一区av在线播放| 欧美日韩中文字幕精品| 男人的天堂亚洲一区| 日韩女同互慰一区二区| 国产一区美女在线| 中文字幕的久久| 色婷婷亚洲一区二区三区| 亚洲一区二区三区在线看 | 成人精品gif动图一区| 亚洲视频1区2区| 欧美在线视频日韩| 日本中文字幕一区二区有限公司| 日韩美一区二区三区| 国产福利一区在线| 一区二区三区四区蜜桃| 欧美精品久久一区二区三区| 久久精品国产亚洲a| 欧美国产亚洲另类动漫| 日本道免费精品一区二区三区| 亚洲午夜久久久久久久久电影网 | 精品嫩草影院久久| 成人黄色大片在线观看| 亚洲一区二区三区国产| 日韩欧美高清dvd碟片| 成人精品在线视频观看| 亚洲va国产va欧美va观看| 久久综合九色综合久久久精品综合| 国产福利一区二区三区| 亚洲国产精品精华液网站| 久久久国产午夜精品| 在线观看欧美黄色| 国产在线国偷精品免费看| 亚洲愉拍自拍另类高清精品| 精品国产乱子伦一区| 色婷婷一区二区三区四区| 精品一区二区影视| 一区二区三区色| 国产日韩欧美不卡在线| 在线成人高清不卡| 99综合电影在线视频| 老色鬼精品视频在线观看播放| 中文字幕色av一区二区三区| 日韩一二三四区| 色婷婷精品久久二区二区蜜臂av | 亚洲人成影院在线观看| 久久久天堂av| 91精品久久久久久久久99蜜臂| 北岛玲一区二区三区四区| 蜜桃久久精品一区二区| 亚洲一区二区成人在线观看| 国产性色一区二区| 日韩免费一区二区三区在线播放| 91年精品国产| 成人精品电影在线观看| 精品无人区卡一卡二卡三乱码免费卡 | 欧美一三区三区四区免费在线看 | 日韩免费高清视频| 欧美日韩一区在线| 色偷偷一区二区三区| 成人激情小说网站| 丁香五精品蜜臀久久久久99网站| 首页亚洲欧美制服丝腿| 一区二区三区精品在线| 亚洲欧美日韩久久| 日韩一区有码在线| 日韩理论片一区二区| 国产精品毛片无遮挡高清| 国产日产欧美一区| 久久久99精品免费观看不卡| 26uuu另类欧美| 精品国产自在久精品国产| 日韩一级片网站| 日韩亚洲欧美综合| 日韩欧美视频一区| 欧美电影免费观看高清完整版在| 制服丝袜亚洲网站| 日韩精品一区二区三区视频在线观看| 欧美日韩一区三区| 欧美一区二区私人影院日本| 欧美绝品在线观看成人午夜影视| 专区另类欧美日韩| √…a在线天堂一区| 精品国产乱码久久久久久牛牛| 欧美日韩小视频| 18涩涩午夜精品.www| 91精品国产综合久久精品| 欧美一区二区三区四区高清| 欧美一区二区视频在线观看2020| 91精品国产福利在线观看| 精品国产一区二区三区不卡| 久久精品无码一区二区三区| 国产精品热久久久久夜色精品三区 | 一区二区三区蜜桃网| 伊人一区二区三区| 视频一区中文字幕国产| 另类小说综合欧美亚洲| 粉嫩aⅴ一区二区三区四区五区| 成a人片国产精品| 欧美在线三级电影| 欧美一区二区视频免费观看| 欧美电影免费观看高清完整版在线 | 在线观看一区二区视频| 欧美怡红院视频| 日韩一区二区在线观看视频播放| 日韩三级av在线播放| 国产欧美一区二区三区鸳鸯浴| 中文字幕一区二区三| 婷婷中文字幕综合| 国产精品中文有码| 欧美在线一二三四区| 久久综合九色综合97婷婷女人 | 欧美一区二区三级| 欧美极品少妇xxxxⅹ高跟鞋| 亚洲一区在线观看免费观看电影高清| 久久精品99国产精品日本| 99久久婷婷国产| 精品少妇一区二区三区视频免付费| 国产精品嫩草影院av蜜臀| 爽爽淫人综合网网站| 99久久伊人久久99| 日韩欧美国产一区二区在线播放 | 国产日韩欧美综合在线| 夜夜爽夜夜爽精品视频| 国产精品一区二区在线观看不卡| 欧美性大战久久久久久久蜜臀| 久久久亚洲精品石原莉奈| 亚洲成人动漫精品| 色综合一区二区| 国产亚洲精品免费| 日韩一级二级三级精品视频| 香蕉久久夜色精品国产使用方法| 国产在线播放一区| 欧美精品第1页| 亚洲精品中文在线| 欧美日韩一区二区在线视频| 国产精品日日摸夜夜摸av| 美腿丝袜亚洲三区| 欧美三级视频在线观看| 1024精品合集| 成人免费视频免费观看| 欧美tk—视频vk| 日韩高清国产一区在线| 在线免费一区三区| 亚洲美女一区二区三区| 粗大黑人巨茎大战欧美成人| 精品剧情v国产在线观看在线| 性欧美大战久久久久久久久| 色先锋资源久久综合| 最新国产の精品合集bt伙计| 国产精品正在播放| 337p粉嫩大胆噜噜噜噜噜91av| 日日骚欧美日韩| 在线播放一区二区三区| 一区二区成人在线| 在线精品观看国产| 亚洲免费在线电影| 一本色道久久综合亚洲91| 亚洲免费成人av| 欧美在线高清视频|