OSDev

для всех
Текущее время: 22 ноя 2017, 17:41

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: работа с дисками FDC CD-ROM
СообщениеДобавлено: 01 июн 2014, 08:17 

Зарегистрирован: 10 апр 2012, 23:19
Сообщения: 274
подскажите как определить то что диск вставлен и определить его параметры,

с флопикам вродибы разобрался команда (05/06)==(w/r), только для этого надо указать параметры.

с сидюком немного не понятно, там надо включать мотор и чтение запись делать,
а вот как это делать не понял (с пакетами проблема), подскажите какие команды.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: работа с дисками FDC CD-ROM
СообщениеДобавлено: 01 июн 2014, 09:09 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1056
Лучше было бы один вопрос одна тема.
FDC это не диск это контролёр. А диск называется Floppy Dick или просто floppy. Что по русски переводиться как мягкий.
CD-ROM лучше просто пиши оптический диск.

Так вот параметры мягкого диска лежат в самом первом секторе(считая от единицы) нулевой дорожки. Поэтому нет ничего другого как попробовать разные комбинации для чтения первого сектора. И более того надо предусмотреть обработку сбоев.
За основу можно взять, код отсюда.
http://www.frolov-lib.ru/books/bsp/v01b/ch1_4.htm

А да что-бы работа с подбором параметров не затягивалась надо проверять наиболее вероятные в первую очередь.

С мягкими дисками я не работал так как это раритет нигде не найти. Поэтому лучше послушать других специалистов.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: работа с дисками FDC CD-ROM
СообщениеДобавлено: 01 июн 2014, 09:30 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1056
С оптическими дисководами давно не занимался уже подзабыл.
Конкретно в чём проблема?
Есть интерфейс ATA к нему добавлено расширение для передачи пакетных команд. С тех пор интерфейс называется ATA/ATAPI.
Где описываются протоколы как отправлять команду в пакетном формате и получать результат.
Сами форматы пакетных команд существует несколько модификаций. SFP, MMC, SCSI.
И описываются в своих документах.

Для ознакомления советую прочитать:
Кулаков В. Программирование на аппаратном уровне
Кулаков В. - Программирование дисковых подсистем
В последней книжке диске рассмотрены более детально.Хотя лучше покопаться в исходниках линукса.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: работа с дисками FDC CD-ROM
СообщениеДобавлено: 01 июн 2014, 12:59 

Зарегистрирован: 10 апр 2012, 23:19
Сообщения: 274
pavia писал(а):
Где описываются протоколы как отправлять команду в пакетном формате и получать результат.

Вот мне это и надо, стандарт есть а где там команды для сидюка не знаю где искать?

самое главное определить что диск вставлен, иначе смысла нет писать драйвер.

кстати на счёт параметров диска, там в коде указаны параметры, вот они мне и нужны.
Код:
fdc_out(fdpt->sec_size);
        fdc_out(fdpt->eot);
        fdc_out(fdpt->gap_rw);
        fdc_out(fdpt->dtl);


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: работа с дисками FDC CD-ROM
СообщениеДобавлено: 01 июн 2014, 14:03 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1056
Цитата:
кстати на счёт параметров диска, там в коде указаны параметры, вот они мне и нужны.

Что в фразе "пробовать разные комбинации " вам не понятно?

Вот из исходников линукса(возможно версии 1.0)
Код:
struct compat_floppy_struct {
      compat_uint_t   size;
      compat_uint_t   sect;
      compat_uint_t   head;
      compat_uint_t   track;
      compat_uint_t   stretch;
      unsigned char   gap;
      unsigned char   rate;
      unsigned char   spec1;
      unsigned char   fmt_gap;
      const compat_caddr_t name;
   };
Код:

 * This struct defines the different floppy types.
 *
 * Bit 0 of 'stretch' tells if the tracks need to be doubled for some
 * types (e.g. 360kB diskette in 1.2MB drive, etc.).  Bit 1 of 'stretch'
 * tells if the disk is in Commodore 1581 format, which means side 0 sectors
 * are located on side 1 of the disk but with a side 0 ID, and vice-versa.
 * This is the same as the Sharp MZ-80 5.25" CP/M disk format, except that the
 * 1581's logical side 0 is on physical side 1, whereas the Sharp's logical
 * side 0 is on physical side 0 (but with the misnamed sector IDs).
 * 'stretch' should probably be renamed to something more general, like
 * 'options'.  Other parameters should be self-explanatory (see also
 * setfdprm(8)).
 */
static struct floppy_struct floppy_type[32] = {
   {    0, 0,0, 0,0,0x00,0x00,0x00,0x00,NULL    },   /*  0 no testing    */
   {  720, 9,2,40,0,0x2A,0x02,0xDF,0x50,"d360"  }, /*  1 360KB PC      */
   { 2400,15,2,80,0,0x1B,0x00,0xDF,0x54,"h1200" },   /*  2 1.2MB AT      */
   {  720, 9,1,80,0,0x2A,0x02,0xDF,0x50,"D360"  },   /*  3 360KB SS 3.5" */
   { 1440, 9,2,80,0,0x2A,0x02,0xDF,0x50,"D720"  },   /*  4 720KB 3.5"    */
   {  720, 9,2,40,1,0x23,0x01,0xDF,0x50,"h360"  },   /*  5 360KB AT      */
   { 1440, 9,2,80,0,0x23,0x01,0xDF,0x50,"h720"  },   /*  6 720KB AT      */
   { 2880,18,2,80,0,0x1B,0x00,0xCF,0x6C,"H1440" },   /*  7 1.44MB 3.5"   */
   { 5760,36,2,80,0,0x1B,0x43,0xAF,0x54,"E2880" },   /*  8 2.88MB 3.5"   */
   { 6240,39,2,80,0,0x1B,0x43,0xAF,0x28,"E3120"},   /*  9 3.12MB 3.5"   */

   { 2880,18,2,80,0,0x25,0x00,0xDF,0x02,"h1440" }, /* 10 1.44MB 5.25"  */
   { 3360,21,2,80,0,0x1C,0x00,0xCF,0x0C,"H1680" }, /* 11 1.68MB 3.5"   */
   {  820,10,2,41,1,0x25,0x01,0xDF,0x2E,"h410"  },   /* 12 410KB 5.25"   */
   { 1640,10,2,82,0,0x25,0x02,0xDF,0x2E,"H820"  },   /* 13 820KB 3.5"    */
   { 2952,18,2,82,0,0x25,0x00,0xDF,0x02,"h1476" },   /* 14 1.48MB 5.25"  */
   { 3444,21,2,82,0,0x25,0x00,0xDF,0x0C,"H1722" },   /* 15 1.72MB 3.5"   */
   {  840,10,2,42,1,0x25,0x01,0xDF,0x2E,"h420"  },   /* 16 420KB 5.25"   */
   { 1660,10,2,83,0,0x25,0x02,0xDF,0x2E,"H830"  },   /* 17 830KB 3.5"    */
   { 2988,18,2,83,0,0x25,0x00,0xDF,0x02,"h1494" },   /* 18 1.49MB 5.25"  */
   { 3486,21,2,83,0,0x25,0x00,0xDF,0x0C,"H1743" }, /* 19 1.74 MB 3.5"  */

   { 1760,11,2,80,0,0x1C,0x09,0xCF,0x00,"h880"  }, /* 20 880KB 5.25"   */
   { 2080,13,2,80,0,0x1C,0x01,0xCF,0x00,"D1040" }, /* 21 1.04MB 3.5"   */
   { 2240,14,2,80,0,0x1C,0x19,0xCF,0x00,"D1120" }, /* 22 1.12MB 3.5"   */
   { 3200,20,2,80,0,0x1C,0x20,0xCF,0x2C,"h1600" }, /* 23 1.6MB 5.25"   */
   { 3520,22,2,80,0,0x1C,0x08,0xCF,0x2e,"H1760" }, /* 24 1.76MB 3.5"   */
   { 3840,24,2,80,0,0x1C,0x20,0xCF,0x00,"H1920" }, /* 25 1.92MB 3.5"   */
   { 6400,40,2,80,0,0x25,0x5B,0xCF,0x00,"E3200" }, /* 26 3.20MB 3.5"   */
   { 7040,44,2,80,0,0x25,0x5B,0xCF,0x00,"E3520" }, /* 27 3.52MB 3.5"   */
   { 7680,48,2,80,0,0x25,0x63,0xCF,0x00,"E3840" }, /* 28 3.84MB 3.5"   */

   { 3680,23,2,80,0,0x1C,0x10,0xCF,0x00,"H1840" }, /* 29 1.84MB 3.5"   */
   { 1600,10,2,80,0,0x25,0x02,0xDF,0x2E,"D800"  },   /* 30 800KB 3.5"    */
   { 3200,20,2,80,0,0x1C,0x00,0xCF,0x2C,"H1600" }, /* 31 1.6MB 3.5"    */
};

...

      if (!_floppy) { /* Autodetection */
         if (!probing){
            DRS->probed_format = 0;
            if (next_valid_format()){
               DPRINT("no autodetectable formats\n");
               _floppy = NULL;
               REPEAT;
            }
*/


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: работа с дисками FDC CD-ROM
СообщениеДобавлено: 01 июн 2014, 14:42 

Зарегистрирован: 10 апр 2012, 23:19
Сообщения: 274
pavia писал(а):
Что в фразе "пробовать разные комбинации " вам не понятно?

пробовал не понятно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: работа с дисками FDC CD-ROM
СообщениеДобавлено: 01 июн 2014, 15:39 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1056
Для scuter, Я так понимаю Русский язык для вас не родной. Из какой страны вы будете?

Цитата:
pavia писал(а):
Что в фразе "пробовать разные комбинации " вам не понятно?

пробовал не понятно.
Это ошибка переводчика. Он не правильно перевел времена.

Для того что-бы определить есть диск или его нет. Надо выполнить чтение с диска. Если будет ошибка Not Randy=1 (регистр SR0, 3 бит), то диск отсутствует.
Что касается определения формата. То надо в цикле перебирать разные форматы и пробовать читать. Если ошибки нет, то формат правильный. Если есть ошибка то продолжаем пробовать.


Вот упрощённый пример для 2-х форматов.
Код:
/* checks drive geometry - call this after any disk change */
BOOL log_disk(DrvGeom *g)
{
   /* get drive in a known status before we do anything */
   reset();

   /* assume disk is 1.68M and try and read block #21 on first track */
   geometry.heads = DG168_HEADS;
   geometry.tracks = DG168_TRACKS;
   geometry.spt = DG168_SPT;

   if (read_block(20,NULL)) {
      /* disk is a 1.68M disk */
      if (g) {
    g->heads = geometry.heads;
    g->tracks = geometry.tracks;
    g->spt = geometry.spt;
      }
      return TRUE;             
   }
   
   /* OK, not 1.68M - try again for 1.44M reading block #18 on first track */
   geometry.heads = DG144_HEADS;
   geometry.tracks = DG144_TRACKS;
   geometry.spt = DG144_SPT;

   if (read_block(17,NULL)) {
      /* disk is a 1.44M disk */
      if (g) {
    g->heads = geometry.heads;
    g->tracks = geometry.tracks;
    g->spt = geometry.spt;
      }
      return TRUE;
   }
   
   /* it's not 1.44M or 1.68M - we don't support it */
   return FALSE;
}


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB