User Tag List

Страница 10 из 19 ПерваяПервая ... 67891011121314 ... ПоследняяПоследняя
Показано с 91 по 100 из 189

Тема: Spectrum Archive Reader - Программа для чтения TR-DOS дисков

  1. #91

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,403
    Спасибо Благодарностей отдано 
    1,703
    Спасибо Благодарностей получено 
    2,224
    Поблагодарили
    876 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от CPLx Посмотреть сообщение
    А каким образом, какой командой? И были ли признаки что он выдает межсекторные данные?
    Код:
    		DeviceIoControl(h, IOCTL_FDCMD_SEEK, &Track, sizeof(Track), NULL, 0, &dwRet, NULL);
    
    		SetDataRate(h, 1);										// 300kbps
    
    
    		FD_READ_WRITE_PARAMS rwp = {FD_OPTION_MFM, 1, 0, 0,		// Определить rpw:
    									0, 7, 10, 0, 0};			// Режим чтения - MFM
    																// PHead - 0 (Phisycal Head 0)
    																// Cyl - 0 (not used)
    																// Head - 0 (not used)
    																// Sector - 0 (not used)
    																// Size - 0 (0 - 80 байт?, 
    																//			 1 - 256 байт, 
    																//			 2 - 512 байт,
    																//			 3 - 1024 байта,
    																//			 4 - 2048 байта,
    																//			 5 - 4096 байт,
    																//			 6 - 8192 байт,
    																//			 7 - 16384 байта.
    																// EOT - 5
    																// Gap - 0 (not used?)
    																// DataLen - 0 (not used)
    
    		printf("\nRaw Read");
    
    		DeviceIoControl(h, IOCTL_FDCMD_READ_TRACK, &rwp, sizeof(rwp),
    							DataBuf, 0x2000, &dwRet, NULL);
    
    
    		printf("\nAdr = %X, Len = %X\n", DataBuf, dwRet);
    
    		// pause
    
    		
    		WriteFile(rawFile, DataBuf, 0x2000, &dwRet, NULL);			// Записываем raw-дорожку в файл

    Да, сырая дорожка читалась.

    Этот пользователь поблагодарил Titus за это полезное сообщение:

    CPLx(14.08.2020)

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

  3. #92

    Регистрация
    23.11.2007
    Адрес
    Ростов-на-Дону
    Сообщений
    195
    Спасибо Благодарностей отдано 
    43
    Спасибо Благодарностей получено 
    125
    Поблагодарили
    68 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Да, сырая дорожка читалась.
    Точно! У меня тоже прочиталась. Хотя тут надо именно те параметры выставлять. Круто.

  4. #93

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,403
    Спасибо Благодарностей отдано 
    1,703
    Спасибо Благодарностей получено 
    2,224
    Поблагодарили
    876 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от CPLx Посмотреть сообщение
    Точно! У меня тоже прочиталась. Хотя тут надо именно те параметры выставлять. Круто.
    Лично мне показалось, что толку от чтения трека целиком маловато, т.к. когда сбивается синхронизация, невозможно восстановить информацию.

  5. #94

    Регистрация
    23.11.2007
    Адрес
    Ростов-на-Дону
    Сообщений
    195
    Спасибо Благодарностей отдано 
    43
    Спасибо Благодарностей получено 
    125
    Поблагодарили
    68 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Лично мне показалось, что толку от чтения трека целиком маловато, т.к. когда сбивается синхронизация, невозможно восстановить информацию.
    Синхронизация срывается в момент окончания записи данных сектора - там возникает шов новой записи (записи сектора) и старой (данных записанных при форматировании). По этой причине, если трек форматирован, но на нём не производилась запись секторов, то синхронизация на нём не срывается (это я только что проверил: прочитал трек, и все пробелы там отображены корректно). Сейчас посмотрел на записанном треке - весь первый сектор прочитан правильно, а срыв синхронизации происходит в момент окончания его записи: по идее должны идти байты 4E, но идут 0x27 (которые представляют собой сдвинутый 4E). Т.е. мы знаем в какой точке происходит срыв синхронизации - это сразу после CRC сектора. Мы также знаем чем заполнены эти пробелы между секторами (байтом 4E), поэтому можем вычислить насколько там произошло смещение, сравнив полученные данные с теми что должны быть. Поэтому в принципе восстановить трек можно и попытаться.

  6. #95

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,403
    Спасибо Благодарностей отдано 
    1,703
    Спасибо Благодарностей получено 
    2,224
    Поблагодарили
    876 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от CPLx Посмотреть сообщение
    Мы также знаем чем заполнены эти пробелы между секторами (байтом 4E), поэтому можем вычислить насколько там произошло смещение, сравнив полученные данные с теми что должны быть. Поэтому в принципе восстановить трек можно и попытаться.
    Нельзя восстановить, т.к. сместившись, информация уже не может быть расшифрована из MFM. Вернее, она расшифровывается но не правильно и с потерями. Обратно ее преобразовать в MFM, сместить на бит, и перерасшифровать не получится.

    Этот пользователь поблагодарил Titus за это полезное сообщение:

    CPLx(14.08.2020)

  7. #96

    Регистрация
    04.08.2005
    Адрес
    Nizhnevartovsk
    Сообщений
    1,091
    Спасибо Благодарностей отдано 
    102
    Спасибо Благодарностей получено 
    152
    Поблагодарили
    100 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Лично мне показалось, что толку от чтения трека целиком маловато, т.к. когда сбивается синхронизация, невозможно восстановить информацию.
    Мне кажется, что использовать её всё-таки можно. Для того чтобы обнаруживать те же самые защиты - плавающие данные, данные без заголовков секторов. Данные самих секторов читать ей не получится действительно. Но хорошо, что после сбивки, очередной правильный синхрокод A1A1A1 возвращает все на место.

    Межсекторные 4E даже сбитые прекрасно восстанавливаются. Но сами сбитые данные это не поможет увидеть (при перезаписи секторов перезаписанные тайминги не совпадают с межсекторными).
    Вообще можно попробовать перевести данные в МFM поток и сравнить с тем что должно читается без сбивки (прочитав другими утилитами). Возможно, не все так плохо.
    MFM поток представляет собой последовательность длительностей в пропорции 2/3/4, а фальшивый синхрокод C2 смещает байтовое окно. Так вот насколько я понял, при этом смещении происходит дублирование куска байта в MFM представлении. Эти закономерности можно было бы попытаться вычислить и сделать некий компенсатор.
    Последний раз редактировалось Dexus; 15.08.2020 в 04:24.

  8. #97

    Регистрация
    23.11.2007
    Адрес
    Ростов-на-Дону
    Сообщений
    195
    Спасибо Благодарностей отдано 
    43
    Спасибо Благодарностей получено 
    125
    Поблагодарили
    68 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Dexus Посмотреть сообщение
    Для того чтобы обнаруживать те же самые защиты - плавающие данные, данные без заголовков секторов.
    Данные совсем без заголовков секторов она прочитать не сможет, судя по всему. Работает эта команда не так как в ВГ93. Она ждет индексный импульс, после чего ищет первый заголовок сектора, потом начинает читать содержимое трека. Первый выданный ей байт это первый байт данных этого сектора. Когда сектор кончается, она продолжает читать данные дальше, пока не считается весь трек (в моем случае она это делает циклически несколько раз, т.е. несколько оборотов диска, выдавая порядка 28 000 байт). Если на треке нет заголовков секторов, то эта команда ничего не читает и драйвер выдает ошибку 1122. У меня подозрение, то что как Titus её использовал это нестандартный прием, т.к. не соответствует документации.


    Цитата Сообщение от Dexus Посмотреть сообщение
    очередной правильный синхрокод A1A1A1 возвращает все на место.
    Вот почему-то не возвращает. Этот синхрокод A1A1A1 пишется перед данными каждого сектора и по идее данные секторов должны быть правильными по этой причине. Но на практике это не так, и синхронизация почему-то не восстанавливается, и данные секторов оказываются искаженными.

    Вот картинка полученная при чтении чистого трека, на который не производилось посекторной записи и где синхронизация не слетает в конце секторов.

    https://ibb.co/WtpF9Wc

    (Значения байт указаны в десятичной системе. 78 это 4E) Первым синим прямоугольником обведен 15-й сектор размером 256 байт (имеет код 1), там же видно что это 61-й цилиндр. Вторым синим прямоугольником - 16-й сектор. Большие области нулей - данные, перед которыми идут байты 161, 161, 161, 251 (A1 A1 A1 FB). А красный квадрат это момент срыва синхронизации, как я полагаю из-за шва который получается при записи трека когда он зацикливается. И дальше все сектора идут искаженные, в том числе их данные. Данные становятся равными 255 - это явно попали синхроимпульсы MFM вместо данных. И синхронизация не восстанавливается почему-то перед областями этих данных, хотя по идее должна. Почему так происходит непонятно.
    Последний раз редактировалось CPLx; 15.08.2020 в 06:18.

  9. #98

    Регистрация
    12.04.2009
    Адрес
    Одесса
    Сообщений
    645
    Спасибо Благодарностей отдано 
    444
    Спасибо Благодарностей получено 
    109
    Поблагодарили
    75 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    У кого-то есть материнка с набортным контроллером дисковода, поддерживающим функцию однопроходного форматирования трека при этом сразу с пользовательскими данными?
    У драйвера Саймона для этого режима заготовлена отдельная функция, но код реализации одинаков с обыкновенным форматированием (однобайтным заполнителем).
    Вообще сразу после форматирования поток трека читается очень чисто, т.к. нет срывов от дозаписей.
    Последний раз редактировалось anasana; 15.08.2020 в 09:29.

  10. #99

    Регистрация
    04.08.2005
    Адрес
    Nizhnevartovsk
    Сообщений
    1,091
    Спасибо Благодарностей отдано 
    102
    Спасибо Благодарностей получено 
    152
    Поблагодарили
    100 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от CPLx Посмотреть сообщение
    Данные становятся равными 255 - это явно попали синхроимпульсы MFM вместо данных. И синхронизация не восстанавливается почему-то перед областями этих данных, хотя по идее должна.
    Область с 12 ноликами идет перед A1A1A1, и действительно странно, поскольку Этот синхрокод в контроллере автоматом должен смещать начало байта. Вне зависимости от режима чтения. Может новые контроллеры позволяют отключать пересинхронизацию после первичной? Старые вроде не позволяют (равно как и отключать синхронизацию по C2).
    Грустновато с этой точки зрения. Пространства для маневров мало.

  11. #100

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,403
    Спасибо Благодарностей отдано 
    1,703
    Спасибо Благодарностей получено 
    2,224
    Поблагодарили
    876 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Учитывая, что на современных материнках вообще перестали устанавливать контроллеры FDD, есть смысл переходить на собственную железку, которая может всё.

Страница 10 из 19 ПерваяПервая ... 67891011121314 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Ответов: 534
    Последнее: 04.05.2025, 15:40
  2. Программа для нарезания окон ZX Spectrum
    от AAA в разделе Утилиты
    Ответов: 84
    Последнее: 16.09.2010, 11:07
  3. Плагин FAR для чтения реальных дисков TR DOS
    от Alexandr Medvedev в разделе Утилиты
    Ответов: 2
    Последнее: 15.09.2010, 06:17
  4. Новый FAR plugin для форматирования дисков TR DOS
    от Alexandr Medvedev в разделе Утилиты
    Ответов: 3
    Последнее: 03.08.2007, 16:44

Ваши права

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