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

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

?? hoarder.c

?? 用C語言讀寫CF卡程序 非常不錯的東西
?? C
?? 第 1 頁 / 共 3 頁
字號:
      order++;
    }
    cf_write('E');
    cf_write('N');
    cf_write('D');
  }
  output_high(BIM_TX);
  ad_on=FALSE;
  purge_adc_buffer();
}

#separate
void send_data_Tim()
{
  unsigned int temp;
  unsigned int bits;
  unsigned int i;
  boolean OldButton, NewButton;
  unsigned int ButtonCount; 
  if (!init_file_write()) return;
  ad_on=TRUE;
  OldButton=Button;
  while (!input(RCIF) && next_file_sector_write()) {
  	ButtonCount=0;
    cf_write('E');
    cf_write('S');
    cf_write('L');
    rtc_read_time();
    cf_write(time[0]);
    cf_write(time[1]);
    cf_write(time[2]);
    cf_write(time[3]);
    cf_write(time[4]);
    cf_write(time[6]);
    for (i=0; i<100; i++) {	  	
      for (temp=0; temp<4; temp++) {
      	do {
      		NewButton=input(BUTTON);
      	  if (!NewButton && OldButton) ButtonCount++;
      	  OldButton=NewButton; 	
        } while (buf_count==0);
        if (buffer[buf_head]>voltage+100) { 
         if (voltage<559) led_green(); else led_red();
        };
        cf_write(buffer[buf_head]);
        bits=(bits<<2)|((buffer[buf_head]>>8)&0x03);
        disable_interrupts(GLOBAL);
        buf_head=(buf_head+1)%buf_size;
        buf_count--;
        enable_interrupts(GLOBAL);
        led_off();
      }
      cf_write(bits);
    }
    cf_write(ButtonCount);
    cf_write(0);
    cf_write(0);
  }
  ad_on=FALSE;
  purge_adc_buffer();
}

#separate
void send_player_info()
{
  unsigned int temp;
  unsigned int bits;
  unsigned long order;
  unsigned int i;
  ad_on=TRUE;
  order=0;
  output_low(BIM_TX);
  while (!input(RCIF)) {
    for (temp=0; temp<5; temp++) putc(0x5A); //total packet length 15 @ 38400; 22 @ 57600
    crc16=0;
    put_crc(0xA5);
    put_crc(order);	
    put_crc(order>>8);	
    for (temp=0; temp<4; temp++) { 	
      while (buf_count==0);
      put_crc(buffer[buf_head]);
      bits=(bits<<2)|((buffer[buf_head]>>8)&0x03);
			//if (temp==1) if (buffer[buf_head]<15) output_low(BIM_TX); else output_high(BIM_TX);
      disable_interrupts(GLOBAL);
      buf_head=(buf_head+1)%buf_size;
      buf_count--;
      enable_interrupts(GLOBAL);
    }
    put_crc(bits);
    putc(crc16);     
    putc(crc16>>8);
    order++;
  }
  output_high(BIM_TX);
  ad_on=FALSE;
  purge_adc_buffer();
}

// Print RTC time
#separate
void print_time()
{
  rtc_read_time();
  printf("%2X/%2X/%2X %2X:%2X:%2X", time[4], time[3], time[6], time[2], time[1], time[0]);
}

// Enable RTC oscillator and counter
#separate
void reset_time()
{
  printf("Time reset");
  rtc_write(7,0);
  rtc_write(0,0);
}

// Print CF information
#separate
void check_cf()
{
  if (!enable_cf()) {
    printf("Invalid disk\n");
  } else {
    printf("Dir 0x%2X%2X%2X%2X\n", dir_start[3], dir_start[2], dir_start[1], dir_start[0]);
    printf("Data sectors 0x%2X%2X%2X%2X\n", data_sectors[3], data_sectors[2], data_sectors[1], data_sectors[0]);
    if (file_valid) {
      printf("File start 0x%2X%2X%2X%2X\n", data_start[3], data_start[2], data_start[1], data_start[0]);
      printf("File size 0x%2X%2X%2X%2X\n", data_file_size[3], data_file_size[2], data_file_size[1], data_file_size[0]);
    } else printf("File not found");
  }  
}

// Set RTC time to 8 bytes received thru serial port
#separate
void set_time()
{
  int i;
  for (i=0; i<8; i++) time[i]=loadc();
  rtc_write(7,0);
  rtc_set_time();
}

// Well...
void print_help()
{
  return;
}

/*
| int fromHex(char hex)
| Preconditions: hex is 1-f
| Postconditions: returned int is 1-16
*/
int fromHex(char hex)
{
	if(hex >= '0' && hex <= '9')
	  return(hex - 48); // 0 --> 0
	
	if(hex >= 'a' && hex <= 'f')
	  return(hex - 87);  // a --> 10
	  
	if(hex >= 'A' && hex <= 'F')
	  return(hex - 55); // A --> 10

  // Still here?  Invalid
	return(20);
	
}

// Issues identify drive command (0xEC) and sends result to serial port
#separate
void identify_drive()
{
  unsigned int cnt;

  while ((cf_task_file_read(7)&0xC0)!=0x40);
  cf_task_file_write(6, 0xA0);   // drive 0
  cf_task_file_write(7, 0xEC);   // identify drive command
  while ((cf_read()&0x80)==0x80);
  cf_set_addr(0);

  for(cnt = 0; cnt < 0xFF; cnt++)
  {
    putc(cf_read());
  }

  for(cnt = 0; cnt < 0xFF; cnt++)
  {
    putc(cf_read());
  }
  putc(cf_read());
  putc(cf_read());
}

// reads sector and sends result to serial port
#separate
void read_sector()
{
  unsigned int cnt;

  sector[0]=loadc();
  sector[1]=loadc();
  sector[2]=loadc();
  sector[3]=loadc();
  cf_start_sector_read();

  for(cnt = 0; cnt < 0xFF; cnt++)
  {
    putc(cf_read());
  }

  for(cnt = 0; cnt < 0xFF; cnt++)
  {
    putc(cf_read());
  }

  putc(cf_read());
  putc(cf_read());
}

// CF debugging:
// read and print CF register
#separate
void read_register() {
  int temp;
  temp=cf_task_file_read(curAddr);
  printf("%d: 0x%2X(%u)\n", curAddr, temp, temp);
}

// CF debugging:
// write CF register
#separate
void write_register() {
  printf("Writing 0x%2X(%u) to addr %u\n", curData, curData, curAddr);
  cf_task_file_write(curAddr, curData);
}

// CF debugging:
// set data to write to CF register
#separate
void set_data() {
  int temp;
  printf("Data (hex): ");
  temp = loadc();
  putc(temp);
  if((temp = fromHex(temp)) > 16) return;
  curData = (temp << 4);
  temp = loadc();
  putc(temp);
  if ((temp = fromHex(temp)) > 16) return;
  curData |= temp;
  printf("\nData 0x%2X(%u)\n", curData, curData);
}

// CF debugging:
// set CF register address
#separate
void set_address() {
  int temp;
  printf("Addr (0-7): ");
  temp=loadc();
  putc(temp);
  temp = fromHex(temp);
  if (temp > 7) return;
  curAddr = temp;
  printf("\nAddr %u\n", curAddr);
}

// Find data file in root directory
// If found returns TRUE and first cluster in global var cluster	
#separate
boolean find_data_file_name() {
  int i, j, k, l;
  boolean match;
  move32(sector, dir_start);
  for (i=0; i<root_entries>>4; i++) {
    cf_start_sector_read();
    for (j=0; j<16; j++) {
      match=true;
      for (k=0; k<11; k++) if (cf_read()!=fname[k]) match=false;
      cf_read_skip(26-11);
      cluster=cf_read()|((long)cf_read()<<8);
      if (match) return true;
      cf_read_skip(32-28);
    }
    inc32(sector); 	
  }
  return false; 
}

// Scan FAT to determine the length of first consecutive cluster chain in the data file
// Returns file chain length (number of clusters) in data_file_size
// Note: Current implementationonly works with consecutive cluster chains; 
//       if file is fragmented only first piece is used 
#separate
void scan_data_file_clusters() { 
  char tmp[4];
  long ptr;
  long c;
  zero32(tmp);
  move32(sector, fat_start);
  tmp[0]=cluster>>8;
  add32(sector, tmp);
  cf_start_sector_read();
  ptr=cluster&0xFF00;
  while (ptr++<cluster) cf_read_skip(2);
  zero32(data_file_size);
  do {
    c=cf_read()|((long)cf_read()<<8);
    inc32(data_file_size);
    if (ptr!=c) return;
    if (!(ptr&0xFF)) {
      inc32(sector);
      cf_start_sector_read();
    }
    ptr++;
  } while (true); 	
}

// Finds data file and determines its length
#separate
boolean find_data_file() { // Find the data file
  if (!find_data_file_name()) return false;
  scan_data_file_clusters();
  return true;
}

#separate
boolean get_disk_configuration() {
// Loads and verifies file system parameters
// Returns 
// TRUE if CF card has correct file system and data file           
// FALSE if something is not quite right
//	
// File system requirements:
// - Valid Master Boot Record
// - First partition formatted with FAT16
// - Data file with predetermined name on consecutive clusters 
// get_disk_configuration() checks file system records and 
// attempts to find the data file.
//
// To create file on CF card use PC program CF.EXE
  int tmp; // Yeah! This is an integer variable called tmp 
// Start with sector 0 -- Master Boot Record	
  zero32(sector);
  cf_start_sector_read();
// Skip to partition table and get partition 1 info  
  cf_read_skip(0);
  cf_read_skip(0xC2);
  tmp=cf_read(); // disk_system_id -- type of partition
  if (!((tmp==1)||(tmp==4)||(tmp==6)||(tmp==14))) return FALSE; // 1-FAT12, 2-FAT16, 6-BIGFAT16, 14-BIGFATLB  
// Load start sector number of partition 1 
  cf_read_skip(3);  
  sector[0]=cf_read();
  sector[1]=cf_read();
  sector[2]=cf_read();
  sector[3]=cf_read();
// Read Boot Record (start sector) of Partition 1  
  cf_start_sector_read();
  cf_read_skip(0x0B);
// Bytes/sector must be 0x200 (512)  
  if (cf_read()!=0) return FALSE;
  if (cf_read()!=2) return FALSE;
// And now let's do sectors_per_cluster=cf_read(). Ok?  
  sectors_per_cluster=cf_read();
// FAT (file allocation table) start  
  zero32(fat_start);
  fat_start[0]=cf_read();	
  fat_start[1]=cf_read();	
  add32(fat_start, sector);
// I get depressed when number of FATs is not 2  
  if (cf_read()!=2) return FALSE;
// Get number of entries in the root directory  
  *(&root_entries)=cf_read();
  *(&root_entries+1)=cf_read();
// Well. Reading number of data sectors.
  zero32(data_sectors);
  data_sectors[0]=cf_read();
  data_sectors[1]=cf_read();
  cf_read_skip(1);
// Where is root directory?  
  zero32(dir_start);
  dir_start[0]=cf_read();	
  dir_start[1]=cf_read();	
  add32(dir_start, dir_start);
  add32(dir_start, fat_start);
// Where are data clusters?  
  zero32(data_start);
  *data_start=root_entries>>4;
  add32(data_start, dir_start);
  if (is_zero32(data_sectors)) { 
  // If data_sectors is 0 we got it in a wrong place
    cf_read_skip(0x20-0x18);
    data_sectors[0]=cf_read();
    data_sectors[1]=cf_read();
    data_sectors[2]=cf_read();
    data_sectors[3]=cf_read();
    cf_read_skip(0x3A-0x24);
  } else cf_read_skip(0x3A-0x18);
  if (cf_read()!=0x36) return FALSE; // file system id must be FAT16
  sub32(data_sectors, data_start);
  add32(data_sectors, sector);
// Enable Microdrive write cache... Send me e-mail for more information  
  enable_microdrive_write_cache();
// File is valid if we can find valid file.  
  file_valid=find_data_file();  
  cf_idle(100);
  if (file_valid) { 
    // convert data file size from clusters to sectors
    // Note: sectors per cluster must be power of 2	
    tmp=sectors_per_cluster;
    while (!(tmp&1)) {
      shift_left(data_file_size,4,0);
      tmp>>=1;
    }
    // calculate first sector of data file
    zero32(sector);
    sector[0]=(cluster-2);
    sector[1]=(cluster-2)>>8;
    tmp=sectors_per_cluster;
    while (!(tmp&1)) {
      shift_left(sector,4,0);
      tmp>>=1;
    }
    // and now data_start points to first sector of data file
    add32(data_start, sector);
    return true;
  } else {
    // File not found: let's get idle and depressed	
    return false;
  } 
}

// Tests IR tag reader from Borg lab 
#separate
void tag_test()
{
  char tag[4];
  long tagtime;
  putI2C(0xA0, 2);
  I2C_start();
  I2C_write(0xA0 | I2CREAD);
  tag[0]=i2c_read();
  tag[1]=i2c_read();
  tag[2]=i2c_read();
  tag[3]=i2c_read();
  tagtime=i2c_read();
  tagtime=tagtime<<8|i2c_read();
  i2c_read(0);
  I2C_stop();
  printf("%2X%2X%2X%2X ", tag[0], tag[1], tag[2], tag[3]); 
  putI2C(0xA0, 3);
  I2C_start();
  I2C_write(0xA0 | I2CREAD);
  tag[0]=i2c_read();
  tag[1]=i2c_read();
  tag[2]=i2c_read();
  tag[3]=i2c_read();
  tagtime=i2c_read();
  tagtime=tagtime<<8|i2c_read();
  i2c_read(0);
  I2C_stop();
  printf("%2X%2X%2X%2X\n", tag[0], tag[1], tag[2], tag[3]); 
}

// reads ADC channel and sends result
#separate
void send_adc_sample(int channel)
{
  long sample;
  set_adc_channel(channel);
  sample=read_adc();
  putc(sample);
  putc(sample>>8);
}

// I2C command processor
// ib - I2C start
// ie - I2C stop
// ir - I2C read with ACK
// i0 - I2C read without ACK
// iw - I2C write
// ip - I2C poll
#separate
void access_i2c()
{
  switch (loadc()) {
    case 'b': i2c_start(); break;
    case 'e': i2c_stop(); break;
    case 'r': putc(i2c_read()); break;
    case '0': putc(i2c_read(0)); break;
    case 'w': i2c_write(loadc()); break;
    case 'p': putc(i2c_poll()); break;
  }
}

#separate
void read_mithril_sensor()
{
  byte addr;
  addr=loadc();
  putI2C(addr, loadc());
  I2C_start();
  I2C_write(addr | I2CREAD);
  putc(i2c_read());
  putc(i2c_read());
  putc(i2c_read());
  putc(i2c_read(0));
  I2C_stop();
}

// Command processor
#separate
boolean process_command()
{
  if (!input(RCIF)) return FALSE;
  cmd = loadc();

  /* Echo the character */
  if ((cmd>='0')&&(cmd<='7')) {
    send_adc_sample(cmd-'0');
  } else
  if (cmd=='i') access_i2c(); else
  if (cmd=='m') read_mithril_sensor();
  else {
    putc(cmd);
    puts("");
    switch (cmd) {
      case 0xA5: reprogram(); break;
      case '+': print_time(); break;
      case '-': reset_time(); break;
      case '=': check_cf(); break;
      case '*': identify_drive(); break;
      case '$': read_sector(); break;
      case '@': cf_idle(100); break;
      case '.': cf_sleep(); break;
      case ',': cf_standby(); break;
      case 't': set_time(); break;
      case '(': putc(rtc_read(loadc())); break;
      case '!': cf_reset(); break;
      case 'd': set_data(); break;
      case 'a': set_address(); break;
      case 'r': read_register(); break;
      case 'w': write_register(); break;
      #ifdef Rochester
      case '?': tag_test(); break;
      #endif
      case '#':
        #ifdef GAME
        send_player_info();
        #endif
        #ifdef Rochester
        save_audio();
        #endif
        #ifdef ESL
        send_data_bim();
        #endif
        #ifdef Tim
        send_data_Tim();
        #endif
        break;
    }
    print_prompt();
  }  
  return TRUE;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产三级精品在线| 欧美日韩在线三区| 亚洲在线视频一区| 日韩欧美一区二区免费| 国产成人在线视频免费播放| 亚洲视频香蕉人妖| 欧美一区二区三区成人| 成人黄色777网| 秋霞影院一区二区| 中文字幕一区二区三中文字幕| 久久色视频免费观看| 99vv1com这只有精品| 同产精品九九九| 国产精品萝li| 日韩精品影音先锋| 欧美在线观看视频在线| 国产精品1区2区3区在线观看| 亚洲精品成人在线| 久久奇米777| 欧美日韩一区小说| 成人av资源在线| 免费在线成人网| 亚洲人成网站精品片在线观看| 欧美一区二区在线观看| 一本一道综合狠狠老| 国产精品综合二区| 日韩在线一区二区三区| 中文字幕亚洲精品在线观看| 欧美精品一区二区三区很污很色的 | 欧美日本在线播放| 日韩免费一区二区三区在线播放| av一区二区久久| 国产精品影视网| 男人操女人的视频在线观看欧美 | 国产性做久久久久久| 欧美日韩一区二区三区在线| 99久久精品国产网站| 视频一区二区中文字幕| 亚洲视频每日更新| 国产精品少妇自拍| 欧美精品一区二区三区蜜臀 | 91福利国产成人精品照片| 国产激情视频一区二区三区欧美 | 色综合网色综合| 国产成人精品免费看| 激情综合网天天干| 美女脱光内衣内裤视频久久影院| 亚洲国产欧美日韩另类综合 | 久久色在线观看| 精品欧美一区二区在线观看| 欧美一级片在线看| 在线电影国产精品| 91精品国产手机| 91精品国产综合久久久蜜臀粉嫩 | 欧美日本一区二区三区| 91成人在线观看喷潮| 91在线播放网址| 91在线观看免费视频| jlzzjlzz欧美大全| 97精品国产露脸对白| 99麻豆久久久国产精品免费优播| 国产白丝网站精品污在线入口| 国内成+人亚洲+欧美+综合在线| 蜜桃视频免费观看一区| 久久国产精品99久久人人澡| 美女诱惑一区二区| 国产综合色视频| 国产不卡视频在线播放| 99热国产精品| 欧美伊人久久久久久午夜久久久久| 91福利在线观看| 欧美天堂亚洲电影院在线播放| 在线欧美日韩国产| 欧美日韩五月天| 在线观看欧美精品| 欧美午夜精品一区| 欧美精品第1页| 日韩精品一区二区三区中文不卡 | 一区二区三区成人在线视频| 伊人开心综合网| 日韩1区2区3区| 国产综合色视频| 成人午夜在线免费| 在线影院国内精品| 9191国产精品| 国产亚洲欧美一级| 亚洲三级电影网站| 日韩精品一级中文字幕精品视频免费观看| 日本女人一区二区三区| 国产精品一区二区在线播放 | 成人激情视频网站| 91成人在线观看喷潮| 日韩一区二区不卡| 久久免费偷拍视频| 一区二区三区欧美视频| 日本aⅴ免费视频一区二区三区| 国产黑丝在线一区二区三区| 波多野结衣一区二区三区| 欧美日韩一区二区三区在线看| 日韩欧美高清dvd碟片| 中文字幕免费不卡在线| 亚洲愉拍自拍另类高清精品| 毛片不卡一区二区| av电影在线观看一区| 91精品啪在线观看国产60岁| 国产精品久久久久久久久快鸭 | 亚洲制服丝袜av| 国产电影精品久久禁18| 在线观看一区不卡| 中文字幕一区二区三区蜜月| 青青青伊人色综合久久| 成人国产精品免费网站| 337p亚洲精品色噜噜噜| 国产精品看片你懂得| 免费欧美在线视频| 色欧美片视频在线观看在线视频| 欧美中文字幕一区二区三区| 久久婷婷色综合| 丝袜美腿亚洲综合| 91毛片在线观看| 久久久久国产精品厨房| 日本vs亚洲vs韩国一区三区二区| av亚洲精华国产精华| 26uuu另类欧美| 亚洲影院在线观看| 成人精品鲁一区一区二区| 日韩三级在线观看| 亚洲国产欧美日韩另类综合| 成人国产免费视频| 久久美女艺术照精彩视频福利播放 | 精品一区二区精品| 欧美日韩精品三区| 亚洲精品国产成人久久av盗摄| 国产精品一二三四区| 欧美一区二区三区四区在线观看| 中文字幕一区二| 国产ts人妖一区二区| 亚洲精品一区在线观看| 日韩成人dvd| 欧美卡1卡2卡| 午夜久久久久久久久久一区二区| 99久久精品免费精品国产| 久久久久久久久久久久久久久99| 国产乱人伦偷精品视频不卡| 久久精品一区二区三区不卡牛牛 | 制服丝袜亚洲色图| 日本美女视频一区二区| 日韩区在线观看| 国产精品一卡二卡在线观看| 国产欧美一区二区精品久导航| 福利一区在线观看| 亚洲人成人一区二区在线观看| 在线看不卡av| 五月婷婷激情综合| 亚洲精品一区二区三区99| 国产美女在线观看一区| 中文字幕一区二区三区四区| 欧美综合亚洲图片综合区| 午夜精品一区在线观看| 欧美成人在线直播| 国产suv一区二区三区88区| 亚洲欧洲制服丝袜| 91.成人天堂一区| 国产一区不卡在线| 亚洲女人的天堂| 日韩欧美成人一区| 成人高清免费观看| 亚洲一级电影视频| 精品久久人人做人人爽| 成人国产一区二区三区精品| 亚洲国产精品天堂| 久久精品夜色噜噜亚洲a∨| 99国产精品一区| 久久精品国产精品亚洲精品| 国产精品久久三| 制服丝袜激情欧洲亚洲| 成人黄色电影在线 | 成人高清免费观看| 午夜成人免费视频| 国产精品少妇自拍| 7777精品伊人久久久大香线蕉 | 亚洲欧美日韩成人高清在线一区| 欧美日韩电影在线| 成人精品视频一区| 日本aⅴ亚洲精品中文乱码| 国产精品成人一区二区三区夜夜夜| 欧美日韩在线亚洲一区蜜芽| 国产精品白丝jk黑袜喷水| 亚洲妇女屁股眼交7| 亚洲国产精品二十页| 欧美一区二区在线不卡| 99精品欧美一区| 国产一级精品在线| 日韩av一区二区在线影视| 中文字幕在线不卡| 久久蜜桃av一区精品变态类天堂 | 乱一区二区av| 亚洲在线观看免费| 国产精品视频第一区| 精品日韩99亚洲|