А в 2005г. уже всерьёз планировалась Windows-версия, способная тестировать накопители любого объёма. Поэтому при разработке DOS-программы было решено ограничиться 32-х битным счетчиком секторов, не предусматривая тестирование накопителей более 2 Тб. Фактически же, предельно поддерживаемый объём составил 1.048.575 Mb = ~ 1.05 Tb, поскольку для работы с числами и упрощения кода был использован арифметический сопроцессор (и как следствие — числа со знаком).
Прошло 14 лет. И хотя, диски на 1Тб очень популярны, в продаже есть винчестеры на 12 Тб, для которых Victoria-DOS совершенно не подходит. А письма идут… И люди спрашивают, будет ли развиваться программа для DOS.
Среди причин, по которым она нужна пользователям, можно отметить следующие:
- Быстро загружается с внешнего устройства, не требуя громоздкой Windows PE.
- Большая точность, быстрей реагирует на малейшие изменения поведения HDD.
- Есть наблюдение, что DOS-версия лучше «лечит» дефектные секторы.
Пользуясь моментом, я выражаю огромную благодарность всем, кто на протяжении 14 лет тестировал «Викторию», оставлял отзывы, ждал новых версий… Благодаря вам программа смогла преодолеть барьер любительской самоделки, и развилась до способности работать на любом компьютере из миллионов самых причудливых конфигураций.
Почему же я не спешу обновлять версию 3.52? (именно она стала последней когда-то давно)
На это есть объективные причины:
- Довольно сложно расширить границу поддерживаемого объёма. Нужно переписывать много процедур, используя вместо одного регистра — пары 32-х битных регистров (например eax:ebx) и 64-битную арифметику с переносами.
- Прогресс компьютеров не стоял на месте. В них появились такие нововведения, как UEFI, AHCI и упразднение режимов совместимости с IDE. А значит, требуется программировать различные дисковые контроллеры самому, что явно не будет способствовать универсальности.
- Слухи о «лучшем» лечении дефектов под ДОС сильно преувеличены. Если всё делать правильно, то в Windows, задействовав режим PIO, можно добиться ещё лучших результатов.
- Victoria-DOS создавалась, когда я не очень хорошо умел программировать. В ней отражен мой уровень развития на 2005 год. С этого времени многое было переосмыслено, и опробованы более рациональные решения, которые воплотились в программе для Windows.
Но это не значит, что я совсем не хочу обновлять «Викторию»-DOS. Просто это довольно сложно технически и отнимет много времени. Поэтому, два дня назад я задумался о компромиссном варианте. Действительно, можно делать всё не сразу, а с чего-то начать. Хобби же. А там — как карты лягут.
И вот, из закромов извлечены исходники на ассемблере, и сам турбо-ассемблер Borland TASM 4.0. Запускаем программу. Подключаем винчестер на 2Тб.
После получения паспорта HDD мы сразу видим основной недостаток — в паспорте некорректно отображается количество секторов, ибо оно выходит за допустимый диапазон. При этом остальные параметры выглядят нормально.
Интерфейс «Виктории» кажется чрезмерно ярким, перегруженным кучей цветов и сомнительных украшений. Наивно и по-детски. Сейчас бы я сделал проще — и не последнюю роль в формировании вкуса стали мои попытки самостоятельно освоить веб-дизайн. За те 2 месяца возни с сайтом hdd.by у меня-таки появились какие-то зачатки вкуса, до этого отсутствовавшие как класс:)
А это — место, где большие числа портятся.
В идеальном варианте в программу нужно внести следующие изменения:
- Переделать все переменные и арифметику на 64-битные;
- Переделать генератор случайных чисел;
- Переделать график на большую предельную скорость;
- Добавить работу через AHCI или в крайнем случае через BIOS;
- Добавить новые, актуальные функции.
Более быстрый и потому, реальный вариант может выглядеть так:
- Замена некоторых переменных и арифметики на беззнаковые, оставив ядро 32-х битным. Предел объёма расширится до 2 Тб.
- Добавление работы через BIOS.
Кроме того, возможны некоторые лайфхаки в программировании, позволяющие расширить поддерживаемый объём до десятков Тб, оставив ядро программы 32-х битным.
Я начал с очевидного — заменил переменные dword (32 бит), связанные с объёмом диска, на qword — счетверённое слово (64 бит). После этого программе резко полегчало, и она «увидела» 2-терабайтный винчестер.На скриншоте немного исправленная Victoria 3.51 работает с винтом объёмом 2Тб. Именно такой вариант, возможно, имеет смысл опубликовать в дальнейшем.
Правда, работы всё равно предстоит много — надо переделать расчёт пройденных процентов с сопроцессора на целочисленную арифметику. Ну и еще подумать над десятком других сложных мест. Стоит ли вообще это делать? Нужны ли народу «костыли»? Ведь есть же программа MHDD, в которой нормально реализована поддержка больших дисков. И только после ответов на эти вопросы можно будет окончательно поставить точку в теме DOS-Victoria.
Сергей Казанский, 09.12.2018г.