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

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

?? ide_io.h

?? AT89C51SND1C方案mp3資料,使用三星FLASH.
?? H
字號:

#define IDE_INTERRUPT					FALSE

//IDE basic I/O
#define IDE_ADDR_CTRL					0x00
#define IDE_ADDR_CMD					0x10

#define IDE_IO_RE						P3_7
#define IDE_IO_WE						P3_6
#define IDE_IO_CS0						0x80		//P4_2
#define IDE_IO_CS1						0x40		//P4_3
#define IDE_IO_DA0						0x01		//P4_1
#define IDE_IO_DA1						0x02		//P4_4
#define IDE_IO_DA2						0x04		//P4_0

#define IDE_IO_RESET						P5_0
#define IDE_ADDR_BASE						0x8000

#define IDE_ADDR_CTRL						0x1000
#define IDE_ADDR_CMD						0x0000

//IDE設備控制寄存器地址
#define IDE_ADDR_CTRL_STATUS				IDE_ADDR_BASE + IDE_ADDR_CTRL + IDE_IO_DA2 + IDE_IO_DA1
#define IDE_ADDR_CTRL_CONTROL				IDE_ADDR_BASE + IDE_ADDR_CTRL + IDE_IO_DA2 + IDE_IO_DA1

//IDE設備命令寄存器地址
#define IDE_ADDR_CMD_DATA					IDE_ADDR_BASE + IDE_ADDR_CMD
#define IDE_ADDR_CMD_ERROR					IDE_ADDR_BASE + IDE_ADDR_CMD + IDE_IO_DA0
#define IDE_ADDR_CMD_SECCNT					IDE_ADDR_BASE + IDE_ADDR_CMD + IDE_IO_DA1
#define IDE_ADDR_CMD_LBA0					IDE_ADDR_BASE + IDE_ADDR_CMD + IDE_IO_DA1 + IDE_IO_DA0
#define IDE_ADDR_CMD_LBA1					IDE_ADDR_BASE + IDE_ADDR_CMD + IDE_IO_DA2
#define IDE_ADDR_CMD_LBA2					IDE_ADDR_BASE + IDE_ADDR_CMD + IDE_IO_DA2 + IDE_IO_DA0
#define IDE_ADDR_CMD_LBA3					IDE_ADDR_BASE + IDE_ADDR_CMD + IDE_IO_DA2 + IDE_IO_DA1
#define IDE_ADDR_CMD_STATUS					IDE_ADDR_BASE + IDE_ADDR_CMD + IDE_IO_DA2 + IDE_IO_DA1 + IDE_IO_DA0
#define IDE_ADDR_CMD_COMMAND				IDE_ADDR_BASE + IDE_ADDR_CMD + IDE_IO_DA2 + IDE_IO_DA1 + IDE_IO_DA0
#define IDE_ADDR_CMD_SECTOR					IDE_ADDR_BASE + IDE_ADDR_CMD + IDE_IO_DA1 + IDE_IO_DA0
#define IDE_ADDR_CMD_CYLMSB					IDE_ADDR_BASE + IDE_ADDR_CMD + IDE_IO_DA2
#define IDE_ADDR_CMD_CYLLSB					IDE_ADDR_BASE + IDE_ADDR_CMD + IDE_IO_DA2 + IDE_IO_DA0
#define IDE_ADDR_CMD_HEAD					IDE_ADDR_BASE + IDE_ADDR_CMD + IDE_IO_DA2 + IDE_IO_DA1

//IDE data port
#define IDE_PORT_DATLSB					ACC
#define IDE_PORT_DATMSB					DAT16H

//IDE status bit
#define IDE_STATUS_BSY					0x80
#define IDE_STATUS_DRDY					0x40
#define IDE_STATUS_DF					0x20
#define IDE_STATUS_DSC					0x10
#define IDE_STATUS_DRQ					0x08
#define IDE_STATUS_CORR					0x04	
#define IDE_STATUS_IDX					0x02	
#define IDE_STATUS_ERR					0x01

//IDE error bit
#define IDE_ERR_UNC						0x40
#define IDE_ERR_MC						0x20
#define IDE_ERR_IDNF					0x10	
#define IDE_ERR_MCR						0x08
#define IDE_ERR_ABRT					0x04	
#define IDE_ERR_TK0NF					0x02	
#define IDE_ERR_AMNF					0x01

//IDE control bit
#define IDE_CTRL_SRST					0x04
#define IDE_CTRL_nIEN					0x02	
#define IDE_CTRL_LBA					0x40	
#define IDE_CTRL_DEV					0x10	

//IDE device operate mode
#define IDE_MODE_DEVICE0_LBA			0xE0
#define IDE_MODE_DEVICE0_CHS			0xA0
#define IDE_MODE_DEVICE1_LBA			0xF0
#define IDE_MODE_DEVICE1_CHS			0xB0

//IDE command
#define IDE_CMD_RECAL					0x10
#define IDE_CMD_READ					0x20
#define IDE_CMD_WRITE					0x30
#define IDE_CMD_DEVDIAG					0x90
#define IDE_CMD_INIT					0x91
#define IDE_CMD_SPINDOWN				0xE0
#define IDE_CMD_SPINUP					0xE1
#define IDE_CMD_IDENTIFYDEV				0xEC

#define IDE_DEVICE0						0
#define IDE_DEVICE1						1

#define IDE_WAIT						TRUE
#define IDE_NOWAIT						FALSE

#define IDE_RESET_HARDWARE				0
#define IDE_RESET_SOFTWARE				1


//IDE function return value
#define IDE_SUCCESSFUL					0x00
#define IDE_ERROR_RESET					0x01
#define IDE_ERROR_DIAGNOSTIC			0x01
#define IDE_ERROR_BUSY					0x10
#define IDE_ERROR_NOREADY				0x11
#define IDE_ERROR_DEVFAULT				0x12
#define IDE_ERROR_NODATA				0x13

#define IDE_READ_LSB(addr,dat)			dat=*((BYTE xdata *)addr)
#define IDE_READ_MSB(addr)				SET_BIT_6(AUXR),*((BYTE xdata *)addr),CLEAR_BIT_6(AUXR),IDE_PORT_DATMSB
#define IDE_WRITE_LSB(addr,dat)			*((BYTE xdata *)addr)=dat
#define IDE_WRITE_MSB(addr,dat)			IDE_PORT_DATMSB=dat,EXT16=1,*((BYTE xdata *)addr|(dat<<8)),EXT16=0
#define IDE_READ_WORD(addr,lo,hi)		SET_BIT_6(AUXR);lo=*((BYTE xdata *)addr);hi=IDE_PORT_DATMSB;CLEAR_BIT_6(AUXR)
#define IDE_WRITE_WORD(addr,lo,hi)		SET_BIT_6(AUXR);IDE_PORT_DATMSB=hi;*((BYTE xdata *)addr)=lo;CLEAR_BIT_6(AUXR)

#define DRIVER_TYPE_HDD			0x00		//硬盤
#define DRIVER_TYPE_CDROM		0x01		//光驅
#define DRIVER_TYPE_FLASH		0x02		//FLASH

#define IDEReadSector(X)		IDE.CurrentSector=X; _IDEReadSector()
#define IDEWriteSector(X)		IDE.CurrentSector=X; _IDEWriteSector()

struct IDEStr					 
{
	BYTE	TotalDrivers;		//驅動器數量
	BYTE	CurrentDriver;		//當前驅動器
	BYTE	DriverType;			//驅動器類型
	WORD	BytesPerSec;		//每扇區字節數  512
	DWORD	CurrentSector;		//當前扇區號
}IDE;

struct HDDStr					//硬盤介質參數表
{
	BYTE	TotalPartitions;	//分區數
	BYTE	CurrentPartition;	//當前分區
}HDD;

BYTE IDEInit(void);
BYTE IDEReset(BYTE bRestMode);
int IDE_Busy();
BOOL IDEStatus(BYTE flag,BYTE wait,BYTE logic,WORD timeout);
void IDESpinUP();				//硬盤啟動
void IDESpinDOWN();				//硬盤停止
BYTE _IDEReadSector();			//讀一個扇區
BYTE _IDEWriteSector();			//寫一個扇區


BYTE IDEInit(void)
{
	IDE.TotalDrivers=1;
	IDE.CurrentDriver=1;
	IDE.DriverType=DRIVER_TYPE_HDD;
	IDE.BytesPerSec=512;
    IDE_WRITE_LSB(IDE_ADDR_CMD_HEAD, 0xE0);			//SELECT MASTER HDD FOR LBA MODE
	IDE_WRITE_LSB(IDE_ADDR_CTRL_CONTROL,0x02);
	IDE_WRITE_LSB(IDE_ADDR_CMD_COMMAND,0x10);
	return(0);
/*	if (IDEReset(IDE_RESET_HARDWARE)) return(IDE_ERROR_RESET);		//IDE device reset

	if (!IDEStatus(IDE_STATUS_DRDY,IDE_WAIT,TRUE,255)) return(IDE_ERROR_NOREADY);
	#if (IDE_INTERRUPT)
		IDE_WRITE_LSB(IDE_ADDR_CTRL_CONTROL,0x00);						//enable interrupt mode
	#else
		IDE_WRITE_LSB(IDE_ADDR_CTRL_CONTROL,IDE_CTRL_nIEN);				//disable interrupt mode
	#endif
	
	//check device 0  (MASTER)
	if (IDEIdentifyDevice(IDE_DEVICE0)==IDE_SUCCESSFUL)
	{
		
	}
	else printf("Device 0 error!\n");

	//check device 1  (SLAVE)
	if (IDEIdentifyDevice(IDE_DEVICE1)==IDE_SUCCESSFUL)
	{

	}
	else printf("Device 1 error!\n");

	return(IDE_SUCCESSFUL);
*/
}


BYTE IDEReset(BYTE bRestMode)
{
	register BYTE i;
	if (bRestMode==IDE_RESET_HARDWARE)			//hardware reset
	{
		IDE_IO_RESET=0;
		for (i=0;i<10;i++);
		IDE_IO_RESET=1;
	}
	else if (bRestMode==IDE_RESET_SOFTWARE)		//software reset
	{
		#if (IDE_INTERRUPT)
			IDE_WRITE_LSB(IDE_ADDR_CTRL_CONTROL,IDE_CTRL_SRST);					//enable interrupt mode
		#else
			IDE_WRITE_LSB(IDE_ADDR_CTRL_CONTROL,IDE_CTRL_SRST|IDE_CTRL_nIEN);	//disable interrupt mode
		#endif
	}

	if (IDEStatus(IDE_STATUS_BSY,IDE_WAIT,FALSE,1000))	//wait for device reset
		return(IDE_SUCCESSFUL);
	else
		return(IDE_ERROR_RESET);
}
BOOL IDEStatus(BYTE flag,BYTE wait,BYTE logic,WORD timeout)
{
	register BYTE i,status;
	IDE_READ_LSB(IDE_ADDR_CTRL_STATUS,status);
	if (wait)
	{
		while((BOOL)((status&flag))^logic)
		{
			for(i=0;i<255;i++); timeout--;
			if (timeout==0) return(FALSE);
			IDE_READ_LSB(IDE_ADDR_CTRL_STATUS,status);
		}
		return(TRUE);
	}
	else
    	return(status&flag|0);
}    

int IDE_Busy()
{
    register int res,i = 0,j;
    do
    {
        IDE_READ_LSB(IDE_ADDR_CTRL_STATUS,res);
        for(j=0;j<100;j++);
        if(i++>5000) return -1;
    }while(res&0x80);

    return res;
}

void IDESpinUp(void)
{
    IDE_WRITE_LSB(IDE_ADDR_CMD_COMMAND,IDE_CMD_SPINUP);
    IDE_Busy();
}

void IDESpinDown(void)
{
    IDE_Busy();
    IDE_WRITE_LSB(IDE_ADDR_CMD_COMMAND,IDE_CMD_SPINDOWN);
    IDE_Busy();
}

BYTE _IDEReadSector(void)
{
	register BYTE *sector;
	register WORD i;

	sector=(BYTE *)&IDE.CurrentSector;

	if (!IDEStatus(IDE_STATUS_BSY,IDE_WAIT,FALSE,255)) {printf("BSY error\n"); return(0);}
	if (!IDEStatus(IDE_STATUS_DRDY,IDE_WAIT,TRUE,255)) {printf("DRDY error\n"); return(0);}
	IDE_WRITE_LSB(IDE_ADDR_CMD_LBA0,sector[3]);
	IDE_WRITE_LSB(IDE_ADDR_CMD_LBA1,sector[2]);
	IDE_WRITE_LSB(IDE_ADDR_CMD_LBA2,sector[1]);
	IDE_WRITE_LSB(IDE_ADDR_CMD_LBA3,0xe0|(sector[0]&0x0f));
	IDE_WRITE_LSB(IDE_ADDR_CMD_SECCNT,0x01);
	IDE_WRITE_LSB(IDE_ADDR_CMD_COMMAND,IDE_CMD_READ);
	if (!IDEStatus(IDE_STATUS_BSY,IDE_WAIT,FALSE,255)) {printf("BSY error\n"); return(0);}
	if (!IDEStatus(IDE_STATUS_DRQ,IDE_WAIT,TRUE,255)) {printf("DRQ error\n"); return(0);}
	for(i=0;i<512;)
	{
		IDE_READ_WORD(IDE_ADDR_CMD_DATA,DiskBuffer[i++],DiskBuffer[i++]);
	}
	return(0);
}

BYTE _IDEWriteSector(void)
{
	register BYTE *sector;
	register WORD i;

	sector=(BYTE *)&IDE.CurrentSector;

	if (!IDEStatus(IDE_STATUS_BSY,IDE_WAIT,FALSE,255)) {printf("BSY error\n"); return(0);}
	if (!IDEStatus(IDE_STATUS_DRDY,IDE_WAIT,TRUE,255)) {printf("DRDY error\n"); return(0);}
	IDE_WRITE_LSB(IDE_ADDR_CMD_LBA0,sector[3]);
	IDE_WRITE_LSB(IDE_ADDR_CMD_LBA1,sector[2]);
	IDE_WRITE_LSB(IDE_ADDR_CMD_LBA2,sector[1]);
	IDE_WRITE_LSB(IDE_ADDR_CMD_LBA3,0xe0|(sector[0]&0x0f));
	IDE_WRITE_LSB(IDE_ADDR_CMD_SECCNT,0x01);
	IDE_WRITE_LSB(IDE_ADDR_CMD_COMMAND,IDE_CMD_WRITE);
	if (!IDEStatus(IDE_STATUS_BSY,IDE_WAIT,FALSE,255)) {printf("BSY error\n"); return(0);}
	if (!IDEStatus(IDE_STATUS_DRQ,IDE_WAIT,TRUE,255)) {printf("DRQ error\n"); return(0);}
	for(i=0;i<512;)
	{
		IDE_WRITE_WORD(IDE_ADDR_CMD_DATA,DiskBuffer[i++],DiskBuffer[i++]);
	}
	return(0);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本精品裸体写真集在线观看| 欧美人狂配大交3d怪物一区| 久久成人免费网站| 自拍视频在线观看一区二区| 在线综合视频播放| 久久新电视剧免费观看| 精品国产免费一区二区三区香蕉| 高清不卡一二三区| 另类调教123区| 五月天精品一区二区三区| 国产a区久久久| 亚洲免费在线播放| 国产精品久久久久aaaa樱花| 成人动漫精品一区二区| 国精产品一区一区三区mba视频| 亚洲宅男天堂在线观看无病毒| 国产精品美女久久久久aⅴ| 精品国产成人系列| 久久亚洲一区二区三区明星换脸| 日韩三级高清在线| 日本视频一区二区三区| 亚洲综合在线视频| 亚洲综合色网站| 亚洲综合激情网| 天堂一区二区在线| 看国产成人h片视频| 久久99久久久欧美国产| 国产一区二区日韩精品| 成人在线视频一区二区| 91亚洲国产成人精品一区二三| 99久久精品国产一区二区三区 | 综合久久久久综合| 亚洲精品视频免费观看| 夜夜精品浪潮av一区二区三区| 日韩电影一二三区| 国产成人免费网站| 99精品欧美一区二区三区小说| 91久久国产综合久久| 欧美日韩国产一级二级| 欧美一级在线视频| 国产无一区二区| 亚洲激情图片qvod| 精品在线免费观看| 97se亚洲国产综合在线| 91精品午夜视频| 国产女主播一区| 亚洲欧美欧美一区二区三区| 蜜臀久久久久久久| 国产精品456露脸| 欧美午夜精品久久久| 久久亚洲精品国产精品紫薇| 亚洲天堂久久久久久久| 日本美女一区二区三区| gogo大胆日本视频一区| 欧美日本国产视频| 欧美国产一区视频在线观看| 五月天欧美精品| 成人国产一区二区三区精品| 欧美一区二区三区四区久久| 136国产福利精品导航| 蜜臀a∨国产成人精品| 91麻豆精品视频| 国产精品视频一区二区三区不卡| 青青草国产成人av片免费| 97久久超碰精品国产| 久久先锋资源网| 美女一区二区在线观看| 欧美最猛性xxxxx直播| 国产精品丝袜一区| 国产精品一卡二卡在线观看| 欧美不卡一区二区三区四区| 亚洲国产一区二区a毛片| 日本韩国欧美一区| 亚洲综合一区二区| 色94色欧美sute亚洲13| 国产精品国产三级国产aⅴ无密码| 激情综合色综合久久综合| 欧美一区二区视频网站| 免费观看日韩av| 欧美福利视频一区| 石原莉奈在线亚洲二区| 欧美日韩三级视频| 午夜精品123| 欧美人成免费网站| 香蕉影视欧美成人| 欧美日韩国产综合久久 | 韩国一区二区视频| 欧美精品一区二区三区在线| 久久国产日韩欧美精品| 久久久午夜精品| 成人av动漫在线| 亚洲乱码中文字幕| 欧美中文字幕亚洲一区二区va在线| 亚洲线精品一区二区三区八戒| 欧美三级三级三级| 狠狠色综合日日| 国产精品美女久久福利网站| 91黄色免费网站| 免费高清成人在线| 久久久久久久久蜜桃| 91日韩精品一区| 日韩综合小视频| 久久精品在线观看| 91麻豆国产福利在线观看| 日韩 欧美一区二区三区| 精品久久国产字幕高潮| 91理论电影在线观看| 亚洲成人一区在线| 精品国产乱码久久| 在线观看不卡一区| 国产原创一区二区| 一区二区三区欧美日韩| 精品国产人成亚洲区| 91在线视频播放地址| 蜜桃av一区二区三区电影| 国产精品免费av| 日韩欧美国产三级| 91在线视频播放地址| 国产主播一区二区三区| 亚洲一区二区三区四区不卡| 国产欧美日韩精品a在线观看| 在线亚洲精品福利网址导航| 成人性生交大片免费看在线播放 | 在线一区二区视频| 福利电影一区二区| 日本午夜一区二区| 亚洲在线免费播放| 国产亚洲精品aa午夜观看| 欧美一级高清大全免费观看| 白白色 亚洲乱淫| 国产不卡在线视频| 久久国内精品自在自线400部| 亚洲精品国产成人久久av盗摄| 国产午夜精品理论片a级大结局| 欧美电影影音先锋| 欧美人与禽zozo性伦| 欧美日韩精品欧美日韩精品| 色视频一区二区| 北条麻妃国产九九精品视频| 国产风韵犹存在线视精品| 麻豆成人久久精品二区三区红| 天天综合网 天天综合色| 亚洲精品国产视频| 亚洲综合在线免费观看| 一区二区三区四区激情| 一区二区中文视频| 亚洲欧洲国产日本综合| 国产精品无圣光一区二区| 国产欧美日本一区视频| 日本一区二区免费在线观看视频 | 免费一级欧美片在线观看| 日韩高清在线电影| 麻豆精品在线播放| 国产精品一区在线观看乱码| 国内精品久久久久影院色| 蜜桃在线一区二区三区| 国内成+人亚洲+欧美+综合在线| 国产做a爰片久久毛片 | 日韩中文字幕不卡| 老司机精品视频线观看86 | 国产一区91精品张津瑜| 国产二区国产一区在线观看| 国产91丝袜在线18| 91麻豆福利精品推荐| 欧美日韩精品一区视频| 日韩精品在线一区二区| 国产亚洲精品超碰| 成人免费小视频| 日韩福利电影在线观看| 韩国成人精品a∨在线观看| 99riav久久精品riav| 欧美蜜桃一区二区三区| wwwwww.欧美系列| 亚洲自拍偷拍图区| 蜜桃视频在线观看一区二区| 国产精品一区久久久久| 色狠狠桃花综合| 精品国产sm最大网站免费看| 国产精品国产三级国产aⅴ中文 | 国产精品一区二区三区网站| 91香蕉国产在线观看软件| 91精品国产乱| 亚洲人一二三区| 久久精品国产免费看久久精品| 91啪九色porn原创视频在线观看| 欧美一区二区三区四区五区| 亚洲卡通动漫在线| 国产一本一道久久香蕉| 欧美日韩在线不卡| 日韩一区欧美一区| 国产一区二区三区四区五区美女| 欧美羞羞免费网站| 国产精品久久久久影院色老大| 蜜桃视频一区二区三区| 欧美色倩网站大全免费| 国产精品久久久久三级| 国产乱子轮精品视频| 日韩欧美成人一区| 丝袜美腿亚洲色图| 欧美三级三级三级爽爽爽|