| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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 | ||
По всей видимости, придётся через порты... |
| Автор: 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 | ||
а х.з., я честно сказать не пробывал |