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

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

?? ide_8051.txt

?? 單片機驅動IDE硬盤的C程序
?? TXT
?? 第 1 頁 / 共 2 頁
字號:
//----------------------------------------------------------------------------
// IDE                                                     19960417 CHG
// Small and simple interface for an "standard" IDE Harddisk connected
// to a 8051 cpu, in this case a DS5000, but all other 8051 compatible
// cpu could be used, as long as they have some external RAM, 1KByte or so
//
// This code is provided as is, with NO responsibility by the author !
// ie. this is use on your own risk !!!!!
//
// Code is free to use, the only request i have is, that if you do some
// enhancements, discoveries I would appreciate to get a copy/info on what
// YOU have done !
// That way, we can all help each other with code etc etc etc.
//
// Made by
//   Carsten Groen, OZ9AAR
//   Kaervaenget 46, Gl. Sole
//   DK-8722 Hedensted
//   Denmark
//   email: cgroen@image.dk
//
//----------------------------------------------------------------------------
#include <reg5000.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>

//----------------------------------------------------------------------------
// Constants...
//----------------------------------------------------------------------------
#define TRUE     1
#define FALSE    0
#define CTRL     0
#define CMD      1
#define DRIVE0   0

//----------------------------------------------------------------------------
// Types
//----------------------------------------------------------------------------
typedef struct {
  unsigned char Heads;
  unsigned int Tracks;
  unsigned int SectorsPerTrack;
  char Model[41];
} tdefDriveInfo;

//----------------------------------------------------------------------------
// I/O definitions...
// The IDE harddisk is just connected DIRECTLY to these I/O ports on the 8051
// See pin numbers on IDC connecter on IDE drive in one of the attached files.
// REMEMBER to make a pullup on the P0 port (ex 4.7 K to vcc from each of the
// 8 P0 pins
//----------------------------------------------------------------------------
#define nCS1FX  P00
#define nCS3FX  P01
#define DA0     P02
#define DA1     P03
#define DA2     P04
#define nDASP   P05
#define LSBDATA P1
#define MSBDATA P2
#define nDIOR   P06
#define nDIOW   P07
#define INTRQ   P32
#define IORDY   P33
#define RESET   P34

#define ALLINPUT 0xFF

//----------------------------------------------------------------------------
// Variables...
//----------------------------------------------------------------------------
unsigned int Timer10mSec=0;    // General timer, tick is 10 mSec
unsigned char SectorBuffer[512];


//----------------------------------------------------------------------------
// Wait for a specific time in 10 mSec
// Based on a 11.0592 Mhz crystal
//----------------------------------------------------------------------------
void Delay(unsigned char t) {
  unsigned int i;
  if (t==0) return;
  while (t--) for(i=0;i<774; i++);
}

//----------------------------------------------------------------------------
// Dump a buffer as a hex listing
//----------------------------------------------------------------------------

void HexDump( void *Dataa, int Len ) {
  unsigned char  *Data=Dataa;
  unsigned char  Line[80], *CurLine, *CurData;
  int   linelen, j;
  unsigned short  rc;
  unsigned char tmp;

  printf( "***************  HEX-DUMP  ***************\n" );
  while( Len ){
    linelen = Len < 16 ? Len : 16;
    *Line='\0';
    CurLine = Line;

    for( CurData=Data, j=0; j<linelen; j++ ) {
      tmp=*CurData;
      sprintf( CurLine, "%02BX ", tmp);
      CurLine+=3; CurData++;
    }

    for( j=linelen; j<17; j++ ) {
      *CurLine  =' ';
      CurLine[1]=' ';
      CurLine[2]=' ';
      CurLine+=3;
    }

    for( j=0; j<linelen; j++ ) {
      sprintf( CurLine, "%c ", *Data > ' ' ? *Data : '_' );
      Data++;CurLine+=1;
    }
    printf( Line );
    printf("\n");
    Len-=linelen;
  }
  rc = printf( "***************   HEXEND   ***************\n" );
}

//----------------------------------------------------------------------------
// Timer 0 interrupt service function
// executes each 10 mSec @ 11.0592 MHz Crystal Clock
//----------------------------------------------------------------------------
timer0() interrupt 1 using 1 {
  TH0  = 0xDC;         // reload timer again
  TL0  = 0x00;         // to 10 mSec timeout
  TR0  = 1;
  if (Timer10mSec) Timer10mSec--;
}

//----------------------------------------------------------------------------
// Show state of nDASP, INTRQ and IORDY signals
//----------------------------------------------------------------------------
void ShowInputs(void) {
  printf("Signals from Drive: nDASP=%s, INTRQ=%s, IORDY=%s\n",
         nDASP ? "FALSE":"TRUE", INTRQ ? "TRUE":"FALSE", IORDY ? "TRUE":"FALSE
");
}

//----------------------------------------------------------------------------
// Select address and CS signals
//----------------------------------------------------------------------------
void SetAddress(unsigned char cs, unsigned char adr) {
  DA0=((adr & 0x01)==0x01);
  DA1=((adr & 0x02)==0x02);
  DA2=((adr & 0x04)==0x04);
  if (cs==CTRL) {
    nCS1FX=1;
    nCS3FX=0;
  } else {
    nCS1FX=0;
    nCS3FX=1;
  }
}

//----------------------------------------------------------------------------
// Read data WORD from Drive
//----------------------------------------------------------------------------
unsigned int ReadWORD(unsigned char cs, unsigned char adr) {
  unsigned int tmp;
  MSBDATA=ALLINPUT;
  LSBDATA=ALLINPUT;
  SetAddress(cs,adr);
  nDIOR=0;
  tmp=(MSBDATA<<8)+LSBDATA;
  nDIOR=1;
  nCS1FX=1;
  nCS3FX=1;
  return tmp;
}

//----------------------------------------------------------------------------
// Read data BYTE from Drive
//----------------------------------------------------------------------------
unsigned char ReadBYTE(unsigned char cs, unsigned char adr) {
  unsigned char tmp;
  MSBDATA=ALLINPUT;
  LSBDATA=ALLINPUT;
  SetAddress(cs,adr);
  nDIOR=0;
  tmp=LSBDATA;
  nDIOR=1;
  nCS1FX=1;
  nCS3FX=1;
  return tmp;
}

//----------------------------------------------------------------------------
// Write data WORD to Drive
//----------------------------------------------------------------------------
void WriteWORD(unsigned char cs, unsigned char adr, unsigned int dat) {
  SetAddress(cs,adr);
  // OBS MSB/LSB is swapped (see writeSector function)
  MSBDATA=dat;
  LSBDATA=(dat>>8);
  nDIOW=0;
  nDIOW=1;
  nCS1FX=1;
  nCS3FX=1;
}

//----------------------------------------------------------------------------
// Write data BYTE to Drive
//----------------------------------------------------------------------------
void WriteBYTE(unsigned char cs, unsigned char adr, unsigned char dat) {
  SetAddress(cs,adr);
  MSBDATA=0;
  LSBDATA=dat;
  nDIOW=0;
  nDIOW=1;
  nCS1FX=1;
  nCS3FX=1;
}

//----------------------------------------------------------------------------
// Send Identify Command to Drive, and fetch resulting data
//----------------------------------------------------------------------------

unsigned char IdentifyDrive(bit DriveNo,  unsigned char *Buffer,
                            tdefDriveInfo *DriveInfo) {
  unsigned int i;
  unsigned char Tmp;
  WriteBYTE(CMD, 6, 0xA0 + (DriveNo ? 0x10:0x00)); // Select drive
  WriteBYTE(CMD, 1, 0);
  WriteBYTE(CMD, 2, 1);
  WriteBYTE(CMD, 3, 1);
  WriteBYTE(CMD, 4, 0);
  WriteBYTE(CMD, 5, 0);
  WriteBYTE(CMD, 7, 0xEC);
  Timer10mSec=10000;
  while ((ReadBYTE(CMD,7) & 0x08)!=0x08 && Timer10mSec); // Wait for DRQ or ti
meout
  if (Timer10mSec==0) return 0xFF;

  // Fetch the data...
  MSBDATA=ALLINPUT;
  LSBDATA=ALLINPUT;
  // Select address and activate CS
  SetAddress(CMD, 0);
  // Two bytes at a time
  for (i=0; i<512; i+=2) {
    nDIOR=0;
    *(Buffer+i)=LSBDATA;
    *(Buffer+i+1)=MSBDATA;
    nDIOR=1;
  }
  // Disable CS
  nCS1FX=1;
  nCS3FX=1;
  // Extract drive info
  DriveInfo->Heads           = (*(Buffer+7)<<8)  + *(Buffer+6);
  DriveInfo->Tracks          = (*(Buffer+3)<<8)  + *(Buffer+2);
  DriveInfo->SectorsPerTrack = (*(Buffer+13)<<8) + *(Buffer+12);
  // Swap bytes, because of 16 bit transfer...

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美二区三区| 国产老肥熟一区二区三区| 久久―日本道色综合久久| 91麻豆精品久久久久蜜臀| 欧美午夜片在线看| 欧美精品在线一区二区三区| 欧美日韩精品三区| 欧美一级夜夜爽| 欧美tk—视频vk| 久久你懂得1024| 亚洲国产一区在线观看| 免费成人av在线| 国产在线视频不卡二| 丁香婷婷综合网| 色婷婷综合激情| 欧美日产在线观看| 亚洲欧美一区二区久久| 欧美三级资源在线| 欧美日韩国产123区| 亚洲欧洲韩国日本视频| 亚洲高清免费观看| 成人高清视频在线观看| 欧美午夜精品久久久久久孕妇| 国产三级精品三级| 亚洲一区欧美一区| 国产毛片精品国产一区二区三区| 成人免费毛片a| 欧美日韩国产高清一区二区三区| 综合久久久久综合| 精品无人码麻豆乱码1区2区 | 亚洲成人一二三| 久久97超碰国产精品超碰| 欧美精品第一页| 午夜国产不卡在线观看视频| 国产成人午夜精品影院观看视频 | 日韩欧美你懂的| 中文在线一区二区| 亚洲高清免费视频| 欧美美女激情18p| 日本亚洲三级在线| 91亚洲永久精品| 一区二区三区四区高清精品免费观看 | 一区二区三区在线观看国产| 成人动漫视频在线| 亚洲视频你懂的| 在线看国产日韩| 国产精品视频九色porn| 日韩精品视频网| 一本一道综合狠狠老| 亚洲一区二区在线视频| 欧美日韩国产123区| 久久精品国产亚洲一区二区三区 | 91精品国产一区二区三区蜜臀 | 一区二区三区四区中文字幕| 在线观看91视频| 天天射综合影视| 2017欧美狠狠色| 秋霞成人午夜伦在线观看| 日韩欧美美女一区二区三区| 国产馆精品极品| 亚洲国产精品一区二区久久恐怖片 | 精品久久久网站| 成人av免费观看| 午夜精品福利在线| 精品乱人伦小说| 91免费在线视频观看| 婷婷久久综合九色综合伊人色| 日韩欧美第一区| 99国产一区二区三精品乱码| 久久久久久毛片| 91色porny| 看电影不卡的网站| 亚洲人成人一区二区在线观看| 3751色影院一区二区三区| 国产麻豆欧美日韩一区| 亚洲国产成人91porn| 国产亚洲1区2区3区| 国产成人免费在线观看不卡| 亚洲已满18点击进入久久| 精品国产精品一区二区夜夜嗨| 免费亚洲电影在线| 亚洲欧洲成人精品av97| 日韩一区二区三区av| 日韩国产欧美在线播放| 国产精品视频你懂的| 欧美一区日本一区韩国一区| 91网站视频在线观看| 国产精品中文欧美| 丝瓜av网站精品一区二区| 国产精品欧美极品| 精品久久久久久久久久久久包黑料| 91美女在线观看| 国产激情一区二区三区四区| 日本va欧美va精品发布| 亚洲国产中文字幕| 亚洲欧美另类在线| 中文在线一区二区| 久久综合一区二区| 欧美一级午夜免费电影| 欧美午夜电影在线播放| 成人精品国产一区二区4080| 国产一区三区三区| 奇米四色…亚洲| 天堂影院一区二区| 亚洲福利视频一区二区| 亚洲激情自拍偷拍| 日韩一级精品视频在线观看| 在线观看欧美黄色| 91免费观看国产| 色噜噜狠狠一区二区三区果冻| 无吗不卡中文字幕| 一区二区三区.www| 一区二区三区在线播放| 亚洲精品一卡二卡| 亚洲精品五月天| 一区二区三区波多野结衣在线观看| 亚洲欧美日韩在线播放| 亚洲人成人一区二区在线观看| 亚洲日本丝袜连裤袜办公室| 综合自拍亚洲综合图不卡区| 亚洲欧洲精品一区二区三区| 亚洲欧美激情小说另类| 一区二区欧美视频| 亚洲www啪成人一区二区麻豆| 亚洲一区二区中文在线| 天天色 色综合| 久久精品国产秦先生| 国产一区二区美女| 成人国产精品免费观看| 91久久国产最好的精华液| 色婷婷亚洲精品| 欧美精品色综合| 日韩女优毛片在线| 国产精品毛片无遮挡高清| 亚洲色欲色欲www| 亚洲成人第一页| 久久99久久久久久久久久久| 国产一区二区三区在线观看精品 | 精品中文字幕一区二区| 极品瑜伽女神91| 成人av午夜影院| 欧美视频在线观看一区二区| 亚洲欧美日韩一区| 天天色 色综合| 国产精品亚洲一区二区三区在线 | 欧美岛国在线观看| 国产日韩av一区二区| 亚洲免费观看在线视频| 蜜芽一区二区三区| 国产精品久久久久久久久免费桃花 | 欧美亚洲动漫制服丝袜| 欧美一级片在线| 中文字幕在线不卡视频| 午夜视频在线观看一区二区三区| 狠狠v欧美v日韩v亚洲ⅴ| 色久优优欧美色久优优| 91精品欧美一区二区三区综合在 | 91精品国产高清一区二区三区蜜臀| 久久久亚洲精品石原莉奈| 亚洲国产日韩精品| 国产精品18久久久久| 欧美三级资源在线| 国产精品你懂的在线| 麻豆一区二区三| 91行情网站电视在线观看高清版| 精品国产一区二区三区久久影院| 亚洲女子a中天字幕| 国产美女在线精品| 欧美精品电影在线播放| 中文字幕一区三区| 国产在线精品一区二区三区不卡 | 亚洲444eee在线观看| 成人性视频网站| 日韩欧美一区二区在线视频| 亚洲美女视频一区| 成人avav影音| 久久亚洲春色中文字幕久久久| 一区二区三区不卡视频| 99re这里只有精品视频首页| 久久综合99re88久久爱| 午夜精品久久久久久| 色综合中文字幕国产| 欧美精品日韩精品| 亚洲视频图片小说| 成人精品高清在线| 国产欧美1区2区3区| 久久爱www久久做| 91精品在线麻豆| 日韩成人一区二区| 精品视频在线看| 亚洲一区在线免费观看| 91丨porny丨户外露出| 国产日韩成人精品| 盗摄精品av一区二区三区| 久久综合狠狠综合久久综合88| 精品一区二区三区免费观看| 日韩欧美三级在线| 精品在线一区二区| 欧美成人一级视频| 男男gaygay亚洲|