С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Я не знаю формата каталога. Если есть где-то описание, то тогда смогу ответить насколько сложно будет это реализовать.
(Про ис-дос я вообще ничего не знаю, у меня не было таких дисков, я его видел только один раз когда знакомый приносил показать их и я даже не мог их скопировать из-за нестандартного формата.)
Поработал с десятком IS-DOS дисков. Странно, но ощущение что читаются они менее стабильно. К концу часто есть наростающие беды. Которые в результате рандомного, прямого и обратного чтения удается почти убрать. Жалко что приходится делать это в ручном режиме (сначала запускаю рандом, потом вперед, назад, опять рандом).
- - - Добавлено - - -
Тут есть описание многих форматов:
http://zxpress.ru/article.php?id=8564
- - - Добавлено - - -
Попробовал CP/M диск от Хоббита, считался.
- - - Добавлено - - -
Нашел баг. В какой-то момент Read Random Sectors перестал зацикливаться. Вероятно после того как я пробовал читать тольк 1 сторону.
CPLx(22.07.2020)
Сделал отдельную вкладку для быстрого чтения и автоматической записи прочитанных образов.
Добавленная вкладка называется HT. Суть такова: вставляем диск, нажимаем кнопку New Disk, диск читается и сохраняется в директорию.
Конкретно по кнопке New Disk происходит следующее:
- Создается новый образ размером Default Image Size треков.
- Определяется формат нулевого трека (TR-DOS, IS-DOS, CP/M).
- Если формат определился, то делается чтение диска (если стоит галка напротив соответствующего формата) в режиме вперед-назад Number of Reads раз. Например, если Number of Reads равен 3, то диск будет прочитан вперед, потом назад, потом снова вперед (всего, таким образом, будет пройден 3 раза).
- После первого чтения вперед, происходит автоопределение размера диска. Определяется формат треков и их соответствие целевому. Изучаются треки которые имеют номер больше чем Default Image Size и меньше чем Max Tracks. Параметр Max Tracks зависит от дисковода, максимально допустимое число - 172. Default Image Size я думаю имеет смысл ставить равным 160 треков. Функцию автоопределения размера диска можно отключить установив Max Tracks равным Default Image Size.
- После выполнения чтения вперед-назад, включается случайное чтение (если стоит соответствующая галка). К нему задается таймаут и количество error подряд при чтении секторов - для остановки чтения. 00:00:00 - отсутствие таймаута. Нулевое значение параметра Stop On Nth Fail означает отсутствие ограничения по количеству ошибочных чтений.
- Потом производится автоматическое сохранение образа в указанную директорию (для каждого типа диска своя) по указанному шаблону файла (для каждого типа диска свой). Шаблон задается задается именем файла и непрерывной последовательностью звездочек, которые будут заменены на порядковый номер. Число звездочек обозначает длину числа как строки. Например "Disk ***" будет записываться как Disk 000, Disk 001, и так далее. Расширение будет добавлено соответствующее выбранному формату файла. Формат файла также задается (FDI, TRD, Modified TRD, и KDI для CP/M).
Кнопка Repeat Reading - Заново запустить цикл чтения, но без создания нового образа, автоопределения типа диска и его размера.
Save - Сохранение образа. (Хотя он сохраняется автоматически, но можно это сделать еще раз. Будет сохранен в тот же файл что было сделано ранее автоматом.)
Баг с чтением случайных секторов исправил.
Еще мне в личку сообщили что вот это является ошибкой:
И действительно, драйвер всё же выдает данные если сектор оказался с ошибкой CRC. Поэтому сейчас я сделал так что в образ могут быть записаны прочитанные с ошибкой данные. Если такой образ сохранить в формате TRD, то эти данные будут вписаны в сектор, но будет потеряна информация о том что он имеет ошибку CRC. Если сохранить как Modified TRD, то будет сохранение как в первой версии и как сделано в WinTRD - т.е. bad-сектор будет заполнен символом 'B', и таким образом будет потеря данных, хотя сохранится информация о том что он bad. Аналогично для загрузки образа: при загрузке как Modified TRD, сектора заполненные символом 'B' будут восприняты как CRC-Error. При загрузке просто TRD (без Modified) такого не будет. Надо сказать что нормальные сектора могут естественным образом содержать сплошные 'B' - это случается в однотонной графике, где атрибуты могут быть заполнены этим символом сразу на 3 сектора подряд, такие диски встречаются.
По этой причине я рекомендую сохранять образы в формате FDI - там сохраняется как содержимое bad-сектора, так и признак того что он bad.
Сообщение о несохраненном образе при закрытии приложения я убрал. Вместо него в таблице указывается был ли образ изменен.
Также сделал настройки (которые не хотел делать раньше). Сохраняются в файл xml создаваемый в директории приложения. Параметры вкладок теперь сохраняются. Ключи DataRate убраны из командрой строки и больше не работают. Вместо них можно использовать настройки - всё сохранится автоматом.
Эту версию я не считаю окончательной, может быть много багов.
Заметил пару нюансов. Имя файла которое вводишь при нажатии New не синхронизировано с именем по нажатие Save. Из-за этого иногда возникает путаница, записал диски не записал, какое имя ему назначить и т.п.
А еще в Поле Track To всегда висит 172 трек, хотя при создании диска я выбираю 160 всегда. Тут попутно вопрос, почему при старте 172, а по умолчнию при New - 160.
- - - Добавлено - - -
Кстати, было бы удобно иметь стандартные сочетания клавиш: CTR + S - save, CTR + N - new, С - каталог
- - - Добавлено - - -
Оцифровал сабжем уже порядка 200 дискет. Впереди еще больше.
Еще заметил. Что при закрытии программы, она предупреждает что не сохранен образ, но вот не указывает какой (tr-dos, cp/m, is-dos).
CPLx(23.07.2020)
Track To это область чтения. 160 - это размер образа. Реальная область чтения является пересечением отрезка [TrackFrom, TrackTo) и [0, "размер образа"). Т.е. реальным TrackTo будет значение Min(TrackTo, ImageSize).
160 по умолчанию потому что я думаю большинству именно это и надо, т.к. большинство дисков всего на 160 треков.
Я могу специально для тебя сделать отдельную вкладку с кнопкой на которую будет повешен скрипт делающий всё автоматом: определяющий тип диска, читающий его нужной функцией (TR-DOS/IS-DOS/CP/M), в нужной комбинации (случайное, вперед, назад и т.п.), сохраняющий образ в нужную папку с нужным названием файла. Будет спешиал эдишон. Максимальная автоматизация. Но многие вещи будут захардкодены, выглядеть с точки зрения UI всё это будет криво, как костыль, почему я и не особо имел энтузиазма это делать. Если интересно, то напиши какие настройки тебе нужны, какая конкретно последовательность действий нужна. Раз уж у тебя так много дисков, это реально может всё облегчить.
И еще: ты когда читаешь нечитающиеся сектора, какие-то манипуляции с головкой дисковода делаешь для улучшения чтения (прижимаешь, сдвигаешь и т.п.?)
По несоответствиям New и Save я посмотрю что там.
Делаю да.
Но 90% ошибок уходят сами, при рандоме + вперед + назад (поэтому и хочется автоматизации в этом вопросе).
Если не ушли, то прижимание головки помогает в ~30% случаев.
Насчет того что доработка только для меня. Это не совсем так. Есть еще ААА он много цифрует. За 15 лет он оцифровал тысячи 3 дисков. Я не сильно меньше. Был еще Страйкер, у него тоже такие же обьемы были (спасал диски со всей Беларуси). Есть и другие люди который цифруют диски сотнями.
CPLx(26.08.2020)
Затестил последнюю версию.
В вкладке HT как-будто перепутаны скорости, при 250 начало читать, а при 300 отказалось.
После чтения первого дороги вылетел эксепшн:
https://yadi.sk/i/FSyqFEcJvpGrRg
- - - Добавлено - - -
При чтении в режиме TRD та-же беда, пользоваться программой пока не получается.
Тем временем в самой первой версии тоже словил баг. После рандомного чтения и попадания на HD диск, сектор и трек самопрозвольно выставились на 45 - 45
(видимо на значение последнего бэда).
Странное дело. Я у себя не нашел перепутанных скоростей.
Попробуй взять вот эту версию (там я прикрепил еще файл pdb с отладочной информацией), и если будет исключение, то выложи его полный текст здесь (скрина я думаю будет недостаточно, там обрезается часть инфы обычно).
Можешь заодно потестить новую фичу чтения кастомных форматов (она сделана еще не до конца, но уже почти до конца).
PS
Еще лучше запустить с ключом /logfile и посмотреть лог.
Последний раз редактировалось CPLx; 12.08.2020 в 13:43.
Довольно забавным образом удалось прочитать трек включая межсекторные данные благодаря особенностям формата этого трека. На одном из моих дисков оказались треки где были сектора с размерами 4, 5, 6, 7, 8 и 9. Цифра 6 означает размер сектора 8192 байта (размер всего трека - 6250 байт). Что означают остальные я даже не знаю. Тайминги между заголовками секторов указывали на то что реально их размер составляет 256 байт. Но в сами заголовки вписаны неправильные размеры. Дал команду прочитать сектор с размером 6 (8192 байта), получил ошибку 23 (ошибка CRC), и данные всего трека вместе со всеми пробелами, т.к. контроллер читая сектор размером 8192 байта в итоге выдал данные всего трека. Прочитано было порядка 8192 байта (не менее 8118, остальные там нули и трудно понять были эти нули прочитаны или были изначально в памяти). Глядя на сами данные видно что там похоже синхронизация слетает на конце трека (где стык окончания и начала, в районе индексного импульса это должно быть по идее), и вместо 4E начинают идти E4, ну и вся остальная инфа искаженная оказывается. Жаль что это сработало только благодаря ошибкам в формате и другие треки таким способом не прочитать. Ну хоть увидел структуру дорожки, впервые за 23 года наверное. Последний раз я видел такое только читая трек на ВГшке.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)