1127 / 261 / 9
Регистрация: 11.06.2010
Сообщений: 1,049
1

Чтение секторов с CD

20.06.2012, 01:32. Показов 6363. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Как и многие программеры-извращенцы,решил написать свою ОС в учебных целях. Т.к. нынче флоппиков мало, сразу перешел к чтению секторов с CD. Так как свой CD-ROM портить не хотелось, решил использовать три разных эмуляции данного девайса(bochs,VMWare,VirtualBox). Инфы на русском оказалось мало, поэтому пришлось писать, изучая исходники ОСей и СИшные примеры из статей в Инете. Написал процедуру посылки пакетной команды и чтения sense data(по сути,я её перевел с СИ на Асм), чего, как думал, мне хватит. Как уже понятно, нифига у меня не прочиталось с виртуального привода(на реальном не стал тестить). Решил попросить у девайса Sense data и вот результаты:

VMWare:
Регистр ошибок: 0x4
Sense key: 0x00
ASC: 0x00
ASCQ: 0x00

BOCHS:
Регистр ошибок: 0x50
Sense key: 0x5
ASC: 0x21
ASCQ: 0x00

VirtualBox:
Регистр ошибок: 0x50
Sense key: 0x5
ASC: 0x21
ASCQ: 0x00


Так и не понял,кто из эмулей прав.

По поводу того, что выдают два последних эмуля - данной ошибки не может быть,т.к.:
1. На ISOшном образе 4096 байт
2. читаю сектор по адресу 2048
3. читаю 1 блок(т.е. 2048 байт)


Итог: нифига не ясно, эмуляторы городят - каждый свою бурду.

Вопрос: кто тупит - я или эмуляторы?

Исходник и ISOшный образ прилагаются к сообщению
Вложения
Тип файла: rar CD-ROM.rar (5.3 Кб, 88 просмотров)
0
20.06.2012, 01:32
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.06.2012, 01:32
Ответы с готовыми решениями:

Чтение секторов диска (debug)
Всем привет, прошу прощения если дублирую. Задача в следующем. Нужно считать 1 сектор ЖД и первый сектор...

С++ чтение секторов диска
как по очереди прочитать все сектора на диске? по идее должна использоваться функция ReadFile(hDevice, buf, 512, &dwBytesRead, NULL);...

Чтение секторов на диске
Подскажите, как в приложении Win32 прочитать на дискете сектор с заданным цилидром головкой и поверхностью. Не через CreateFile! ...

18
1127 / 261 / 9
Регистрация: 11.06.2010
Сообщений: 1,049
20.06.2012, 23:50  [ТС] 2
Первый раз случайно отправил, поэтому посмотрите еще раз, кто уже успел прочитать

Добавлено через 22 часа 7 минут
на другом форуме мне разъяснили один из моих косяков. в поле LBA Должно быть значение 1, а не 2048. Поправил значение. Bochs и VirtualBox перестали ругаться, сектор читается, но как-то криво он читается, так что процедура всё еще не работает. Варя всё также выдает сигнал об Аварийном завершении.
0
1127 / 261 / 9
Регистрация: 11.06.2010
Сообщений: 1,049
03.07.2012, 16:24  [ТС] 3
Прошу закрыть и удалить тему, т.к. уже не надеюсь, что кто-то ответит)
0
Модератор
Эксперт по электронике
8955 / 6721 / 921
Регистрация: 14.02.2011
Сообщений: 23,722
03.07.2012, 17:05 4
Поищи книгу
Крис Касперски. "Техника защиты компакт-дисков от копирования"
Много воды но и умных вещей достаточно
1
1127 / 261 / 9
Регистрация: 11.06.2010
Сообщений: 1,049
05.07.2012, 01:15  [ТС] 5
Спасибо, почитаю)
0
202 / 168 / 11
Регистрация: 30.05.2012
Сообщений: 703
05.07.2012, 07:24 6
Я обычно читаю сектора напрямую, что с HDD, что и с сидирома. Просто указываешь номер его в Int 13h и все, девайс все прочитает.
P.S. Int 13h думает, что СД-РОМ - это жесткий диск.
0
1127 / 261 / 9
Регистрация: 11.06.2010
Сообщений: 1,049
09.07.2012, 15:38  [ТС] 7
Цитата Сообщение от Anonimys Посмотреть сообщение
Я обычно читаю сектора напрямую, что с HDD, что и с сидирома. Просто указываешь номер его в Int 13h и все, девайс все прочитает.
P.S. Int 13h думает, что СД-РОМ - это жесткий диск.
Благодарю, попробую)

Но если даже этот способ сработает, то остается проблема, связанная с тем, что в защищенном режиме Int 13h уже не будет работать так, как нам надо(ошибаюсь?). Остается чтение через порты. Или же нет?
0
Модератор
Эксперт по электронике
8955 / 6721 / 921
Регистрация: 14.02.2011
Сообщений: 23,722
09.07.2012, 16:06 8
У касперски описан способ подключается какой-то драйвер и через SCASи команды ты допускаешься на нижний уровень
Книги нет под рукой не могу точно сказать
единственно что помню там не так все просто
CD был изначально забит под звук
и посему там нет как таковых секторов(это эмуляция)
все идет в измерениях Кадр:Секунда:Минута
0
1127 / 261 / 9
Регистрация: 11.06.2010
Сообщений: 1,049
09.07.2012, 17:45  [ТС] 9
Наконец закончил пробовать

Не работает Тестил только на VMWare

Вот, какие комбинации пробовал:

AH=42h
DL=80h
Результат: null

AH=42h
DL содержит то, что в него положила BIOS
Результат: не поддерживается

AH=02h
DL=80h
AL=01h ;число секторов
CH=00h ;дорожка
CL=01h ;Сектор
DH=01h ;головка(00h также пробовал)
Результат: null

AH=02h
DL заполнила BIOS
AL=01h ;число секторов
CH=00h ;дорожка
CL=01h ;Сектор
DH=01h ;головка(00h также пробовал)
Результат: CF поднят, AH=00h, т.е. ошибка, но почему-то без кода.

Какие еще есть предложения?

MSF попробую позже. Пока хочу испробовать все варианты, связанные с int 13h

P.S. Почему у других всё почти с первого раза выходит рабочим, а мне уже гугл по ночам снится и всё равно нифига не робит?
0
Модератор
Эксперт по электронике
8955 / 6721 / 921
Регистрация: 14.02.2011
Сообщений: 23,722
09.07.2012, 19:10 10
Цитата Сообщение от sh2ezo Посмотреть сообщение
CH=00h ;дорожка
давно дело было нюансов не помню
но откуда ты взял 42 функцию в nt 13h???
Цитата Сообщение от sh2ezo Посмотреть сообщение
AH=42h
тебе нужны
00 сброс дисковой системы
01 получить состояние последней операции
02 чтение сектора(ов) (es:bx->буфер данных у тебя не выбран)
08 получить параметры дисковода
ну хватит пока
остальные смотри
http://www.codenet.ru/progr/dos/int_0012.php

Добавлено через 9 минут
Цитата Сообщение от sh2ezo Посмотреть сообщение
Результат: CF поднят, AH=00h, т.е. ошибка, но почему-то без кода.
читай 01 функцию
кстати нашел специальна для жеских
0А читать длинный сектор
14 внутренняя диагностика контроллера
13 диагностика дисковода
10 проверить готовность дисковода

Добавлено через 1 минуту
Цитата Сообщение от sh2ezo Посмотреть сообщение
DL=80h
как ты отсчитываешь диски
80 это первый (скорее всего С)
второй -81
третий 82 (хотя третий может и не поддерживать в моей старой книге не слова про третий)
.............

Добавлено через 4 минуты
коды ошибок
Кому надо коды ошибок?
00H последняя операция выполнена без ошибок
01H плохая команда: неверный запрос к контроллеру
02H плохая адресная марка
03H защита записи: попытка записи на защищенную дискету
04H ID сектора запорчен или не найден.
05H ошибка сброса -- _AT_
08H сбой DMA
09H перекрытие DMA: попытка записи через 64K-байтовую границу.
0bH встретился флаг плохой дорожки -- _AT_
10H сбой CRC: несовпадение контрольной суммы данных.
11H данные исправлены; исправимая ошибка; исправлено алгоритмом ECC -- _AT_
20H сбой контроллера
40H неудачный поиск. Запрошенная дорожка не найдена
80H Таймаут. Устройство не ответило
0bbH неопределенная ошибка -- _AT_
0ffH сбой операции опроса (sense) -- _AT_
0
1127 / 261 / 9
Регистрация: 11.06.2010
Сообщений: 1,049
09.07.2012, 19:53  [ТС] 11
ValeryS, AH=4xh - это функции BIOS для работы с дисками, у которых объем более 8гб. Кстати, в какой-то теме на wasm'е читал, что, как раз, эти функции, по слухам, должны работать с сидюками. Но не работают(сам проверил).

буфер в es:bx и прочие нюансы я для функции указывал, просто посчитал, что нет необходимости это указывать в сообщении,т.к. роли не играет, по какому смещению решу данные класть(а решил класть я их сразу за первичным загрузчиком).

Почему 80h? Потому что(прочитал на wasm'е) 80h - это тот диск, на котором BIOS нашла систему(будь то флеха или хард). Видать, на сидюки(никаких эмуляций) правило не распространяется.

Также на упомянутом выше ресурсе я узнал, что пока никто(из тех, кого я нашел) не смог заставить работать загрузчик с ATAPI(проклятие ATAPI ), зато все загрузчики прекрасно работают в режиме эмуляции.

С режимом эмуляции я не пробовал работать, так что предстоит узнать про него больше, чем само название. Если у кого есть, что сказать по поводу него - не скрывайте свои познания, плз)
0
Модератор
Эксперт по электронике
8955 / 6721 / 921
Регистрация: 14.02.2011
Сообщений: 23,722
09.07.2012, 21:38 12
Цитата Сообщение от sh2ezo Посмотреть сообщение
80h - это тот диск, на котором BIOS нашла систему(будь то флеха или хард). Видать, на сидюки(никаких эмуляций) правило не распространяется.
а какая на СДюке система???
даже лайвСД создает виртуальный диск и создает там систему

вообще мои познания про БИОС закончились когда ушел ДОС
сейчас конечно добавлены новые фишки
но в то время Биос вроде бы систему не искал
первый диск мастер на контролере
второй - слайв
попробуй все таки 81(я так понимаю на виртуалке у тебя два диска Хард и СД) и функцию 0А
в моей книге(Прерывания IBM PC) написано что именно она для жестких дисков
и может быть биос виртуалки какой нибудь кастрированый не все поддерживает????
найди гденибудь старую машину и изгаляйся над ней
0
1127 / 261 / 9
Регистрация: 11.06.2010
Сообщений: 1,049
09.07.2012, 21:48  [ТС] 13
Цитата Сообщение от ValeryS Посмотреть сообщение
а какая на СДюке система???
даже лайвСД создает виртуальный диск и создает там систему

вообще мои познания про БИОС закончились когда ушел ДОС
сейчас конечно добавлены новые фишки
но в то время Биос вроде бы систему не искал
первый диск мастер на контролере
второй - слайв
попробуй все таки 81(я так понимаю на виртуалке у тебя два диска Хард и СД) и функцию 0А
в моей книге(Прерывания IBM PC) написано что именно она для жестких дисков
и может быть биос виртуалки какой нибудь кастрированый не все поддерживает????
найди гденибудь старую машину и изгаляйся над ней
Вы про какую систему? Если про файловую, то стандартная(UDF??).

Я и тестирую под виртуалкой лишь из-за того, что нету старой машинки, которая никому не была бы нужна)

На виртуалке Хард и CD на разных шинах сидят. Оба являются мастерами. Если по логике, то 80h должен быть CD, т.к. он сидит на IDE0 Master. Ошибаюсь?
0
Модератор
Эксперт по электронике
8955 / 6721 / 921
Регистрация: 14.02.2011
Сообщений: 23,722
09.07.2012, 22:49 14
Цитата Сообщение от sh2ezo Посмотреть сообщение
Я и тестирую под виртуалкой лишь из-за того, что нету старой машинки, которая никому не была бы нужна)

На виртуалке Хард и CD на разных шинах сидят. Оба являются мастерами. Если по логике, то 80h должен быть CD, т.к. он сидит на IDE0 Master. Ошибаюсь?
а бог его знает на низкий уровень виртуалки не лазил

Добавлено через 58 минут
нашел в книге
Единственный легальный способ "дотянуться" до привода CD-ROM'а под Windows 9x –— это воспользоваться 16-разрядным шлюзом, напрямую обращаясь к MS-DOS драйверу MSCDEX,
найди этот MSCDEX, дизасемблируй и поймешь как СиДюк работает с железом
1
1127 / 261 / 9
Регистрация: 11.06.2010
Сообщений: 1,049
10.07.2012, 00:04  [ТС] 15
Цитата Сообщение от ValeryS Посмотреть сообщение
а бог его знает на низкий уровень виртуалки не лазил

Добавлено через 58 минут
нашел в книге

найди этот MSCDEX, дизасемблируй и поймешь как СиДюк работает с железом
Поработаю с ним. Помогли найти ошибку в коде. Теперь варя не выдает ABRT. Но читает нули, так что проблема не решена.

Исходник и образ прилагаются
Вложения
Тип файла: zip cd_rom1.zip (6.0 Кб, 40 просмотров)
0
 Аватар для Vort_
200 / 200 / 78
Регистрация: 10.07.2012
Сообщений: 409
10.07.2012, 12:46 16
тоже играюсь время от времени со своей операционкой
если интересно, вот бутлоадер, читающий сектора CD через BIOS:
https://github.com/Vort/VortOS... CDBoot.asm

с защищённым режимом, правда, посложнее
1
 Аватар для Vort_
200 / 200 / 78
Регистрация: 10.07.2012
Сообщений: 409
10.07.2012, 13:05 17
upd: добавил образ для проверки работоспособности загрузчика
Вложения
Тип файла: rar os.iso.rar (62.3 Кб, 16 просмотров)
0
 Аватар для Vort_
200 / 200 / 78
Регистрация: 10.07.2012
Сообщений: 409
10.07.2012, 14:39 18
касаемо защищённого режима и управления через порты:

подозреваю что ATA команда 28h - это не то что надо
CD-ROM`ы управляются через расширение ATA - ATAPI
а точнее, через команду 0A0h - PACKET (в частности, чтение - подкоманда 0BEh - READ CD)

литературу по теме прикрепляю. (команда READ CD - файл mmc2r11a.pdf, стр. 173 [195])
(также может пригодиться статья http://wiki.osdev.org/ATAPI)

[upd. сорри, плохо читал код - там уже есть PACKET. однако, литература пусть лежит - вдруг кому пригодится]
Вложения
Тип файла: rar atapi_docs.rar (8.39 Мб, 33 просмотров)
0
1127 / 261 / 9
Регистрация: 11.06.2010
Сообщений: 1,049
10.07.2012, 14:42  [ТС] 19
Vort_, чтение секторов через ATAPI доведено до ума, я просто не там искал данные(надо было лучше гуглить). Если хотите объединить усилия по написанию ОС, прошу в аську: 625810364

Кста, тему можно закрыть) при возникновении проблем создам новую
0
10.07.2012, 14:42
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.07.2012, 14:42
Помогаю со студенческими работами здесь

Чтение секторов жёсткого в DOS
Добрый вечер! Проблема заключается именно в том, что программа должна работать под DOS, и ей не важно что есть на диске и какая там...

Чтение секторов жесткого диска
пишу драйвер, считывающий секторы жесткого диска он сохраняет в файл результат проделанной работы. только вот проблема, как узнать то...

Запись в сектора на floppy-диске, и чтение с этих секторов
Здраствуйте. Меня интерисует Функция на Си чтоби записывать данные (строку, или часть отдельного файла) в отдельный сектор на флопи...

Наложение секторов
В общем стандартная проблема: Пытался обрезать жесткий диск на пару гигов, и в итоге Win7 вообще теперь не видит весь жесткий :( ...

Исправление секторов
Здравствуйте. Такая проблема.Проверял victoria жесткий диск через windows обнаружил много секторов поврежденных, и проверил Hddscan(ниже...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Опции темы

Новые блоги и статьи
Навигация с помощью React Router
hw_wired 13.02.2025
React Router - это наиболее распространенное средство для создания навигации в React-приложениях, без которого сложно представить современную веб-разработку. Когда мы разрабатываем сложное. . .
Ошибка "error:0308010C­:digi­tal envelope routines::unsup­ported"
hw_wired 13.02.2025
Если вы сталкиваетесь с ошибкой "error:0308010C:digital envelope routines::unsupported" при разработке Node. js приложений, то наверняка уже успели поломать голову над её решением. Эта коварная ошибка. . .
Подключение к контейнеру Docker и работа с его содержимым
hw_wired 13.02.2025
В мире современной разработки контейнеры Docker изменили подход к созданию, развертыванию и масштабированию приложений. Эта технология позволяет упаковать приложение со всеми его зависимостями в. . .
Отличия интерфейсов и типов в TypeScript
hw_wired 13.02.2025
TypeScript - мощное средство для создания качественного и поддерживаемого кода, который расширяет возможности JavaScript, добавляя систему статической типизации. В отличие от динамической типизации. . .
Async/await в циклах JavaScript
hw_wired 13.02.2025
Современная веб-разработка немыслима без асинхронного программирования. Когда приложение выполняет длительные операции - загрузку данных с сервера, чтение файлов или обработку медиа-контента, важно. . .
Git не работает на MacOS после апдейта
hw_wired 13.02.2025
После очередного обновления MacOS многие разработчики сталкиваются с неприятным сюрпризом - Git перестает работать и выдает ошибку "xcrun: error: invalid active developer path". Эта проблема особенно. . .
Git отказывается объединять несвязанные истории
hw_wired 13.02.2025
Git работает безупречно, пока мы не сталкиваемся с особыми ситуациями вроде объединения веток с разными корнями истории. В таких случаях система контроля версий может преподнести неприятный сюрприз в. . .
Проверка email с помощью JavaScript
hw_wired 13.02.2025
Email-адреса имеют довольно запутанную спецификацию, которая допускает множество неочевидных вариантов написания. Например, знали ли вы, что адрес вида "name+tag@domain. com" или даже. . .
Замена всех вхождений строки с помощью JavaScript
hw_wired 13.02.2025
JavaScript предлагает несколько способов для выполнения операций замены в строках, каждый из которых имеет свои особенности и область применения. От простейшей замены первого найденного вхождения до. . .
Отличия между ~ и ^ в package.json. Версии в Node.js
hw_wired 13.02.2025
Управление зависимостями в Node. js проектах - это настоящее исскуство, требующее глубокого понимания механизмов версионирования пакетов. В центре этого процесса находится файл package. json, который. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru