Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Чтение дорожки


Автор: Inquiring 9.11.2004, 14:27
Приветствую!

Задача: прочитать дорожку как сектор длиной в 9216 байт. При этом дискета отформатирована
так, что сектора имеют длину 512.
Понятно, что сектор не может иметь размера 9216. Просто нужно прочитать дорожку в некий буфер 9216. Таким образом мы будем иметь в этом буфере все содержимое секторов и межсекторных промежутков.
Вопрос: возможно ли это осуществить используя int 13h или же нужно напрямую через порты?

Заранее благодарна!

Автор: shedon 9.11.2004, 16:38
Я уже говорил http://forum.vingrad.ru/index.php?showtopic=33650, что виндус не позволит работать с прерываениями и с портами ввода/вывода напрямую, а почему ты не хочешь открыть дискету через CreateFile("\\\\.\\A", ....); И прочитать через ReadFile. ?

Автор: Inquiring 9.11.2004, 23:46
Я уже в досе работаю.
У меня же задача: строго через 13h.
А возможно задачу реализовать, что выше описана?

Автор: p0s0l 10.11.2004, 00:19
Цитата(Inquiring @ 9.11.2004, 14:27)
межсекторных промежутков
Через CreateFile/ReadFile под виндой это не считать... Как и через Int13h (если только там нет недокументированных функций)... Так можно прочитать лишь само содержимое секторов...
По всей видимости, придётся через порты...

Автор: shedon 10.11.2004, 00:22
Функция 02H прерывания 13h, читает сектор
вход: DL = номер диска (0=диск A...; 80H=тв.диск 0; 81H=тв.диск 1)
DH = номер головки чтения/записи
CH = номер дорожки (цилиндра)(0-n) =¬
CL = номер сектора (1-n) ===========¦== См. замечание ниже.
AL = число секторов (в сумме не больше чем один цилиндр)
ES:BX => адрес буфера вызывающей программы
0:0078 => таблица параметров дискеты (для гибких дисков)
0:0104 => таблица параметров тв.диска (для твердых дисков)
выход: Carry-флаг=1 при ошибке и код ошибки диска в AH.
ES:BX буфер содержит данные, прочитанные с диска
замечание: на сектор и цилиндр отводится соответственно 6 и 10 бит:
1 1 1 1 1 1
+5-4-3-2-1-0-9-8-7-6-5-4-3-2-1-0+
CX: ¦c c c c c c c c C c S s s s s s¦
+-+-+-+-+-+-+-+-¦-+-+-+-+-+-+-+-+
+======> исп. как старшие биты номера цилиндра

и функция 0aH - длинное чтение, 512 байт + 4-байтоый ECC (код коррекции ошибок).
вход: (как для подф. 02H)
выход: Carry-флаг=1 при ошибке и код ошибки диска в AH.
ES:BX => в буфере (данные сектора + 4 байта) * число секторов (из AL)

Автор: p0s0l 10.11.2004, 00:26
shedon, а так считается служебная инфа ?...
Хм... не знал... надо будет потом попробовать...

Автор: shedon 10.11.2004, 00:46
Цитата(p0s0l @ 9.11.2004, 21:26)
а так считается служебная инфа ?...

а х.з., я честно сказать не пробывал smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)