Comments 30
В сообщении написано «disk» вместо «disc»Потому что disc-это круглое, а disk-это квадратное. ;)
Переведено промтом? Очень много ошибок.
пустой изменений потоков намагниченности
запись точных поверхностей дисков
выполняется вызов диска для загрузки части загрузчика
И т.п.
Ещё, в вашем контексте fingerprints не надо переводить как «отпечатки пальцев». Там другой смысл. Лучше просто «отпечатки».
Когда-то давно, лет 25 назад, была парочка мощных программ копирования защищенных дискет, прилетевшая из Фидо.
А ещё была классная книга, кажется Фролова, про контроллер гибких дисков. По итогам её чтения была сделана коллекция примитивов, работающая через порты и выполняющая всякие хитрые штуки, типа короткой записи, чтения нестандартных секторов и т.п. Для различных защит, создавался файл конфигурации, обеспечивавший запуск примитивов с нужными параметрами и в нужной последовательности. Так покорились некоторые защиты разных полезных программных пакетов, которые не поддавались готовым дупликаторам
Точно, Фролов. Нашлась на просторах Интернета: https://www.frolov-lib.ru/books/bsp/v10/ch1_4.htm
Это конечно круто, но зачем пытаться копировать, то что не копируется? Легче просто снять защиту. В большинстве случаев было достаточно поменять пару байт :)
1) Контроллер измеряет скорость вращения диска с высоким разрешением и опорой на собственную тактовую частоту; и
2) подстраивает скорость записи (битовую частоту) таким образом, чтобы на дорожку влезло заданное количество бит в пределах допуска.
3) если оказалось, что записалось недопустимо много больше или меньше бит (это можно проверить путём измерения сигнала датчика индексного отверстия) — то повторять попытку, пока не запишется.
Для этого контроллер должен уметь подстраивать битовую частоту с высоким разрешением. Но для современных микроконтроллеров или FPGA это не проблема.
это можно проверить путём измерения сигнала датчика индексного отверстия
У многих дисководов этот сигнал выдавался от балды, о чем писал Питер Нортон в своей книге. Когда-то — в семидесятые — индексное отверстие действительно совпадало с началом первого сектора на дорожке, потом же стали просто писать сектора при форматировании на первую дорожку с началом в произвольном месте, а на остальные дорожки — ориентируясь на первую.
на первую дорожку с началом в произвольном месте, а на остальные дорожки — ориентируясь на первую
Не совсем так, сколько помню, и FFormat тому яркий пример — он размещал при форматировании дорожки таким образом, чтобы максимально увеличить скорость последовательного чтения (и на слух это звучало как "тук… тук… тук… тук" при стандартном форматировании и "тук-тук-тук-тук" при FF) выигрыш мог быть почти в 2 раза.
А идею с "дублированием в высоком разрешении", думаю, можно реализовать на "слегка модифицированном" LS-120, но это только про 3.5", да и "зачем?"...
Считывание данных с дискет контроллером Intel 8272 может производиться в двух режимах: поиск и чтение отдельного сектора; или чтение дорожки целиком. Именно первый режим использовался для считывания операционными системами. Второй режим использовался только в защитах и спец утилитах.
При поиске сектора сигнал индексного отверстия не используется. Контроллер просто анализирует поступающие с дисковода данные на предмет заголовка нужного сектора. Как только будет найден заголовок — то за ним следуют данные, которые контроллером передаются в систему через DMA. По окончании чтения сектора генерируется прерывание процессора.
Если драйвер дисковода достаточно расторопный — то он может, получив данные одного сектора, сразу дать контроллеру команду на чтение следующего. Таким образом можно прочитать все секторы с дорожки за один оборот диска. Но, если драйвер диска слишком медленно думает — то следующий сектор может проскочить под головкой до того, как драйвер даст контроллеру команду на его считывание. В результате придётся ждать следующего оборота диска и тратить по обороту на каждый сектор, что в разы замедляет скорость чтения.
Если PC работает стабильно медленно, и драйвер дисковода никогда не успевает считать 2 рядом расположенных сектора подряд — то применяется система перемежения секторов — «Interleave». Сектора размещаются на дорожке с чередованием номеров:
1, 6, 2, 7, 3, 8, 4, 9, 5
Приведённая выше последовательность называется «2:1 Interleave». В такой системе, получив от контроллера данные первого сектора, процессор имеет ещё время, пока под головкой пробегает сектор 6, для выдачи контроллеру команды на чтение второго сектора, и при этом второй сектор будет считан на том же обороте диска. Все секторы дорожки можно считать за 2 оборота диска, что хуже, чем 1, но лучше, чем 9 (когда процессор не успевает без Interleave).
Стандартный формат MS-DOS использовал 2:1 Interleave.
Было ещё одно явление, замедляющее процесс считывания. Оно возникало при чтении секторов с нескольких дорожек. В идеале, если процессор и драйвер достаточно быстрые, и Interleave не используется — то две соседние дорожки можно прочитать за два оборота диска. В реальности, однако, после перевода головки на соседнюю дорожку предписывалось подождать 5мс для релаксации механических колебаний головки. На хороших дисководах ждать было не обязательно, но всё равно был риск прихода ошибочных данных в первые миллисекунды после перевода головки.
Таким образом, считав сектор 9 одной дорожки и дав контроллеру команду на шаг и чтение сектора 1 следующей дорожки, мы зачастую пропускали сектор 1, либо он с первой попытки считывался с ошибкой. Приходилось ждать следующего оборота диска, чтобы считать этот сектор. И снова получалась скорость считывания в 2 оборота диска на дорожку, в 2 раза меньше максимально возможной.
Для борьбы с этим явлением было придумано смещение нумерации секторов на соседних дорожках:
Дорожка 0 — 1, 2, 3, 4, 5, 6, 7, 8, 9
Дорожка 1 — 9, 1, 2, 3, 4, 5, 6, 7, 8
Дорожка 2 — 8, 9, 1, 2, 3, 4, 5, 6, 7
Таким образом создавался запас времени на успокоение головки после шага, равный длительности одного сектора. И скорость последовательного считывания составляла уже не половину от максимальной, а падала всего на 11%.
Подобные форматы дискет можно было реализовать только спец утилитами. Стандартные команды форматирования в DOS и Windows это не поддерживали и форматировали все дискеты с 2:1 Interleave.
У многих дисководов этот сигнал выдавался от балды, о чем писал Питер Нортон в своей книге
Можно пруф? Я не встречал ни одного исправного дисковода, который бы выдавал индексный сигнал от балды.
Индексный сигнал при работе дисковода необходим для следующих вещей:
1) Маркировать начало и конец записи во время форматирования: запись дорожки целиком ведётся от индекса до индекса;
2) Вести счёт оборотам диска при поиске сектора на дорожке. Если сектор не был найден после заданного числа индексных импульсов — то контроллер выдаёт ошибку «Sector not found».
3) Маркировать начало и конец считывания для операции «чтение дорожки целиком». Правда, эта операция в операционных системах обычно не использовалась, а использовалась только в защитах и сервисных утилитах для анализа и восстановления дисков.
Так вот, описанная в статье защита, когда на дорожку влезает строго определенное количество байт — она, по-вашему, каким образом определяет, сколько байт находится на дорожке? Ведь дорожка — она круглая, её можно считывать многократно и не знать, что она уже повторяется. Только по индексному отверстию и определяется начало и конец.
Форматирование дорожки — это просто её полная перезапись, включая индексные метки секторов, преамбулы для настройки ФАПЧ, промежутки между секторами и индексными метками и т.д. При форматировании некоторые контроллеры (напр. КР1818ВГ93) позволяют произвольным образом задавать структуру, расположение и содержание данных на дорожке. При этом можно разместить секторы произвольных размеров в произвольной последовательности, не обязательно начиная с первого. Возможно, именно это явление описывалось у Нортона.
Индексный сигнал дисковода используется контроллером дисковода при форматировании. Контроллеры на всех PC были одинаковые — это микросхема Intel 8272. В более поздних вариантах она была интегрирована в микросхемы чипсета, но логика её работы осталась неизменной.
Таким образом, если на каких-то дисководах индексный сигнал формируется не от датчика положения диска — то на таких дисководах, как минимум, будет невозможно форматирование дискет. Как максимум — драйвер будет зависать в случае ошибки чтения вида Sector Not Found.
Прокалываем дискету, ищем где сбой чтения и этот адрес вписываем в прогу. И теперь она работает только с этого диска.
Уж и не знаю насколько это было эффективно.
— форматируем дорожку каким-либо форматом, пишем нужное
— начинаем форматировать эту же дорожку другим форматом и прерываем операцию к моменту окончания записи заголовка
чтобы считать содержимое — требуется опять же начать и успеть прервать форматирование нужным (известным) форматом… соответственно расставив точки останова или попытавшись пошагово пройтись — необратимо убьём содержимое.
Хотя 95 год… уже наверное коммерциализировался в том числе и рынок пиратки. Правда и CD-диски пошли уже.
Самая хитрая защита флоппи-дисков