1127 / 261 / 9
Регистрация: 11.06.2010
Сообщений: 1,049
|
|
1 | |
Чтение секторов с CD20.06.2012, 01:32. Показов 6363. Ответов 18
Метки нет Все метки)
(
Как и многие программеры-извращенцы,решил написать свою ОС в учебных целях. Т.к. нынче флоппиков мало, сразу перешел к чтению секторов с 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шный образ прилагаются к сообщению
0
|
20.06.2012, 01:32 | |
20.06.2012, 01:32 | |
Ответы с готовыми решениями:
18
Чтение секторов диска (debug) С++ чтение секторов диска
|
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
|
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 |
Благодарю, попробую)
Но если даже этот способ сработает, то остается проблема, связанная с тем, что в защищенном режиме 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 |
Наконец закончил пробовать
Не работает ![]() Вот, какие комбинации пробовал: 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 |
давно дело было нюансов не помню
но откуда ты взял 42 функцию в nt 13h??? тебе нужны 00 сброс дисковой системы 01 получить состояние последней операции 02 чтение сектора(ов) (es:bx->буфер данных у тебя не выбран) 08 получить параметры дисковода ну хватит пока остальные смотри http://www.codenet.ru/progr/dos/int_0012.php Добавлено через 9 минут читай 01 функцию кстати нашел специальна для жеских 0А читать длинный сектор 14 внутренняя диагностика контроллера 13 диагностика дисковода 10 проверить готовность дисковода Добавлено через 1 минуту как ты отсчитываешь диски 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 |
а какая на СДюке система???
даже лайвСД создает виртуальный диск и создает там систему вообще мои познания про БИОС закончились когда ушел ДОС сейчас конечно добавлены новые фишки но в то время Биос вроде бы систему не искал первый диск мастер на контролере второй - слайв попробуй все таки 81(я так понимаю на виртуалке у тебя два диска Хард и СД) и функцию 0А в моей книге(Прерывания IBM PC) написано что именно она для жестких дисков и может быть биос виртуалки какой нибудь кастрированый не все поддерживает???? найди гденибудь старую машину и изгаляйся над ней
0
|
1127 / 261 / 9
Регистрация: 11.06.2010
Сообщений: 1,049
|
|
09.07.2012, 21:48 [ТС] | 13 |
Вы про какую систему? Если про файловую, то стандартная(UDF??).
Я и тестирую под виртуалкой лишь из-за того, что нету старой машинки, которая никому не была бы нужна) На виртуалке Хард и CD на разных шинах сидят. Оба являются мастерами. Если по логике, то 80h должен быть CD, т.к. он сидит на IDE0 Master. Ошибаюсь?
0
|
1127 / 261 / 9
Регистрация: 11.06.2010
Сообщений: 1,049
|
|
10.07.2012, 00:04 [ТС] | 15 |
Поработаю с ним. Помогли найти ошибку в коде. Теперь варя не выдает ABRT. Но читает нули, так что проблема не решена.
Исходник и образ прилагаются
0
|
![]() 200 / 200 / 78
Регистрация: 10.07.2012
Сообщений: 409
|
|
10.07.2012, 12:46 | 16 |
тоже играюсь время от времени со своей операционкой
![]() если интересно, вот бутлоадер, читающий сектора CD через BIOS: https://github.com/Vort/VortOS... CDBoot.asm с защищённым режимом, правда, посложнее
1
|
![]() 200 / 200 / 78
Регистрация: 10.07.2012
Сообщений: 409
|
|
10.07.2012, 13:05 | 17 |
upd: добавил образ для проверки работоспособности загрузчика
0
|
![]() 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. однако, литература пусть лежит - вдруг кому пригодится]
0
|
1127 / 261 / 9
Регистрация: 11.06.2010
Сообщений: 1,049
|
|
10.07.2012, 14:42 [ТС] | 19 |
Vort_, чтение секторов через ATAPI доведено до ума, я просто не там искал данные(надо было лучше гуглить). Если хотите объединить усилия по написанию ОС, прошу в аську: 625810364
Кста, тему можно закрыть) при возникновении проблем создам новую
0
|
10.07.2012, 14:42 | |
10.07.2012, 14:42 | |
Помогаю со студенческими работами здесь
19
Чтение секторов жёсткого в DOS Чтение секторов жесткого диска Запись в сектора на floppy-диске, и чтение с этих секторов
Исправление секторов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
![]() |
Опции темы | |
|
Новые блоги и статьи
![]() |
||||
Навигация с помощью React Router
hw_wired 13.02.2025
React Router - это наиболее распространенное средство для создания навигации в React-приложениях, без которого сложно представить современную веб-разработку. Когда мы разрабатываем сложное. . .
|
Ошибка "error:0308010C:digital envelope routines::unsupported"
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, который. . .
|