OSDev http://osdev.su/ |
|
работа с дисками FDC CD-ROM http://osdev.su/viewtopic.php?f=7&t=948 |
Страница 1 из 1 |
Автор: | scuter [ 01 июн 2014, 08:17 ] |
Заголовок сообщения: | работа с дисками FDC CD-ROM |
подскажите как определить то что диск вставлен и определить его параметры, с флопикам вродибы разобрался команда (05/06)==(w/r), только для этого надо указать параметры. с сидюком немного не понятно, там надо включать мотор и чтение запись делать, а вот как это делать не понял (с пакетами проблема), подскажите какие команды. |
Автор: | pavia [ 01 июн 2014, 09:09 ] |
Заголовок сообщения: | Re: работа с дисками FDC CD-ROM |
Лучше было бы один вопрос одна тема. FDC это не диск это контролёр. А диск называется Floppy Dick или просто floppy. Что по русски переводиться как мягкий. CD-ROM лучше просто пиши оптический диск. Так вот параметры мягкого диска лежат в самом первом секторе(считая от единицы) нулевой дорожки. Поэтому нет ничего другого как попробовать разные комбинации для чтения первого сектора. И более того надо предусмотреть обработку сбоев. За основу можно взять, код отсюда. http://www.frolov-lib.ru/books/bsp/v01b/ch1_4.htm А да что-бы работа с подбором параметров не затягивалась надо проверять наиболее вероятные в первую очередь. С мягкими дисками я не работал так как это раритет нигде не найти. Поэтому лучше послушать других специалистов. |
Автор: | pavia [ 01 июн 2014, 09:30 ] |
Заголовок сообщения: | Re: работа с дисками FDC CD-ROM |
С оптическими дисководами давно не занимался уже подзабыл. Конкретно в чём проблема? Есть интерфейс ATA к нему добавлено расширение для передачи пакетных команд. С тех пор интерфейс называется ATA/ATAPI. Где описываются протоколы как отправлять команду в пакетном формате и получать результат. Сами форматы пакетных команд существует несколько модификаций. SFP, MMC, SCSI. И описываются в своих документах. Для ознакомления советую прочитать: Кулаков В. Программирование на аппаратном уровне Кулаков В. - Программирование дисковых подсистем В последней книжке диске рассмотрены более детально.Хотя лучше покопаться в исходниках линукса. |
Автор: | scuter [ 01 июн 2014, 12:59 ] |
Заголовок сообщения: | Re: работа с дисками FDC CD-ROM |
pavia писал(а): Где описываются протоколы как отправлять команду в пакетном формате и получать результат. Вот мне это и надо, стандарт есть а где там команды для сидюка не знаю где искать? самое главное определить что диск вставлен, иначе смысла нет писать драйвер. кстати на счёт параметров диска, там в коде указаны параметры, вот они мне и нужны. Код: fdc_out(fdpt->sec_size);
fdc_out(fdpt->eot); fdc_out(fdpt->gap_rw); fdc_out(fdpt->dtl); |
Автор: | pavia [ 01 июн 2014, 14:03 ] |
Заголовок сообщения: | Re: работа с дисками FDC CD-ROM |
Цитата: кстати на счёт параметров диска, там в коде указаны параметры, вот они мне и нужны. Что в фразе "пробовать разные комбинации " вам не понятно? Вот из исходников линукса(возможно версии 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; } |
Автор: | scuter [ 01 июн 2014, 14:42 ] |
Заголовок сообщения: | Re: работа с дисками FDC CD-ROM |
pavia писал(а): Что в фразе "пробовать разные комбинации " вам не понятно? пробовал не понятно. |
Автор: | pavia [ 01 июн 2014, 15:39 ] |
Заголовок сообщения: | Re: работа с дисками FDC CD-ROM |
Для 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; } |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |