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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? flash64.c

?? mp3播放器軟件
?? C
字號(hào):
/************************************************************/
/*				FLASH.C						  	*/
/*				T-SQUARE DESIGN					*/
/*												*/
/*								BY CRAZY ZENG		*/
/*								JUL.9 2002		*/
/************************************************************/
/*
#pragma code debug small  src
#include<flash.h>
#include<stdio.h>
#include<reg51.h>
#include<absacc.h>
#include<intrins.h>
*/
xdata struct AbsAddress DataBase; //  record base address of data area
xdata struct AbsAddress DirectoryBase;//record base address of Directory Entry
xdata struct AbsAddress FatBase;//record base address of fat
xdata unsigned int  Offset = 100;
void Wp(bit Mode)
{
	if(Mode)
	{
		XBYTE[EGPIO_OUT+1]=XBYTE[EGPIO_OUT+1]|0x10; 
	}
	else
	{
		XBYTE[EGPIO_OUT+1]=XBYTE[EGPIO_OUT+1]&0xef;
	}
} 
//--------------------------------------------------------------------
//Purpose :   Select one nand flash for writing or reading
//Input  :    Number----card number
//Output :    NONE
//Reference :
//Example :
//--------------------------------------------------------------------
void SelectCard(char Number)
{
	XBYTE[SMC_CTL] = 0x88|(0x70&(Number<<4));
}
//--------------------------------------------------------------------
//Purpose : read nand flash
//Input  :  PageAddr---page address
//Output :  the specified data is read into buffer
//Reference:
//Example :
//--------------------------------------------------------------------
bit SmcRead(unsigned long PageAddr)
{
	xdata unsigned char c;
	xdata unsigned int i;
	i = (unsigned int)PageAddr;
	if (PageAddr>=0x10000)
		c = 1;
	else c = 0;
	XBYTE[SMC_CMD] = 0;
#ifdef Flash_64M
	XBYTE[SMC_MADDR] = 0;
	XBYTE[SMC_MADDR] = (unsigned char)i;
	XBYTE[SMC_MADDR] = (unsigned char)(i>>8);
	XBYTE[SMC_ADDR] = (unsigned char)c;
#else
	XBYTE[SMC_MADDR] = 0;
	XBYTE[SMC_MADDR] = (unsigned char)PageAddr;
	XBYTE[SMC_ADDR] = (unsigned char)(PageAddr>>8);
#endif
	if(WaitNotBusy()==FALSE)return FALSE;
	XBYTE[SMC_DCTRL_L] = 0;
	XBYTE[SMC_DCTRL_H] = 0x80;      
	i = 0;
	while (!((c = XBYTE[SMC_ISR]) & 0x02)) {
		if (i++ > 500)
			return FALSE;
	}
	XBYTE[SMC_ISR] = 0x02;
	return WaitNotBusy();
}
//--------------------------------------------------------------------
//Purpose :   read status
//Input  :
//Output :
//Reference:
//Example :
//--------------------------------------------------------------------
/*
bit SmcReadStatus(unsigned char BufferNo)
{
	unsigned char i;
	XBYTE[SMC_CMD] = 0x70;
	XBYTE[SMC_DCTRL_L] = 1;
	XBYTE[SMC_DCTRL_H] = 0x80;
	i = 100;
	while((XBYTE[SMC_ISR] &0x02) ==0)
	{
		if(--i==0)return FALSE;
	}
	XBYTE[SMC_ISR] = 0x02;
	if(WaitNotBusy()==FALSE)return FALSE;
	XBYTE[0x0e+BufferNo] = 0;
	i = XBYTE[0x1000+BufferNo*0x200]&0x01;
	if(i ==1)return FALSE;
	return TRUE;
}
*/
//--------------------------------------------------------------------
//--------------------------------------------------------------------
//Purpose :   erase one block
//Input  :    BlockAddr----block address
//Output :
//Reference:
//Example :
//--------------------------------------------------------------------

bit SmcBlockErase(unsigned short BlockAddr)
{
	unsigned long addr_b;
	bit	Flg;
	Wp(1);
	addr_b = BlockAddr;
	addr_b = addr_b<<5;
	XBYTE[SMC_CMD] = 0x60;
#ifdef Flash_64M
	XBYTE[SMC_MADDR] = (unsigned char) addr_b;
	XBYTE[SMC_MADDR] = (unsigned char)(addr_b >>8);
	XBYTE[SMC_ADDR] = (unsigned char)(addr_b >>16);
#else
	XBYTE[SMC_MADDR] = addr_b &0x0ff;
	XBYTE[SMC_ADDR] = addr_b >>8;
#endif
	XBYTE[SMC_CMD] = 0xd0;
	Flg = WaitNotBusy();
	Wp(0);
	return Flg;
}
//--------------------------------------------------------------------
//Purpose :   write one page data to nand flash
//Input  :    PageAddr---page address
//Output :    the data of the selected buffer will be write to nand flash
//Reference:
//Example :
//--------------------------------------------------------------------
/*bit  SmcPageProgram(unsigned short PageAddr)
{
	xdata unsigned int i;
	xdata unsigned char c;
	xdata unsigned char Page;
	Page = (unsigned int)(PageAddr>>16);
	XBYTE[SMC_CMD] = 0;
	XBYTE[SMC_CMD] = 0x80;
	XBYTE[SMC_MADDR] =  0;
	XBYTE[SMC_MADDR] = (unsigned char)PageAddr;
	XBYTE[SMC_ADDR] = (unsigned char)(PageAddr>>8);
	//XBYTE[SMC_ADDR]  =  Page;
	XBYTE[SMC_DCTRL_L] = 0;
	XBYTE[SMC_DCTRL_H] = 0xc0;
	i = 0;
	while (!((c = XBYTE[SMC_ISR]) & 0x02)) {
		if (i++ > 500)
			return FALSE;
	}
	XBYTE[SMC_ISR] = 0x02;

	XBYTE[SMC_CMD] = 0x10;
	return WaitNotBusy();
}*/
bit  SmcPageProgram(unsigned long PageAddr)
{
	xdata unsigned char c;
	xdata unsigned int i;
	bit	  Flg;
	Wp(1);
	i = (unsigned int)PageAddr;
	if (PageAddr>=0x10000)
		c = 1;
	else c = 0;
	XBYTE[SMC_CMD] = 0;
	XBYTE[SMC_CMD] = 0X80;
#ifdef Flash_64M
	XBYTE[SMC_MADDR] = 0;
	XBYTE[SMC_MADDR] = (unsigned char)i;
	XBYTE[SMC_MADDR] = (unsigned char)(i>>8);
	XBYTE[SMC_ADDR] = (unsigned char)c;
#else
	XBYTE[SMC_MADDR] = 0;
	XBYTE[SMC_MADDR] = (unsigned char)PageAddr;
	XBYTE[SMC_ADDR] = (unsigned char)(PageAddr>>8);
#endif
	XBYTE[SMC_DCTRL_L] = 0;
	XBYTE[SMC_DCTRL_H] = 0xc0;      
	i = 0;
	while (!((c = XBYTE[SMC_ISR]) & 0x02)) {
		if (i++ > 500)
		{
			Wp(0);
			return FALSE;
		}
	}
	XBYTE[SMC_ISR] = 0x02;
	
	XBYTE[SMC_CMD] = 0x10;
	Flg = WaitNotBusy();
	Wp(0);
	return Flg;
}

//--------------------------------------------------------------------
//Purpose :   wait nand flash operation finished
//Input  :    NONE
//Output :    if busy return FALSE
//Reference:
//Example :
//--------------------------------------------------------------------
bit WaitNotBusy()
{
	xdata unsigned short cc;
	cc = 1000;
	while (1) {
		if ((XBYTE[SMC_STATUS] & 0x01)==0x01)
			return (1);
		if (!cc--) return (0);
	}
}
//--------------------------------------------------------------------
//Purpose :   Get disk file struct information
//Input  :    NONE
//Output :    this function will set global variable(PbrInfo,FatBase,DirectoryBase,DataBase) by PBR
//Reference:
//Example :
//--------------------------------------------------------------------
bit IniLogicDisk()
{
	xdata unsigned int BootOffset;
	xdata unsigned int	DirectoryAddr;
	xdata unsigned int	DataAddr;
	BootOffset = Offset*32;
	do{
		MemoryRw;
		SmcRead(BootOffset);
		McuRw;
		if((XBYTE[0x11fe] == 0x55) && (XBYTE[0x11ff] == 0xaa))
		{
			break;
		}
	}while(++BootOffset < 3232);//fine PBR   from block one to block 100
	if(BootOffset == 3232)return FALSE;
	PbrInfo.BytePerSector  = XBYTE[0x100c];
	PbrInfo.BytePerSector  <<=8;
	PbrInfo.BytePerSector += XBYTE[0x100b];
	PbrInfo.SectorPerCluster = XBYTE[0x100d];
	PbrInfo.NumFats = XBYTE[0x1010];
	PbrInfo.RootDirEntry = XBYTE[0x1012];
	PbrInfo.RootDirEntry <<= 8;
	PbrInfo.RootDirEntry += XBYTE[0x1011];
	if((XBYTE[0x1013] == 0)&&(XBYTE[0x1014] == 0))
	{
		PbrInfo.TotolSector = XBYTE[0x1023];     //Total Sector' width is double word
		PbrInfo.TotolSector <<= 8;
		PbrInfo.TotolSector += XBYTE[0x1022];
		PbrInfo.TotolSector <<=8;
		PbrInfo.TotolSector += XBYTE[0x1021];
		PbrInfo.TotolSector <<=8;
		PbrInfo.TotolSector += XBYTE[0x1020];
	}else{
		PbrInfo.TotolSector = 0;				//Total Sector' width is word
		PbrInfo.TotolSector = XBYTE[0x1014];
		PbrInfo.TotolSector <<= 8;
		PbrInfo.TotolSector += XBYTE[0x1013];
	}
	PbrInfo.MediaId = XBYTE[0x1015];
	PbrInfo.NumFatSector = XBYTE[0x1017];
	PbrInfo.NumFatSector <<=8;
	PbrInfo.NumFatSector += XBYTE[0x1016];
	if((XBYTE[0x1036] !='F')||(XBYTE[0x1037]!='A')||(XBYTE[0x1038]!='T'))return FALSE;
	PbrInfo.FatFormat = XBYTE[0x1039] - 0x30;
	PbrInfo.FatFormat <<= 4;
	PbrInfo.FatFormat += (XBYTE[0x103a] - 0x30);

	BootOffset = Offset*32;
	do{
		MemoryRw;
		SmcRead(BootOffset);
		McuRw;
		if((XBYTE[0x1000] == 0xf8) && (XBYTE[0x1001] == 0xff))
		{
			break;
		}
	}while(++BootOffset < 3232);//fine PBR   from block one to block 100
	if(BootOffset == 3232)return FALSE;
	FatBase.Block = (BootOffset)>>5;
	FatBase.Page = (BootOffset) %32;
	DirectoryAddr = PbrInfo.NumFatSector*PbrInfo.NumFats+ BootOffset ;
	DirectoryBase.Block = DirectoryAddr>>5;
	DirectoryBase.Page = DirectoryAddr%32;
	DataAddr = DirectoryAddr + (PbrInfo.RootDirEntry>>4);
	if((PbrInfo.RootDirEntry%16)!=0)
	{
		DataAddr++;
	}
	DataBase.Block = DataAddr>>5;
	DataBase.Page = DataAddr%32;

	
	
	return TRUE;
}

//--------------------------------------------------------------------
//Purpose : transfer logic address to absolute address and write data nand flash
//Input  :  LogicAddr---logic address
//Output :  the specified data to buffer
//Reference:
//Example :
//--------------------------------------------------------------------
bit	ReadLogicPage(struct LogicAddress* LogicAddr)
{
	xdata unsigned long PageAddr;
	xdata unsigned int Temp ;
    xdata unsigned long  Page;
     if(LogicAddr->Cluster ==0)//the logic zero is map to FAT
	{
		PageAddr = FatBase.Block*32+FatBase.Page+LogicAddr->Sector;

	}else{
			if(LogicAddr->Cluster ==1)//The logic one is map to FCB
			{
				PageAddr = DirectoryBase.Block*32+DirectoryBase.Page+LogicAddr->Sector;
			}else{
					//That is data area after logic one
					PageAddr = DataBase.Block*32 ;
					PageAddr = PageAddr +DataBase.Page;
					Page = LogicAddr->Cluster-2;
					Page = Page * PbrInfo.SectorPerCluster;
					PageAddr = PageAddr +Page;
					PageAddr = PageAddr +LogicAddr->Sector;
			}
	}
	Temp = 0;
     Page = PageAddr;
     while(1)
     {
         if(Page<15872)break;
         Page = Page-15872;
         Temp++;
     }
	PageAddr = PageAddr + Temp*512;
	return SmcRead(PageAddr);
}
bit	WriteLogicPage(struct LogicAddress* LogicAddr)
{
	xdata unsigned long PageAddr;
	xdata unsigned long Page;
	xdata unsigned int Temp;
	PageAddr = DataBase.Block*32 ;
	PageAddr = PageAddr +DataBase.Page;
	Page = LogicAddr->Cluster-2;
	Page = Page * PbrInfo.SectorPerCluster;
	PageAddr = PageAddr +Page;
	PageAddr = PageAddr +LogicAddr->Sector;
	Temp = 0;
     Page = PageAddr;
     while(1)
     {
         if(Page<15872)break;
         Page = Page-15872;
         Temp++;
     }
	PageAddr = PageAddr + Temp*512;
	return SmcPageProgram(PageAddr);
}
//--------------------------------------------------------------------
//Purpose :   finshed one fat chain
//Input  :    FurstLogicAddr---The first table item of chain that will be establish this time
//		    LogicLength------The logic length of chain that will be establish this time
//		    PreLastLogicAddr-The final logic address of the chain that was being establish last time
//Output :
//Reference:
//Example :
//--------------------------------------------------------------------
bit	WriteFat(unsigned int PageOffset)
{
	xdata unsigned int 	Block;
	xdata unsigned char  Page;
	xdata unsigned long	PageAddr;
	PageAddr = FatBase.Block*32+FatBase.Page+PageOffset;
	Block  = PageAddr>>5;
	Page  = PageAddr%32;
	BackupData(Block,Page,0);
}
bit	WriteFcb(unsigned int PageOffset)
{
	unsigned long 	PageAddrSrc;
	unsigned int	Block;
	unsigned char	Page;
	PageAddrSrc = DirectoryBase.Block*32 + DirectoryBase.Page + PageOffset;
	Page = PageAddrSrc%32;
	Block= PageAddrSrc>>5;
	BackupData(Block,Page,0);
}
//--------------------------------------------------------------------
//Purpose :   backup the other page when write one page or erase multi page in one Block .
//Input  :    BlockSrc---the Block address,some page of this block will not be write in erase this block
//		    PageStart--the page number in BlockSrc
//		    Length-----the number of not being write page.
//Output :
//Reference:
//Example :
//--------------------------------------------------------------------
bit	BackupData(unsigned int BlockSrc,unsigned char PageStart,unsigned char Length)
{
	xdata unsigned int	BlockDst;
	xdata unsigned long PageAddrSrc;
	xdata unsigned long	PageAddrDst;
	xdata unsigned char	i;
	xdata unsigned char LogicLength;
	BlockDst = (BlockSrc>>9)*512 + 496;
	McuRw;
	for(i = 0;i<16;i++)
	{
		if(SmcBlockErase(BlockDst)==TRUE)break;
		BlockDst++;
	}
	if(i == 16)return FALSE;
	PageAddrSrc = BlockSrc*32;
	PageAddrDst = BlockDst*32;
	LogicLength=Length;
	if(Length == 0)
	{
		Length++;
		MemoryRw;
		SmcPageProgram(PageAddrDst+PageStart);
		McuRw;
	}
	for(i=0;i<32;i++)
	{
		if(i == PageStart)
		{
			i+=Length;
		}
		if(i==32)break;
		//MemoryRw;
		XBYTE[0x0f] = 1;
		SmcRead(PageAddrSrc+i);
		SmcPageProgram(PageAddrDst+i);
		XBYTE[0x0f] = 0;
		//McuRw;
	}
	if(SmcBlockErase(BlockSrc)==FALSE)return FALSE;
	for(i=0;i<32;i++)
	{
		if(i == PageStart)
		{
			i+=LogicLength;
		}
		if(i==32)break;
		//MemoryRw;
		XBYTE[0x0f] = 1;
		SmcRead(PageAddrDst+i);
		SmcPageProgram(PageAddrSrc+i);
		XBYTE[0x0f] = 0;
		//McuRw;
	}
bit	ReqDiskSpace(unsigned int FirstLogicAddrLow,unsigned int FirstLogicAddrHigh,unsigned int LogicLength,bit Mode)
{
	unsigned long PageAddrSrc;
	unsigned long PageAddrDst;
	unsigned int  BlockStart;
	unsigned int  BlockEnd;
	unsigned char PageStart;
	unsigned char PageEnd;
	unsigned int  ICount;
	unsigned char CCount;
  	if(Mode==Remov_Mode)
	{
		PageAddrSrc = FirstLogicAddrHigh;//The parameter FirstLogicAddrLow/High is absoulte address
		PageAddrSrc <<= 16;
		PageAddrSrc +=FirstLogicAddrLow+Offset*32;
		PageAddrDst = PageAddrSrc+LogicLength-1;
	}
	else
	{
		    //The parameter FirstLogicAddrLow/High is logic cluster number
			//PageAddrSrc = DataBase.Block*32+DataBase.Page+(FirstLogicAddrLow-2)*PbrInfo.SectorPerCluster;
			PageAddrSrc = FirstLogicAddrLow-2;
			PageAddrSrc = PageAddrSrc * PbrInfo.SectorPerCluster;
			PageAddrSrc = PageAddrSrc + DataBase.Block*32+DataBase.Page;
			PageAddrDst = PageAddrSrc + LogicLength*PbrInfo.SectorPerCluster-1;
	}
	BlockStart = PageAddrSrc>>5;
	BlockStart+= (BlockStart/496)*16;
	PageStart  = PageAddrSrc % 32;
	////////////////////////////////////
	BlockEnd   = PageAddrDst>>5;
	BlockEnd  += (BlockEnd/496)*16;
	PageEnd	 = PageAddrDst % 32;
	///////////////////////////////////
	if(BlockStart != BlockEnd)
	{
		BackupData(BlockStart,PageStart,32-PageStart);
		BackupData(BlockEnd,0,PageEnd+1);
	}
	else
	{
		BackupData(BlockStart,PageStart,PageEnd-PageStart+1);
	}
	////////////////////////////////////
	for(ICount = BlockStart+1;ICount<BlockEnd;ICount++)
	{
		if((ICount%512)==496)
			ICount+=16;
		if(SmcBlockErase(ICount)==FALSE)return FALSE;
	}
	return TRUE;
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品久久久久影院老司| 国产麻豆一精品一av一免费| 亚洲免费高清视频在线| 亚洲国产成人私人影院tom| 国产亚洲制服色| 国产拍揄自揄精品视频麻豆| 久久久91精品国产一区二区三区| 久久精品水蜜桃av综合天堂| 国产日韩欧美精品电影三级在线| 中文字幕免费一区| 自拍偷拍国产精品| 伊人婷婷欧美激情| 五月激情综合婷婷| 精品在线你懂的| 国产·精品毛片| av在线不卡网| 欧美色涩在线第一页| 欧美欧美欧美欧美| 欧美成人video| 亚洲国产成人在线| 亚洲综合免费观看高清完整版在线 | 成人国产一区二区三区精品| 97久久精品人人做人人爽50路| 91丨porny丨户外露出| 欧美伊人精品成人久久综合97| 3atv一区二区三区| 久久奇米777| 中文字幕日韩一区二区| 亚洲成av人**亚洲成av**| 美女脱光内衣内裤视频久久网站 | 成人午夜精品一区二区三区| 色综合久久久久综合体| 欧美人狂配大交3d怪物一区| 精品国产免费人成电影在线观看四季| 久久精品夜色噜噜亚洲a∨| 亚洲品质自拍视频网站| 婷婷丁香激情综合| 成人综合在线观看| 欧美日韩国产小视频| 久久久久综合网| 亚洲自拍偷拍综合| 九色综合国产一区二区三区| 91丝袜美腿高跟国产极品老师| 欧美剧情电影在线观看完整版免费励志电影| 日韩无一区二区| 国产精品色在线观看| 丝袜美腿亚洲综合| av亚洲产国偷v产偷v自拍| 4438亚洲最大| 亚洲欧美激情插| 老司机免费视频一区二区三区| 99re视频这里只有精品| 日韩欧美成人一区二区| 激情国产一区二区| 91福利国产成人精品照片| 精品久久久久久无| 亚洲永久免费av| 豆国产96在线|亚洲| 91精品国产综合久久久久久久 | 欧美精品 日韩| 国产精品的网站| 久久精品国产亚洲5555| 91福利视频久久久久| 国产日韩精品一区二区浪潮av| 午夜免费久久看| 91麻豆.com| 中文成人综合网| 麻豆成人免费电影| 欧美性受xxxx| 亚洲少妇最新在线视频| 国产精品一区二区91| 日韩一区二区三区四区五区六区| 亚洲美女免费在线| 成人性生交大片免费看在线播放| 日韩欧美综合在线| 午夜精品久久久| 欧美在线一区二区| 亚洲欧美偷拍卡通变态| 高清av一区二区| 国产亚洲一区二区在线观看| 日本午夜精品一区二区三区电影| 色猫猫国产区一区二在线视频| 国产精品少妇自拍| 国产·精品毛片| 国产欧美一区二区三区鸳鸯浴 | 国产成人在线视频网址| 日韩欧美一级在线播放| 日韩不卡一二三区| 欧美日韩电影在线| 亚洲6080在线| 欧美日韩一区二区在线视频| 一区二区三区在线观看欧美| 97久久人人超碰| 亚洲日本va在线观看| 不卡免费追剧大全电视剧网站| 久久久久久一二三区| 韩国成人在线视频| 精品成人在线观看| 国产精品综合二区| 久久亚区不卡日本| 国产一区二区不卡在线| 久久精品一二三| 国产v日产∨综合v精品视频| 久久精品这里都是精品| 顶级嫩模精品视频在线看| 国产欧美精品一区二区色综合朱莉| 国内成+人亚洲+欧美+综合在线| 精品少妇一区二区三区日产乱码| 久久成人精品无人区| ww亚洲ww在线观看国产| 国产精品资源网站| 国产精品一区久久久久| 久久久久久久性| 国产成人在线电影| 中文字幕在线不卡| 在线观看国产91| 午夜久久久久久| 欧美一区二区三区免费观看视频 | 91福利视频网站| 日韩国产欧美在线观看| 欧美成人aa大片| 国产成人欧美日韩在线电影| 中文字幕亚洲成人| 欧美婷婷六月丁香综合色| 免费精品视频在线| 国产日韩欧美综合一区| 色先锋久久av资源部| 视频在线在亚洲| 久久综合九色综合97婷婷女人| 成人午夜私人影院| 一区二区三区久久| 欧美乱熟臀69xxxxxx| 国产一区二区在线影院| 一区二区中文视频| 欧美日韩精品一区二区| 久久精品免费观看| 综合分类小说区另类春色亚洲小说欧美| 日本道免费精品一区二区三区| 日韩国产成人精品| 日本一区二区综合亚洲| 欧美亚洲一区二区在线| 久久99精品国产91久久来源| 国产精品不卡在线| 9191国产精品| 成人精品亚洲人成在线| 午夜精品福利一区二区三区av | 综合久久国产九一剧情麻豆| 欧美丰满美乳xxx高潮www| 国产成人在线观看免费网站| 亚洲高清中文字幕| 国产精品网站在线| 欧美精品 国产精品| 成人毛片在线观看| 免费观看一级欧美片| 自拍偷拍亚洲综合| 精品精品欲导航| 91成人免费在线视频| 国内精品国产成人| 午夜精品久久久久久久久久久 | 国产91丝袜在线观看| 亚州成人在线电影| 国产精品久久午夜夜伦鲁鲁| 欧美另类一区二区三区| av中文字幕亚洲| 国产乱妇无码大片在线观看| 亚洲成人免费电影| 国产精品久久久久久久久免费桃花| 日韩午夜在线观看视频| 欧美在线观看视频一区二区三区| 国产福利一区在线| 日韩有码一区二区三区| 亚洲激情校园春色| 国产精品日日摸夜夜摸av| 精品区一区二区| 欧美久久一区二区| 色菇凉天天综合网| 丰满亚洲少妇av| 国产乱子伦一区二区三区国色天香| 亚洲成人av电影| 亚洲视频一区二区在线观看| 久久青草欧美一区二区三区| 91精品国产色综合久久| 欧洲亚洲国产日韩| 一本色道久久综合精品竹菊| 成人深夜视频在线观看| 国产精品一区在线观看你懂的| 免费成人av在线播放| 日韩和欧美一区二区三区| 亚洲综合网站在线观看| 亚洲色欲色欲www在线观看| 国产无人区一区二区三区| 日韩精品中午字幕| 91精品国产入口| 欧美一区二区三区小说| 欧美日韩国产不卡| 欧美久久久久免费| 欧美视频日韩视频| 欧美亚日韩国产aⅴ精品中极品| 97久久精品人人爽人人爽蜜臀| 国产成人亚洲综合a∨婷婷|