программирование fdd

Тема в разделе "WASM.OS.DEVEL", создана пользователем abcd008, 13 ноя 2010.

  1. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    народ, нужна помощь.
    с самим программированием fdc я разобрался.
    меня интересует:
    1. самый главный вопрос. это как посчитать GAP для дискет.
    можно конечно воспользоваться таблицей из linux или драйвера 800. но там gap только для разного количества секторов на дорожке, а про изменения gap при разном размере сектора нечего негде нет.
    вот мне и интересно есть ли какая-нибудь формула или еще что.
    2. как автамотически определить gap при первом обращении к диску.
    то есть как понять что он правильный. например если у меня есть таблица gap, то как понять какой тип диска передомной. ведь для определения мне надо прочитать первый сектор, но как узнать что я его правильно прочел.
    3. влияет ли скорость врашения в современных дисководах на результат.
    4. как работать с 288 дискетами. я не понимаю команду perpendicular mode надо слать перед каждой командой или только один раз. и существуюл ли вообще такие дисководы. насчет дискет я читал что из обычнои 144 можно сделать 288. но вот про дисководы я не слышал ничего.

    просьба не писать зачем тебе это надо и тп.
    мне это очень интересно и нужно. в нете нечего не нашол. а в исходниках линукса сложно разобраться полностью, они слишком большие.
     
  2. shm

    shm New Member

    Публикаций:
    0
    Регистрация:
    18 сен 2010
    Сообщения:
    93
    abcd008
    gap нужно брать из таблицы, каких-то формул для его расчета нет, есть стандартные параметры для разных типов дискет. В принципе эта табличка параметров дискеты есть в области данных БИОС вот здесь написано подробно http://www.lib.csu.ru/DL/bases/prg/frolov/books/bsp/v01b/ch1.htm, правдо сразу предупрежу она не всегда храниться по фиксированному адресу как в этой статье, чисто когда драйвер тестил, обнаружил, что на award'е находится по этому адресу, а на ami нет, по-нормальному определить этот адрес можно из какого-то вектора прерывания (не помню точно, почитай). А так стандартный способ определить тип дисковода через CMOS.

    Нету современных дисководов их уже давно не выпускают, ну на моем все работало как-правило и без задержки после запуска мотора, но лучше всетаки ее сделать, ну для чтения можно "долбить" дисковод пока он не наберет нужные обороты и CRC код совпадется, а вот для записи нужно обязательно делать задержку при после включения мотора.

    Не знаю, а таких приводов и дискет не видел никогда, не знаю выпускались ли они вообще, а то может были только экспериментальные образцы. Я в своем драйвере поддержку дискет такого формата не делал, да вообще достаточно только 1.44 сделать, других просто не найдешь (ну только на рынке раритетов может быть:) ), да и вообще филиппиками системные блоки давно не комплектуют.

    Да ну знающие люди поймут, первый драйвер дискового устройства для моей ОС был конечно флопик, т.к. на первый взгляд с ним работать проще. Но я сразу скажу что написать драйвер FDD далеко не самая простая задача т. к. все приходится делать вручную вплоть до запуска мотора, в отличии например от ATA c более высокоуровневым интерфейсом, ну там правда свои проблемы, которые решить сложней...
     
  3. r90

    r90 New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2005
    Сообщения:
    898
    1. а gap, по-моему, ни на что не влияет. Он там для красоты. Ну, при форматировании можно заморочиться, ради скорости последовательного чтения/записи но как, я честно говоря не знаю, думаю надо экспериментировать. Я, когда развлекался, эти значения где-то нашёл. Сейчас я бы их искал в fdutils. В ядре linux тоже можно, но ядро меньшее количество форматов поддерживает.
    2. см. 1. Контроллер флоповода сам ищет сектор в пределах дорожки, надо лишь указать номер этого сектора. Если же сектор не прочитается, то контроллер вернёт ошибку.
    3. Наверное нет. А может и влияет: скорость чтения/записи меняется.
    4. Для начала надо купить привод, который умеет работать в перпендикулярном режиме. Сам я таких в глаза не видел, но говорят бывают. Или бывали когда-то. Насчёт того, имеет ли смысл втыкать в него 1440Kb дискеты -- я честно говоря не знаю.
     
  4. r90

    r90 New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2005
    Сообщения:
    898
    Рынок раритетов... Спросил у гугла, такой раритет как 2.88Mb привод стоит 130EUR: http://abcresellers.com/store/product64.html
    Но я не согласен что имеет смысл ограничиваться форматом 1.44Mb. Более того, поскольку флопов больше нигде нету, то имеет смысл забыть про совместимость, и ограничиться каким-нибудь другим форматом, скажем в 1640Kb или 1860Kb.
     
  5. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    gap таблица у меня есть, но там нет значений gap для секторов больше 512.
    как его посчитать самому?

    я тоже не встречал 288 дисководов, но если бы их не было то линух бы их не поддерживал.

    еще есть вопрос: как отределить тип работы XT AT PS2. или они все AT.
    но PS2 вроде тоже совместимы
     
  6. r90

    r90 New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2005
    Сообщения:
    898
    abcd008
    Экспериментально. В идеале на многих-многих приводах, на дискетах разных производителей. В реальности, скорее всего придётся обойтись одним-двумя приводами, и парой типов дискет. Пробуешь разные значения, если форматируется/читается/пишется то уменьшаешь значение, иначе увеличиваешь. Задача найти минимальные значения, которые достаточно надёжны.
     
  7. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    abcd008
    Сейчас все поголовно АТ-совместимые, других не найдёшь. Была ли какая-то возможность определить -- не помню (хотя, если процессор 8088, то это точно не АТ -- в них процы, начиная с 80286, стояли). Были ещё PCjr, кстати...

    А вообще, о совместимости надо заботиться только с современным железом, а со старьём лучше даже не заморачиваться -- пустая потеря сил и времени.
     
  8. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    просто если я их сам отбалды придумаю, то не факт что они на другом компе прочитаются.
     
  9. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Где-то под первым мегом есть байтовая ячейка, значение которой указывает на тип машины. У меня до сих пор вроде бы выполняется проверка на наличие АТ-сигнатуры. Если не ошибаюсь, это 0xFC.
     
  10. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    интересен тот факт что линукс определяет тип дисковода в cmos(10h).
    но ведь в биос можно установить разный тип и даже выключить. а fdc всеревно останетца преждним.
    его можно буждет найти через порты.


    еще один вопрос в книгах которые я читал ни слова про порт 3f3h. а в документации от интел
    написано что через него можно определить тип дискеты и дисковода.

    вот отрывок из статьи которую вы мне скинули:
    The TDR register is the Tape Drive Register and the floppy disk controller media and drive type register. Only what has been called the "enhanced" mode of operation is supported and documented here.


    Table 61. Media ID Bit Functions
    ======================================
    Bit 7, 6,5 |Media Type
    ===========|==========================
    X X 1 |Invalid Data
    -----------|--------------------------
    0 0 0 |5.25 in
    -----------|--------------------------
    0 1 0 |2.88 Megabyte (formatted)
    -----------|--------------------------
    1 0 0 |1.44 Megabyte (formatted)
    -----------|--------------------------
    1 1 0 |720 Kilobyte (formatted)
    |
    ======================================
     
  11. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    есть в самом конце bios, там и название и дата и тд. но не факт что в том же uefi этот байт будет.
     
  12. shm

    shm New Member

    Публикаций:
    0
    Регистрация:
    18 сен 2010
    Сообщения:
    93
    Зачем? наверняка abcd008 нужно сделать только поддержку, ну может грузить свою ось, все рано для бльшего проще потом написать драйвер юсб флешки например. И приятно когда твой драйвер читает любые дискеты.
    Сделай пока драйвер драйвер для нормального размера сектора, а потом можешь и 1024 (если привод такой найдешь :) ).
    Ой какое ошибочное мнение, просто некоторые последние модели дисководов могут сами вычислить это значения в случае невозможности использовать запрошенного, но рассчитывать на это я бы не стал.
    Опять же только некоторые последние модели и то может потребоваться подать специальные команды перевода в этот режим.
    CMOS
    Экспериментально можно конечно все определить.... но вот надежность такой записи меня почему-то смущает, есть готовые табличные значения для <= 1.44 они стандартизированы, для 2.88 для каждого дисковода могут быть свои, однако есть стандартные значения, найди книгу Михаила Гука "Дисковая подсистема ПК" там есть примечания к полям gap в которых указаны стандартные значения.

    Абсолютно согласен с этими высказываниями.
     
  13. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    >Сделай пока драйвер драйвер для нормального размера сектора, а потом можешь и 1024 (если привод такой найдешь :) ).

    любой дисковод может поддерживать 512, 1024 и тд. сектор. это стандарт и от диска не зависит.
    диск это просто магнитная "лента". а разметку делаешь сам, как хочешь.

    если использовать команды сдвига головки, вместо seek. то можно даже номера дорожек в любом порядке записывать
    (13748). для шифрования хорошо подходит.

    а gap нужен просто для того чтоб привод мог определить где кончается сектор.
    и на современных приводах он может быть меньше чем на старых моделях. но тогда не смогут прочитаться на старых приводах.
     
  14. r90

    r90 New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2005
    Сообщения:
    898
    shm
    =)
    Последние -- это выпущенные после 1990 года?
    abcd008
    Угу. Но если ты планируешь изобретать свои собственные форматы, то насколько я понимаю других путей у тебя не будет, кроме экспериментальной проверки. Если же ты готов ограничится уже проверенными на практике форматами, то возьми fdutils и посмотри там. Кстати там же есть программка superformat, которая измеряет параметры дисковода/дискеты, в частности raw-ёмкость дорожки. Уж не знаю, уточняет ли она секторный gap (никогда в сорцы не заглядывал), но чего-то она там измеряет.
     
  15. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    а вообще формула для gap должна быть. ведь не зря же в книгах и в доках пишут фотмат дорожки.
    где сколько байт и тд. а еще я где-то читал что при скорости вращения 300 на дорожку помещается 36,62Кб(вместе со служебной информацией). исходя из этого как-то должно считаться.
     
  16. shm

    shm New Member

    Публикаций:
    0
    Регистрация:
    18 сен 2010
    Сообщения:
    93
    Точную дату не назову, но вот ты не внимательно меня читал. Я написал, что некоторые последние модели дисководов могут сами вычислить эти значения, т. е. и сейчас могут в системных блоках выпуска где-то в районе 2000х годов, могут быть приводы не "переваривающие" некорректный gap.
     
  17. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    r90
    я почитал доки к fdutils и не понимаю откуда они взяли 12450 байт на дорожку. для какой скорости это посчитано?
     
  18. r90

    r90 New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2005
    Сообщения:
    898
    abcd008
    Это, если я правильно тебя понял, raw-плотность. Сектор ведь пишется в на дорожку в виде эдакой структуры данных, которая помимо прочего содержит и данные которые записываем мы. Вот если обойтись без всех этих структур (что вряд ли возможно на практике), просто писать на дорожку наши данные без разметки, то поместится 12450 байт. Но это не точная цифра. Она меняется в зависимости от привода и дискеты. Она, я думаю, меняется в зависимости от того, на какую дорожку мы пишем.
    Не знаю. Открой сорцы superformat, она выполняет эти расчёты.
     
  19. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    вопрос не по теме:
    почему все пишут что сейчас архитектура AT а не PS/2.
    ведь байт в области биос 40Eh помечен как LPT4, а в PS/2 как начало области EBDA. коем он и является уже давно.
    и в спецификации acpi про него неписано что это адрес сегмента ebda.

    отсюда и вопрос?
     
  20. baldr

    baldr New Member

    Публикаций:
    0
    Регистрация:
    29 апр 2010
    Сообщения:
    327
    abcd008,

    Насчёт дискет: есть же стандарты, про 3.5" HD (ECMA-125, ISO/IEC 9529:1989) чётко написано — плотность записи 15916 ftprad (изменений полярности на радиан; т.е. на круг выходит чуть больше 100000 ячеек, или 12500 байт; это неплохо согласуется с частотой вращения носителя 300 об./мин и скоростью обмена данными 500 кбит/с). Там же подробно расписана структура дорожки и прочие ограничения.

    Архитектура уже давно не AT (если под этим иметь в виду 8/16-бит ISA), да и в старших моделях PS/2 использовалась шина MCA. Связь этого со структурой BDA и наличием EBDA довольно туманна.