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

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

?? ide_disk.c

?? TI DSP系列讀下CF卡程序,可用做圖象存儲產品的開發
?? C
?? 第 1 頁 / 共 2 頁
字號:
//DelayBy(1000);
    }
}

static void WriteSectors(unsigned int drive, unsigned short *buffer,
			 unsigned int NumberOfSectors)
{
int iCount, j, DataReg;
unsigned short data16;

  while (drivebusy(drive));
  outpw(drive_tab[drive].xHD_STATUS, WIN_WRITE);
  DataReg = drive_tab[drive].xHD_DATA;
  for (j=0;  j < NumberOfSectors; j++)
    {
      if (!testAltSTAT(drive, READY_STAT | SEEK_STAT | DRQ_STAT))
	break;
#ifdef __DSC_CFA__
   UpdateMCR(1 << 5, 1 << 4);
#endif
      for (iCount=SECTOR_SHORTS/2; iCount > 0; iCount--)
	{
	  data16 = CvtByteOrder16(*buffer++);
	  outph(DataReg, data16);
	  data16 = CvtByteOrder16(*buffer++);
	  outph(DataReg, data16);
	}
#ifdef __DSC_CFA__
   UpdateMCR(3 << 4, 0);
#endif
//DelayBy(1000);
    }
}
/* Read Hard Drive Identify Structure */
static int GetIdentifyStructure (int drive, struct hd_driveid *hd_id) {
   unsigned short *shptr;
   int i;

   reset_IDE_DRIVE(drive);

	outpw(drive_tab[drive].xHD_STATUS, WIN_IDENTIFY);
   while (drivebusy(drive));

   shptr = (unsigned short *)hd_id;
#ifdef __DSC_CFA__
   UpdateMCR(1 << 5, 1 << 4);
#endif
   for (i=0; i < SECTOR_SHORTS; i++)
      *shptr++ = inph(drive_tab[drive].xHD_DATA);
#ifdef __DSC_CFA__
   UpdateMCR(3 << 4, 0);
#endif
   return 0;
}


/*
     Initialize Drive it have to be always the first function.

     return:   at  ok          0
	            at  error    <> 0
*/

static int  InitializeDrive(int drive, struct hd_driveid *hd_id) {

    unsigned long size;

    if (-1 ==  GetIdentifyStructure (drive, hd_id))
       return -1;
    _hd_ident[drive].initialized = 1;
    _hd_ident[drive].heads       =  (unsigned char)hd_id->heads;
    _hd_ident[drive].sectors     =  (unsigned char)hd_id->sectors;
    _hd_ident[drive].cylinders   =  hd_id->cyls;
    _hd_ident[drive].start       =  0;

    if (hd_id->capability & LBA_capability) {
       _hd_ident[drive].lba = 2;
       size =  CvtByteOrder32(hd_id->lba_capacity);
    }
    else {
       _hd_ident[drive].lba = 0;
       size = _hd_ident[drive].heads * _hd_ident[drive].sectors \
                                     * _hd_ident[drive].cylinders;
    }
    _hd_ident[drive].tot_sectors =  size;
    return 0;
}


/*

        Read Partition Sector
        drive:      0..0
        return value:  at ok       0
                       at error    -1
*/
static int  ReadPartitionSector(int drive, struct PART_SECT *p_sect) {

      /*    read partiotion sector                   */
     return r_w_Disk(drive, 0, 1, (unsigned short*)p_sect, 1);
}


/*

      GetPartitionData (int drive, struct PART_SECT *p_sect)
      reads partition data, convert to big endian and initialize _hd_ident
      structure.

*/
static int  GetPartitionData(int drive, struct PART_SECT *p_sect) {
     int i;

      /*    partiotion sector                   */
     if (ReadPartitionSector(drive, p_sect))
        return -1;
     for (i=0; i < 4; i++) {
        if (p_sect->part_tab[i].partstatus == 0x80) {
            _hd_ident[drive].activ_part = i;
        }
     }
     if (CvtByteOrder16(p_sect->id_code) != 0xAA55)  {
         fprintf(stderr, "Partition has not valid identifier (0xAA55).\n");
         return -2;
     }
     else {
        for (i=0; i < 4; i++) {
           _hd_ident[drive].part_tab[i].partstatus = p_sect->part_tab[i].partstatus;
           _hd_ident[drive].part_tab[i].RW_head_part_start = p_sect->part_tab[i].RW_head_part_start;
           _hd_ident[drive].part_tab[i].sect_part_start = p_sect->part_tab[i].sect_part_start;
           _hd_ident[drive].part_tab[i].cyl_part_start = p_sect->part_tab[i].cyl_part_start;
           _hd_ident[drive].part_tab[i].sys_ind = p_sect->part_tab[i].sys_ind;
           _hd_ident[drive].part_tab[i].RW_head_part_end = p_sect->part_tab[i].RW_head_part_end;
           _hd_ident[drive].part_tab[i].sect_part_end = p_sect->part_tab[i].sect_part_end;
           _hd_ident[drive].part_tab[i].cyl_part_end = p_sect->part_tab[i].cyl_part_end;
           _hd_ident[drive].part_tab[i].dist = CvtByteOrder32(p_sect->part_tab[i].dist);
           _hd_ident[drive].part_tab[i].count_sect_part = CvtByteOrder32(p_sect->part_tab[i].count_sect_part);
        }
     }
     return 0;

}


#ifdef __DSC_CFA__

int installDrive(int drive) {
   int result;

   hardware_drv.cs1       = (1 << 31) | (1 << 12);
   hardware_drv.cs2       = (1 << 31) | (1 << 12) | 8;
   hardware_drv.addroffs  = 0;
   hardware_drv.timeing   = 0;
   hardware_drv.word_access = (1<<13);
   hardware_drv.irq       = 3;
   hardware_drv.drive     = drive;

   Outpw(REG0SEL, 1);   /* enable PCMCIA  */
   Outpw(REG2SEL, Inpw(REG2SEL) & ~(1<<2));   /* enable PCMCIA Wait Pin */
   UpdateBCR( (0x05 << 24) | 0x0a, (0x0a<<24) | 5);
     // mem2: 1 setup, 6 access, 2 hold
   UpdateMCR( 3 << 4,  1 << 26);
     // mem2: 8 bit, wait pin enable

   result = * (char *) 0x80001007;   /* status register */

   _init_hardware_tab( &hardware_drv, 1 << 13);
   result = reset_IDE_DRIVE(hardware_drv.drive);
   return result;
}

#else
#define SETUP_2  (1<<8)
#define ACCESS_6 (2<<5)
#define HOLD_2   (1<<3)

static int installDrive(int drive) {

   hardware_drv.drive     = drive;
   hardware_drv.cs1       = 2 << 24;
   hardware_drv.cs2       = 1 << 24;
   hardware_drv.addroffs  = 13;
   hardware_drv.timeing   = SETUP_2 | ACCESS_6 | HOLD_2;
   hardware_drv.word_access = 0;
//   hardware_drv.timeing   = 0x3F8;
   hardware_drv.irq       = 3;

   _init_hardware_tab( &hardware_drv, 0);
   return reset_IDE_DRIVE(hardware_drv.drive);
}
#endif

/*

        drive:      0
		  partnum:    0..3
        return value:  at ok       0, boot sector contents int boot_sect
                       at error    -1
*/
int  ReadBOOTSector(struct BOOT_SECT * boot_sect, int drive, int partnum /* 0..3 */) {

     if (_hd_ident[drive].initialized)
        r_w_Disk(drive, _hd_ident[drive].part_tab[partnum].dist, 1, (unsigned short*)boot_sect, READ_SEC);
     else
        return -1; /* partition sector is never read */
     return 0;
}

/*

        drive:      0
		  partnum:    0..3
        return value:  at ok       0, boot sector contents int boot_sect
                       at error    -1
*/
int  WriteBOOTSector(int drive, struct BOOT_SECT * boot_sect, int partnum /* 0..3 */) {

     if (_hd_ident[drive].initialized)
        r_w_Disk(drive, _hd_ident[drive].part_tab[partnum].dist, 1, (unsigned short*)boot_sect, 0);
     else
        return -1; /* partition sector is never read */
     return 0;
}

int testFAT(struct BOOT_SECT * boot_sect) {
    int fat_mode;

    if (!memicmp(boot_sect->filesys, "FAT16", 5))
        fat_mode = 16;
    else
    if (!memicmp(boot_sect->filesys, "FAT12", 5))
        fat_mode = 12;
    else
        fat_mode = -1;   /* error condition */
    return fat_mode;
}

static int  GetBootData(int drive, struct BOOT_SECT * boot_sect)
{
int partnum;
int found=0;
struct msdos_b_sect *tmp;
unsigned long MaxCluster;

     for (partnum=0; partnum < 4; partnum++) {
	unsigned long tmp1, tmp2;


	tmp1 = _hd_ident[drive].part_tab[partnum].count_sect_part;
	tmp2 = _hd_ident[drive].part_tab[partnum].sys_ind;
	if ( tmp1 && ( (tmp2 == 1) || (tmp2 == 4) || (tmp2 == 6))) {
	    if (ReadBOOTSector(boot_sect, drive, partnum))
		return -1;
	    tmp = malloc(sizeof(struct msdos_b_sect));
	    if (tmp) {
		 tmp->sectPerFat     = CvtByteOrder16(boot_sect->sectPerFat);
		 tmp->FatSystem      = (tmp2 == 1) ? 12 : 16;
		 tmp->bytesPerSector = CvtByteOrder16(boot_sect->bytesPerSector);
		 tmp->sectPerCluster = boot_sect->sectPerCluster;
		 tmp->resSectors     = CvtByteOrder16(boot_sect->resSectors);
		 tmp->nFats          = boot_sect->nFats;
		 tmp->nRootDir       = CvtByteOrder16(boot_sect->nRootDir);
		 tmp->nSectors       = CvtByteOrder16(boot_sect->nSectors);
		 tmp->nSectorHuge    = CvtByteOrder32(boot_sect->nSectorHuge);
		 tmp->nHidden        = CvtByteOrder32(boot_sect->nHidden);
		 tmp->extBoot        = boot_sect->extBoot;
		 tmp->volid          = CvtByteOrder32(boot_sect->volid);
		 MaxCluster          = tmp->nSectors? tmp->nSectors:tmp->nSectorHuge;
		 MaxCluster          = (MaxCluster-tmp->resSectors-
				       tmp->nFats*tmp->sectPerFat-
				       tmp->nRootDir/(SECTOR_SIZE/sizeof(struct directory)))/
				       tmp->sectPerCluster+1;
		 tmp->MaxCluster     = MaxCluster;
		 tmp->FatStart = malloc(tmp->bytesPerSector*tmp->sectPerFat);// *tmp->nFats);
		 r_w_Disk(drive, tmp->nHidden + tmp->resSectors, tmp->sectPerFat /* *tmp->nFats*/, tmp->FatStart, READ);
		 tmp->RootDirStart   = tmp->nHidden + tmp->resSectors + tmp->nFats * tmp->sectPerFat;
		 tmp->nDir           = tmp->nRootDir / (tmp->bytesPerSector >> 5);
		 tmp->DataStart      = tmp->nDir + tmp->RootDirStart;
		 memcpy(tmp->filesys, boot_sect->filesys, 8);
		 _hd_ident[drive].bootptr[partnum] = tmp;
	    }
	    else
               return -1;
            found = 1;
        }

     }
     return  found ? 0 : -1;
}




/*
      Drive Numerierung

          0                  Channel 0   Master
          1                  Channel 0   Slave
          2                  Channel 1   Master
          3                  Channel 1   Slave
*/

int _install_ATA_sys(int channel, int drive, struct hd_driveid *id,
                                             struct PART_SECT *p_sect,
                                             struct BOOT_SECT *boot_sect)
{

   int dist, pdrive;

   if ((channel < MAX_CHANNEL_NUM) && (drive < 2) && (0 <= drive)) {
      pdrive = (channel << 1) + drive;
      if (installDrive(pdrive))
         return -1;
      if (InitializeDrive(pdrive, id)) /* initialize and identify hard disk */
         return -2;

      if (GetPartitionData(pdrive, p_sect))
          return -3;

      if (GetBootData(drive, boot_sect))
           return -4;
   }
   else
      return -5;
   return 0;
}



?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色综合激情五月| 欧美激情艳妇裸体舞| 久久蜜桃av一区精品变态类天堂 | 亚洲一级在线观看| 亚洲高清在线视频| 久久99久久99小草精品免视看| 国产寡妇亲子伦一区二区| 色域天天综合网| 欧美一二区视频| 国产精品网站导航| 午夜不卡av免费| 国产99久久久久久免费看农村| 日本高清不卡aⅴ免费网站| 日韩精品一区在线| 亚洲视频免费在线| 麻豆精品视频在线观看免费| www.亚洲激情.com| 欧美一级片在线| 综合在线观看色| 久久电影网电视剧免费观看| 99re在线精品| 精品国产一区二区精华| 亚洲精品成人a在线观看| 国产在线一区二区| 在线观看日韩一区| 久久久亚洲高清| 日韩中文字幕1| 99久久99久久精品免费观看| 日韩你懂的在线播放| 亚洲免费在线视频| 国产精品亚洲一区二区三区在线| 在线观看国产一区二区| 国产欧美中文在线| 七七婷婷婷婷精品国产| 色哟哟国产精品| 久久久久9999亚洲精品| 日本成人在线电影网| 欧美在线一二三四区| 国产婷婷精品av在线| 日韩av一区二| 91精品办公室少妇高潮对白| 中文一区二区在线观看| 蜜臀av亚洲一区中文字幕| 色先锋aa成人| 国产日韩精品一区| 久久精品国产精品青草| 欧美性猛交一区二区三区精品| 中文字幕国产精品一区二区| 精品一区二区三区在线观看| 欧美日韩精品欧美日韩精品 | 在线免费不卡电影| 国产精品美女久久久久久久久久久| 美女高潮久久久| 91精品一区二区三区久久久久久 | 欧美日韩亚洲综合一区二区三区| 国产精品的网站| 国产成人av电影在线观看| 日韩一级二级三级| 丝瓜av网站精品一区二区| 色婷婷av一区二区三区gif| 国产精品福利一区二区| 国产成人亚洲精品青草天美| 精品理论电影在线观看| 男女男精品网站| 欧美精品色一区二区三区| 亚洲二区在线视频| 欧美女孩性生活视频| 亚洲自拍偷拍网站| 欧美在线观看视频在线| 亚洲精品免费电影| 色综合中文字幕国产| 国产丝袜欧美中文另类| 国产东北露脸精品视频| 国产网站一区二区| 国产成人免费高清| 国产农村妇女精品| 成人深夜视频在线观看| 国产精品你懂的在线欣赏| 懂色一区二区三区免费观看| 国产午夜亚洲精品羞羞网站| 国产成人精品三级麻豆| 国产农村妇女精品| www.亚洲精品| 亚洲一区二区在线视频| 欧美网站大全在线观看| 亚洲18色成人| 欧美一区二区在线播放| 久久国产夜色精品鲁鲁99| 久久这里只精品最新地址| 亚洲私人黄色宅男| 一区二区三区高清| 欧美精品在线一区二区三区| 偷拍自拍另类欧美| 欧美一级国产精品| 精品一区二区三区影院在线午夜 | 日本 国产 欧美色综合| 精品久久久影院| 国产精品乡下勾搭老头1| 国产女主播一区| 日本一不卡视频| 美女视频网站黄色亚洲| 3atv一区二区三区| 精品综合久久久久久8888| 国产欧美日韩一区二区三区在线观看| 成人高清视频在线| 亚洲一区在线观看免费观看电影高清| 欧美调教femdomvk| 国产资源在线一区| 国产精品福利影院| 欧美精品亚洲二区| 国产精品亚洲午夜一区二区三区| 亚洲图片激情小说| 欧美日韩成人一区| 国产黑丝在线一区二区三区| 亚洲欧美国产高清| 日韩欧美综合在线| 成人app下载| 成人av在线一区二区| 色婷婷久久久亚洲一区二区三区| 欧美日韩的一区二区| 欧美日韩高清不卡| 日韩亚洲欧美在线观看| 26uuu精品一区二区三区四区在线| 粉嫩一区二区三区性色av| 悠悠色在线精品| 精品乱人伦小说| 一本一本大道香蕉久在线精品| 日韩精品一级中文字幕精品视频免费观看 | 激情小说亚洲一区| 亚洲免费观看在线观看| 91精品国产一区二区三区蜜臀| 国产白丝精品91爽爽久久| 亚洲一区二区偷拍精品| 久久久亚洲精品一区二区三区| 日本韩国欧美在线| 国产资源精品在线观看| 亚洲国产aⅴ天堂久久| 欧美国产精品v| 4438x成人网最大色成网站| 成人av在线网| 另类小说色综合网站| 亚洲精品久久久久久国产精华液| 欧美精品一区二区三区在线| 欧美视频第二页| av激情亚洲男人天堂| 精品一区在线看| 日韩中文字幕亚洲一区二区va在线| 国产精品系列在线| 日韩欧美一级片| 欧美视频在线一区二区三区| 成人性生交大片免费看在线播放| 男人的天堂久久精品| 亚洲成a人片在线观看中文| 成人欧美一区二区三区白人 | 成人免费高清视频在线观看| 美女视频黄频大全不卡视频在线播放| 中文字幕在线观看不卡视频| 26uuu亚洲| 日韩欧美在线123| 精品视频在线看| 91丨九色丨黑人外教| 国产999精品久久| 极品尤物av久久免费看| 亚洲成人精品一区| 亚洲精品中文在线影院| 国产精品三级电影| 久久久久国产精品人| 精品欧美一区二区在线观看| 在线播放国产精品二区一二区四区| 色先锋资源久久综合| 91在线你懂得| 91在线国内视频| aaa国产一区| 99久久婷婷国产综合精品| 国产91综合网| 丁香激情综合国产| 国产福利精品一区二区| 国产盗摄一区二区三区| 国产在线一区观看| 国产麻豆视频一区二区| 免费观看91视频大全| 日韩国产欧美在线播放| 日本中文字幕一区二区有限公司| 亚洲地区一二三色| 亚洲高清在线精品| 视频一区二区国产| 青青草一区二区三区| 蜜臀av一级做a爰片久久| 男女男精品网站| 国内成人自拍视频| 国产精品伊人色| 国产传媒一区在线| 高清不卡在线观看av| 成人h版在线观看| 91美女在线看| 色播五月激情综合网| 欧美在线视频你懂得| 91精品国产福利| 精品成人佐山爱一区二区| 久久久久久久久蜜桃|