Важная информация

User Tag List

Страница 1 из 4 1234 ПоследняяПоследняя
Показано с 1 по 10 из 36

Тема: Подскажите алгоритм определения типа дискеты

  1. #1
    Member Аватар для EARL
    Регистрация
    17.01.2006
    Адрес
    Тамбов
    Сообщений
    97
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Question Подскажите алгоритм определения типа дискеты

    Интересует алгоритм определения типа дискеты, т.е. кол-во дорожек (40 или 80) и сторон дискеты (1 или 2). Перечитал кучу книжек по tr-dos и нигде не нашел описание как это делается. Нашел в исходниках TR-DOS 5.04T как определяется кол-во дорожек, но там тоже не все понятно, в частности как выбирать паузу между позиционированием головок. Кол-во сторон в этой версии тр-дос вообще судя по комментариям кода не определяется.
    На вопрос "для чего это нужно?" отвечу просто - в целях повышения собственных знаний. Так что если кто в курсе как определяется тип дискеты, то поделитесь опытом.

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2
    Member Аватар для Faster
    Регистрация
    22.06.2005
    Адрес
    Ульяновск
    Сообщений
    161
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от EARL Посмотреть сообщение
    Интересует алгоритм определения типа дискеты, т.е. кол-во дорожек (40 или 80) и сторон дискеты (1 или 2). Перечитал кучу книжек по tr-dos и нигде не нашел описание как это делается. Нашел в исходниках TR-DOS 5.04T как определяется кол-во дорожек, но там тоже не все понятно, в частности как выбирать паузу между позиционированием головок. Кол-во сторон в этой версии тр-дос вообще судя по комментариям кода не определяется.
    На вопрос "для чего это нужно?" отвечу просто - в целях повышения собственных знаний. Так что если кто в курсе как определяется тип дискеты, то поделитесь опытом.
    Я правильно понял, что взять эту информацию с 0 трека не вариант? Чтобы определить сколько дорожек на дискетке, то надо спозиционировать головку на 40 трек и пробовать потреково шагать дальше (например до 45 трека), если не получается, то делать соответствующие выводы. Чтобы определить количество сторон, то надо выбрать нижнюю сторону и попробовать что-то прочитать, если не читается, то значит односторонний диск.
    Когда на твой вопрос отвечает философ, перестаешь понимать вопрос

  4. #3
    Member Аватар для EARL
    Регистрация
    17.01.2006
    Адрес
    Тамбов
    Сообщений
    97
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Faster Посмотреть сообщение
    Я правильно понял, что взять эту информацию с 0 трека не вариант?
    Да. Допустим у нас в дисководе отформатированная дискета и все сектора содержат нули.

    Насколько я понял, то в TR-DOS количество дорожек определяется несколько иначе. Сперва выполняется команда поиска дорожки 50, после этого посылается команда поиска дорожки 2, делается пауза и читается регистр состояния. Если к этому времени команда выполнилась и головка уже на дорожке 2, то принимается решение, что дискета 40 дорожечная.
    Тут главный вопрос - какую именно паузу нужно выдержать.
    Последний раз редактировалось EARL; 28.03.2013 в 10:17.

  5. #4
    Guru Аватар для Vadim
    Регистрация
    24.07.2008
    Адрес
    г. Курган
    Сообщений
    2,062
    Спасибо Благодарностей отдано 
    10
    Спасибо Благодарностей получено 
    17
    Поблагодарили
    17 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от EARL Посмотреть сообщение
    Так что если кто в курсе как определяется тип дискеты, то поделитесь опытом.
    Щаз, отпишу свои варианты тестов. А теста получается 2, на скорость МГ и на ти дисковода.

    Скрытый текст

    Profi 5.06 1024K 12Mhz (кварц на 24), палитра, COM-порт, часы, hdd, covox, программатор
    ZX-Spectrum +3, ZX-Spectrum +2B, ZX-Spectrum +2, ZX Spectrum 48, ZX Spectrum 48+
    ZX Evolution Rev B.
    Color 48 + Beta Disk Interface +FDD+YM2149F
    Орель-08БК
    Pentagon-48 (недоссобранный кем-то)
    Pentagon-128 (полуубитый)
    Кворум-128 (в ремонте)
    Магик-05 (в ремонте)
    Robotron 1715
    Корвет ПК8020 и ПК8010
    Amstrad CPC 464
    Amstrad CPC 6128
    [свернуть]

  6. #5
    Member Аватар для Faster
    Регистрация
    22.06.2005
    Адрес
    Ульяновск
    Сообщений
    161
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от EARL Посмотреть сообщение
    Да. Допустим у нас в дисководе отформатированная дискета и все сектора содержат нули.

    Насколько я понял, то в TR-DOS количество дорожек определяется несколько иначе. Сперва выполняется команда поиска дорожки 50, после этого посылается команда поиска дорожки 2, делается пауза и читается регистр состояния. Если к этому времени команда выполнилась и головка уже на дорожке 2, то принимается решение, что дискета 40 дорожечная.
    Тоже вариант.
    Цитата Сообщение от EARL Посмотреть сообщение
    Тут главный вопрос - какую именно паузу нужно выдержать.
    я бы ограничился только вот этим:
    Код:
    x3FE5         IN      A,(#FF)     ;поступил какой-нибудь сигнал?
                  AND     #C0
                  JR      Z,x3FE5     ;если нет, то ждем его
                  RET     M           ;если это INTRQ, то возврат
    Для чего в ПЗУ делается задержка в 725779 тактов мне не понятно, по идее и без нее должно работать.
    Когда на твой вопрос отвечает философ, перестаешь понимать вопрос

  7. #6
    Guru Аватар для Vadim
    Регистрация
    24.07.2008
    Адрес
    г. Курган
    Сообщений
    2,062
    Спасибо Благодарностей отдано 
    10
    Спасибо Благодарностей получено 
    17
    Поблагодарили
    17 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Для определения кол-ва дорожек у дисковода можно использовать следующий алгоритм:
    Для начала выводим головки на нулевой цилиндр. Потом есть 2 варианта проверки количества дорожек.

    Вариант 1
    Делаем циклом (командой шаг) перемещение МГ на цилиндр 46-48. (считаем, что максимально возможный цилиндр у 40 дорожек дисковода ~ 45)
    По завершению цикла, меняем направление перемещения МГ от центра к краю.
    И запускаем второй цикл, на такое же число. После каждого выполнения команды проверяем бит "0-я дорожка" регистра состояния ВГ93. Если головки вышли на 0-й цилиндр, а цикл не закончен, то мы имеем дисковод 40 дорожек.

    Вариант 2
    Вместо команды "шаг" можно использовать команду "позиционирование МГ (со сброшенным битом проверки положения МГ)" Сначала делаем позиционирование на ц.60, а назад на 2. Если дисковод 40 дорожек, то мы окажемся на 0.

    ---------- Post added at 12:42 ---------- Previous post was at 12:37 ----------

    Для определения скорости перемещения делается тест похожий. Цикл идёт на скорости (4). Выставляем скорость, делаем перемещение с ц.0 на ц.15 (к примеру), потом делаем выход назад командой шаг на минимальной скорости (для 100% гарантии правильного выполнения) и смотрим. с 15-го ли цилиндра мы пришли (т.е. не ранее ли достигнута дорожка 0). Вот и всё. Как-то так.

    Скрытый текст

    Profi 5.06 1024K 12Mhz (кварц на 24), палитра, COM-порт, часы, hdd, covox, программатор
    ZX-Spectrum +3, ZX-Spectrum +2B, ZX-Spectrum +2, ZX Spectrum 48, ZX Spectrum 48+
    ZX Evolution Rev B.
    Color 48 + Beta Disk Interface +FDD+YM2149F
    Орель-08БК
    Pentagon-48 (недоссобранный кем-то)
    Pentagon-128 (полуубитый)
    Кворум-128 (в ремонте)
    Магик-05 (в ремонте)
    Robotron 1715
    Корвет ПК8020 и ПК8010
    Amstrad CPC 464
    Amstrad CPC 6128
    [свернуть]

  8. #7
    Member Аватар для EARL
    Регистрация
    17.01.2006
    Адрес
    Тамбов
    Сообщений
    97
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Vadim Посмотреть сообщение
    Для определения скорости перемещения делается тест похожий. Цикл идёт на скорости (4). Выставляем скорость, делаем перемещение с ц.0 на ц.15 (к примеру), потом делаем выход назад командой шаг на минимальной скорости (для 100% гарантии правильного выполнения) и смотрим. с 15-го ли цилиндра мы пришли (т.е. не ранее ли достигнута дорожка 0). Вот и всё. Как-то так.
    Скорость перемещения МГ задается 2-мя младшими битами в командах Восстановления, Поиска и Шага. Разве это не всего лишь указание контроллеру какую паузу нужно сделать для перехода с одного цилиндра на другой. Можно чу-чуть подробнее про скорость перемещения МГ, т.е. почему и зачем ее надо указывать в этих командах?

  9. #8
    Guru Аватар для Vadim
    Регистрация
    24.07.2008
    Адрес
    г. Курган
    Сообщений
    2,062
    Спасибо Благодарностей отдано 
    10
    Спасибо Благодарностей получено 
    17
    Поблагодарили
    17 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от EARL Посмотреть сообщение
    т.е. почему и зачем ее надо указывать в этих командах?
    Предположим, что у нас есть медленный дисковод (я таких держал в руках 2, один ИЗОТ (40x2), толстый такой, снятый со станка, второй от спектрума +3). Время перемещения головок у них 12мс (если и больше не суть важно, пусть будет 12). Если мы в командах связанных с позиционированием выставим 6 мс, то получится вот что:
    Сначала контроллер выдаст первый импульс "шаг", на дисковод. Дисковод начнет выполнять команду. Всё прекрасно. (про длительность самого импульса я прямо сейчас сказать не могу, надо смотреть доки на дисководы и на ВГ). Но если дисковод делает шаг за 12мс, то воспринять следующую команду шаг и адекватно выполнить, он сможет только через указанное время, а мы выдаем команду ранее. Как я помню, ИЗОТовский дисковод вообще не мог двигать головами, если скорость установлена быстрее поддерживаемой им. А так, по логике, если мы будем позиционировать на ц.30, то можем не на той скорости добраться лишь до 15, 6 или до 1. Я точно сказать не могу.

    Скрытый текст

    Profi 5.06 1024K 12Mhz (кварц на 24), палитра, COM-порт, часы, hdd, covox, программатор
    ZX-Spectrum +3, ZX-Spectrum +2B, ZX-Spectrum +2, ZX Spectrum 48, ZX Spectrum 48+
    ZX Evolution Rev B.
    Color 48 + Beta Disk Interface +FDD+YM2149F
    Орель-08БК
    Pentagon-48 (недоссобранный кем-то)
    Pentagon-128 (полуубитый)
    Кворум-128 (в ремонте)
    Магик-05 (в ремонте)
    Robotron 1715
    Корвет ПК8020 и ПК8010
    Amstrad CPC 464
    Amstrad CPC 6128
    [свернуть]

  10. #9
    Member Аватар для EARL
    Регистрация
    17.01.2006
    Адрес
    Тамбов
    Сообщений
    97
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Итак, с определением количества дорожек и скорости МГ разобрались. Осталось определить кол-во сторон диска. Выше предлагалось попробовать что-то считать с одной стороны диска и с другой, по итогам уже решить сколько же сторон диска. Да выше я также писал, что мы предполагаем работу с отформатированной дискетой, а что если она не форматирована. В этом случае первые два теста (кол-во дорожек и скорость МГ) все равно дадут верный результат, а вот количество сторон диска я полагаю можно попробовать определить с помощью команды Чтение дорожки. В случае ошибки при выполнении данной команды для одной из сторон диска можно сделать вывод, что диск имеет лишь одну сторону. Есть еще у кого-нибудь мысли по этому поводу?

  11. #10
    Veteran Аватар для lisica
    Регистрация
    19.12.2008
    Адрес
    Черкассы
    Сообщений
    1,573
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    16
    Поблагодарили
    13 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Тырдос форматирует и читает вторую сторону. На основании полученных данных продолжает формат DS или SS.
    Робик 1024(пентагоновские тайминги),+ 7Мц+, 2AY(TS),+ контроллер дисковода,+ 3.5,+ 5.25 флоп,+CMOS,+ mouse(caro),+ Flash.
    Pentagon 128(1991г.)+YМ
    программатор 2732-27512.


Страница 1 из 4 1234 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Алгоритм календаря
    от Mick в разделе Программирование
    Ответов: 13
    Последнее: 02.05.2012, 08:34
  2. Алгоритм текстового Quest'a
    от ALKO в разделе Программирование
    Ответов: 11
    Последнее: 23.12.2010, 00:47
  3. Алгоритм и..
    от Пётр в разделе Программирование
    Ответов: 4
    Последнее: 21.05.2008, 21:52
  4. сложнопонимаемый алгоритм
    от psb в разделе Программирование
    Ответов: 35
    Последнее: 27.05.2006, 01:42

Ваши права

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