Чтение данных с CD-ROM

Тема в разделе "WASM.WIN32", создана пользователем ZlovreD, 14 окт 2004.

  1. ZlovreD

    ZlovreD New Member

    Публикаций:
    0
    Регистрация:
    5 авг 2004
    Сообщения:
    28
    СD-ROM не хочет читать болванку с фильмом.

    Пробовал написать прогу,которая читает в буфер 200 байт из файла с болванки,

    а потом записывает в файл на HDD.

    Копируется около 11Мег а потом функция ReadFile не возвращает

    управления программе,а в журнале системы появляется ошибка типа:

    Обнаружена ошибка на устройстве \Device\CdRom0 во время выполнения операции страничного обмена.

    Неверный блок на устройстве \Device\CdRom0.

    Можно ли как нибудь пропустить повреждённые сектора и записать полезную информацию?
     
  2. MoKC0DeR

    MoKC0DeR New Member

    Публикаций:
    0
    Регистрация:
    13 ноя 2003
    Сообщения:
    136
    Адрес:
    Russia
  3. Icebp

    Icebp New Member

    Публикаций:
    0
    Регистрация:
    24 дек 2003
    Сообщения:
    39
    Прочитал статью: интересная вещь, не знал раньше об этом. Кто-нибудь знает по какому алгоритму или таблице берутся числа для скремблинга?
     
  4. const

    const New Member

    Публикаций:
    0
    Регистрация:
    8 апр 2004
    Сообщения:
    121
    Есть такой документ: Ecma-130 (Data interchange on read-only 120 mm optical data disks (CD-ROM)), там должно быть описано. Весит, по-моему, метра полтора, но стОит того.
     
  5. Icebp

    Icebp New Member

    Публикаций:
    0
    Регистрация:
    24 дек 2003
    Сообщения:
    39
    const

    Спасибо! Посмотрел ecma-130.pdf, там все подробно написано про компакт диски. Похоже вместе со стандартом MMC этот документ даст ответы практически на все вопросы про компакт диски. Я только не пойму что означает Bit count в приложении B (там где пишется про скрамблер). Как я понял вначале некоторый 16-битный регистр инициализируется значением 1, потом на каждом шаге 0-ой бит регистра ксорится с 0-ым битом входного потока данных и одновременно само значение регистра модифицируется по схеме: ксорятся 0-ой и 1-ый биты, результат пишется в 15-ый бит, а все оставшиеся биты сдвигаются вправо на одну позицию. Я правильно понял схему или ошибся?
     
  6. const

    const New Member

    Публикаций:
    0
    Регистрация:
    8 апр 2004
    Сообщения:
    121
    2 Icebp

    Не знаю, чем помочь, к сожалению. Это был единственный документ, в котором я видел хоть какое-то описание скрамблера. С ним (со скрамблером) никогда не разбирался, и, по-моему, более подробного описания этого алгоритма не встречал. Могу лишь пообещать, что, если на что-то накнусь, то обязательно помещу ссыку в этот топик. Единственная просьба, если что-то встретится вам, сообщите о результатах.
     
  7. const

    const New Member

    Публикаций:
    0
    Регистрация:
    8 апр 2004
    Сообщения:
    121
    Нашел в своем архиве исходники. Как написано в коментариях " reed-solomon encoder / decoder for compact discs". Здесь же есть scramble_table, и пример ее использования. Попробуйте, может быть ЭТО - как раз то. что вы искали
     
  8. const

    const New Member

    Публикаций:
    0
    Регистрация:
    8 апр 2004
    Сообщения:
    121
  9. Icebp

    Icebp New Member

    Публикаций:
    0
    Регистрация:
    24 дек 2003
    Сообщения:
    39
    const

    Спасибо вам за файлы! С помощью их я понял где ошибся разбираясь со скремблером.

    All

    Для скремблирования используется 16-ти битный регистр сдвига (кстати регистр сдвига легко реализовать аппаратно с помощью D-триггеров, наверное поэтому его и используют для скремблинга). Между собой ксорятся 0-ой и 1-ый биты этого регистра результирующий бит пишется в бит номер 15 и делается сдвиг вправо на 1 бит. При этом 0-ой бит идет чтобы ксорить очередной бит входного потока (первыми

    в потоке идут младшие биты байта). У меня раньше не удавалось получить правильный поток битов для скремблирования потому что я перепутал порядок

    операций установки 15-го бита и сдвига вправо. Когда сделал все нормально, то получил правильный поток ксорящих битов для скремблирования. Ради примера я выкладываю свою программку, которая читает файл t11.wav

    добавляет в считанное нечитабельные блоки и пишет их в файл unread.wav если записать этот файл, то он будет практически нечитабельным с компакт диска. Я тут

    попробовал испытать действительно ли не будет читаться диск на который

    пишется поток байт который после скремблирования даст:

    00 FF FF FF FF FF FF FF FF FF FF 00

    то есть который даст байты синронизации, которые каким то образом нарушают нормальное чтение диска. Оказалось что это действительно так, правда с небольшой поправкой: байты считываются с трудом, но все-таки в среднем

    примерно с третей попытки читаются. При чтении такого трека (файл unread.wav записанный на диск в виде файла) CDRWIN-ом с игнорированием ошибок он при чтении дал число ошибок порядка 8000!!!

    Кроме "магического потока байт"

    (A8 FD 01 7E 7F 9F 9F D7 D7 E1 61 88, записанных в сектор по смещению +08) о котором говорилось в статье есть и много других например байты 68 99 51 55 03 80 FE 1F FF B7 FF 36, записанные в сектор по смещению +14H, 00 D7 FF E1 7F F7 9F F9 57 FD 01 81, записанные в сектор по смещению +0.Проверил у себя один фильм, который я как то еле считал с компакт диска на присутствие этих "практически нечитабельных байт" и обнаружил в нем две такие цепочки. Привод читая сектора с такими байтами ведет себя как то

    странно, будто пытается прочесть одно и то же место и не может при этом издает характерные звуки.

    [​IMG] 437114866__UNREAD.ASM
     
  10. Icebp

    Icebp New Member

    Публикаций:
    0
    Регистрация:
    24 дек 2003
    Сообщения:
    39
    Мне стало интересно частое ли это явление когда в файле появляются цепочки байт, записав которые на компакт диск прочитать их обратно будет трудно. Я здесь написал программу, которая ищет эти "плохие блоки" в файле. Пожалуйста протестируйте ей свои фильмы на винте кто может и если кто найдет такие файлы, то сообщите пожалуйста. Название файла надо писать в файле программы (строчка path: ...) потом компилировать. Если будет найден плохой блок, то программа выдаст его местоположение в файле. Ну, не буду дальше объяснять: есть исходник и я думаю что делать всем будет понятно.

    [​IMG] _343613385__TEST_SCR.ASM
     
  11. const

    const New Member

    Публикаций:
    0
    Регистрация:
    8 апр 2004
    Сообщения:
    121
    Рад, что все "срослось"! Было бы шикарно, если бы у вас нашлось время на то, чтобы оформить свои изыскания в статью. Думаю, будет интересно - сами видели, что инфы по скрамблеру мало, а ECMA-130 - штука, конечно, хорошая, но вопросы остаются
     
  12. Icebp

    Icebp New Member

    Публикаций:
    0
    Регистрация:
    24 дек 2003
    Сообщения:
    39
    Если надо написать статью, то я напишу. Правда у меня еще остаются вопросы. Например откуда в файлах возникает последовательность байт, которая скремблируется в байты синхронизации. Я предполагаю что происходит примерно следующее: файл читается с компакт диска. Тут по какой то причине недочитав очередной сектор (например прочитав из него только 8 байт) головка чтения сбивается и попадает на соседнюю дорожку. Там ей попадаются байты синхронизации. Привод их скремблирует, считая байтами данных. В итоге получается "битый" файл. Если теперь этот файл писать на компакт диск, то он не будет читаться потому что в скремблированном потоке будут байты синхронизации, которые "собьют привод с пути истинного". Кому встречались файлы с плохими блоками напишите здесь пожалуйста об этом. Если писать статью, то кому ее высылать и что делать? А то я пока не писал здесь еще ни одну статью.
     
  13. const

    const New Member

    Публикаций:
    0
    Регистрация:
    8 апр 2004
    Сообщения:
    121


    В форуме wasm.site есть подходящая ветка. Там все написано.



    Будет хороший повод поздравить с почином!



    думаю, это - "магическая" последовательность данных (музыка, фильм и т.д.), превращающаяся при определенных условиях (значение, смещение) при скрамблировании в метки синхронизации. Хотя я не спец, конечно. Может, кто-то более корректно ответит.



    Не думаю. Мне кажется, что нормальный привод всегда может понять, что он сбился с трека. Взгляните ECMA-130, там про это должно упоминаться. Тем более попасть точно на начало байтов синхронизации маловероятно.

    Мало того, если все верно помню, то оптическая система "заточена" на то, чтобы пучок был спозицирован на середину трека, и если, возникло отклонение от серединки, то возникает электрический сигнал, заставляющий "подвинуться" головку в нужном направлении. На оптических схемах, которые я видел, это было реализовано двояко:

    1. система фокусируется так, что на четырехсекционный фотодетектор отраженный пучок попадает точно на 2 средние секции. Если же пучок попадает не на середину детектора, то возникает корректирующий электрический сигнал.

    2. перед полупрозрачным зеркалом ставится дифракционная решетка, благодаря которой на диске собирается дифракционная картинка (несколько максимумов, или как их там, уже и не помню!), т.е отражается не не один пучок, а несколько. выбираются 3 (средний и соседние), хитрым образом поляризуются, и в итоге попадают тоже на фотодетектор (как и в первом случае), но более навороченный.

    Если упрощенно, то как-то так. Если нужно, легко поделюсь и знаниями и материалами. Но чуть позже - архив дома, я - в командировке
     
  14. Icebp

    Icebp New Member

    Публикаций:
    0
    Регистрация:
    24 дек 2003
    Сообщения:
    39
    const

    Тогда наверное я поразбираюсь с этим и другими аспектами копакт дисков и как наберется достаточно материала, то напишу статью на тему о компакт дисках. Сейчас у меня пока остаются некоторые вопросы. Например я пока не знаю как выполнять пакетную запись на CD-RW. Как я понял из документа MMC для этой цели вначале надо соответствующим образом отформатировать CD-RW диск. С этим я пока не разобрался. Было бы хорошо если бы вы помогли мне с информацией или поделились своими мыслями по этому поводу. Как то в сети находил русскоязычное описание программирования CD-ROM. Автор его Константин Норватов. Сейчас глянул на ваш ник и подумал не вы ли это? Ну и думаю статью смогу написать недели через две. Может и раньше, может позже, в зависимости от того как пойдут дела.
     
  15. const

    const New Member

    Публикаций:
    0
    Регистрация:
    8 апр 2004
    Сообщения:
    121
    2 Icebp

    вот с записью я не разбирался, едва ли смогу помочь. инфу поищу. могу порекомендовать труды К.Касперски - у него вышла книжка про CD; в сети есть его статьи про низкоуровневое взаимодействие с приводом; kpnc.opennet.ru - там много чего и на разные темы.

    нет, это не я :о)... Похоже, просто тезки