Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Пишемся в boot sector

2.0K
07 февраля 2005 года
HardMix
78 / / 25.06.2003
Народ, есть задача.
Требуется произвести запись в бут сектор дискетки. Без прямого использования int 26h :)
Я так подумал, если можно открыть файл с именем COM1 и писать в порт, то вероятно возможно так же примерно поработать со флоппиком без вызывания прерываний доса/биоса на прямую... Прав ли я?
3.1K
08 февраля 2005 года
V_oron i
108 / / 01.12.2004
Цитата:
Originally posted by HardMix
Народ, есть задача.
Требуется произвести запись в бут сектор дискетки. Без прямого использования int 26h :)
Я так подумал, если можно открыть файл с именем COM1 и писать в порт, то вероятно возможно так же примерно поработать со флоппиком без вызывания прерываний доса/биоса на прямую... Прав ли я?


А почему 26h DOS`а, а не 13h BIOS`а? Можно получить вектор обработчика прерывания и передать на него управление вручную. :)

2.0K
08 февраля 2005 года
HardMix
78 / / 25.06.2003
Цитата:
Originally posted by V_oron i

А почему 26h DOS`а, а не 13h BIOS`а? Можно получить вектор обработчика прерывания и передать на него управление вручную. :)


Дык, [quote]без вызывания прерываний доса/биоса на прямую[/qoute]
Смысл в том, чтобы, например, поработать с флоппиком как с портом, или как с любым файлом. Если такое сделать моно, то соббственно вопрос, какого будет имя файла.
ну, например
open("COM1", O_RDWR);
мы рабоатем с портом. А с флоппиком так моно?

1.7K
08 февраля 2005 года
Envel
206 / / 29.11.2004
Цитата:
Originally posted by HardMix

Дык, [quote]без вызывания прерываний доса/биоса на прямую[/qoute]
Смысл в том, чтобы, например, поработать с флоппиком как с портом, или как с любым файлом. Если такое сделать моно, то соббственно вопрос, какого будет имя файла.
ну, например
open("COM1", O_RDWR);
мы рабоатем с портом. А с флоппиком так моно?


Полная ерунда. Конечно нельзя. Твое open как раз использует прерывания и DOS, и BIOS. Поддержка для COM есть и в DOS, и в BIOS. Чтобы обойти эти прерывания, следует программировать контроллер FDD (FDC) на прямую. Советую книжку Кулакова В. "Программирование дисковых подсистем", там все достаточно подробно описано.
Суть решения такова (упрощенно):
- перенаправить прерывания дос для работы с FDD на свой обработчик, обработчик должен лишь устанавливать переменную-флаг.
- включить мотор и выбрать дисковод для работы, инициализировать FDC в режиме DMA
- послать команду рекалибровки (установим при этом на дорожку 0)
- запрограммировать контроллер DMA на передачу 512 байт данных из памяти
- послать команду записи контроллеру
- выключить мотор, восстановить обработчик прерываний DOS
Процедуры посылки команды также есть в приведенной литературе. Следует проверять состояние прерывания на наличие ошибки, а также проверить наличие дискеты в дисководе, чтобы избежать длительного зависания программы. Писать все лучше на ассемблере.
Во вложении есть все необходимое для чтения/записи секторов с адресацией CHS (цилиндр-головка-сектор, 0-79, 0-1, 1-18), общепринятого для FDD. Процедуры корректно реагируют на ошибки и на отсутствие дискеты в дисководе. Есть также оболочка для просмотра содержимого секторов в ASCII формате, клавишей "w" можно записать в сектор ASCII таблицу (0-255 с повторами). Содержит также процедуры для вывода на экран(оптимизированные). Данный часть кода легко изменить на свой (для записи бут-сектора).

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог