Помогите новичку! Хочу считать данные с PCMCIA карточки собственного производства. Подсоединил карточку к ПК (через адаптер PCI/PCMCIA). Windows определил её, выделил под неё ресурсы (в том числе порты ввода/вывода) и естественно требует драйвера. Могу я, без написания драйвера, обратится к карточке по указанным windows адресам портов ввода/вывода (с помощью, например, ассемблерного кода).
Здравствуйте, Аноним, Вы писали:
А>Помогите новичку! Хочу считать данные с PCMCIA карточки собственного производства. Подсоединил карточку к ПК (через адаптер PCI/PCMCIA). Windows определил её, выделил под неё ресурсы (в том числе порты ввода/вывода) и естественно требует драйвера. Могу я, без написания драйвера, обратится к карточке по указанным windows адресам портов ввода/вывода (с помощью, например, ассемблерного кода).
можете, но для начала нужно снять привелегию с интсрукций ввода/вывода (in/out ). Как — не документированно, но известно . Но при этом все равно не получится установить обработчик прерывания, не получится обращаться у памяти устройства ( регистрам ). Поэтому лучше отбросить сомнения и пуститься во все тяжкие — писать драйвер.
Здравствуйте, TarasCo, Вы писали:
TC>Здравствуйте, Аноним, Вы писали:
А>>Помогите новичку! Хочу считать данные с PCMCIA карточки собственного производства. Подсоединил карточку к ПК (через адаптер PCI/PCMCIA). Windows определил её, выделил под неё ресурсы (в том числе порты ввода/вывода) и естественно требует драйвера. Могу я, без написания драйвера, обратится к карточке по указанным windows адресам портов ввода/вывода (с помощью, например, ассемблерного кода).
TC>можете, но для начала нужно снять привелегию с интсрукций ввода/вывода (in/out ). Как — не документированно, но известно . Но при этом все равно не получится установить обработчик прерывания, не получится обращаться у памяти устройства ( регистрам ). Поэтому лучше отбросить сомнения и пуститься во все тяжкие — писать драйвер.
Но моё устройство не использует прерывания (ровно как и DMA) и у него нет как таковой области памяти, только четыре регистра ввода, адреса которых мне выделил Windows. И всё что мне нужно — это считывать и записывать байты с этих портов. И что же всё равно без драйвера не обойтись?
Очень не хочется писать драйвер, так как никогда этого не делал. Может подскажите, как снять эту привилегию с регистров ввода/вывода и зачем это делать?
Здравствуйте, eesh, Вы писали:
E>Может подскажите, как снять эту привилегию с регистров ввода/вывода и зачем это делать?
Можно использовать один из распространённых драйверов (загружаются программно, затем из пользовательского режима можно напрямую обращаться к портам), например, giveio.sys. Их несколько разных, но делают одно и то же. В сети без труда найдёте.
Зачем? Да потому что в пользовательском режиме инструкции in, out и некоторые другие относятся к привелегированным и не допускаются к выполнению. И если загрузчик встретит их в приложении, будет сгенерировано исключение со всеми вытекающими. Вышеупомянутый драйвер как раз и даёт приложению полномочия выполнять подобные инструкции.
Здравствуйте, MNZ, Вы писали:
MNZ>Здравствуйте, eesh, Вы писали:
E>>Может подскажите, как снять эту привилегию с регистров ввода/вывода и зачем это делать?
MNZ>Можно использовать один из распространённых драйверов (загружаются программно, затем из пользовательского режима можно напрямую обращаться к портам), например, giveio.sys. Их несколько разных, но делают одно и то же. В сети без труда найдёте.
MNZ>Зачем? Да потому что в пользовательском режиме инструкции in, out и некоторые другие относятся к привелегированным и не допускаются к выполнению. И если загрузчик встретит их в приложении, будет сгенерировано исключение со всеми вытекающими. Вышеупомянутый драйвер как раз и даёт приложению полномочия выполнять подобные инструкции.
Спасибо большое теперь с Windows всё понятно!
Но, простите за назойливость (хочется до конца разобраться), а если запускать из-под DOS, то результат будет тот же? Или адреса портов, выделенные Windows, уже будут не действительны в DOS? Тогда как можно узнать DOSовские адреса ? При этом хочу заметить, что в CIS самой карточки вроде как указываются адреса ввода-вывода, которые ей нужны? Эта информация учитывается в Windows и DOS?
Здравствуйте, eesh, Вы писали:
E>Спасибо большое теперь с Windows всё понятно! E>Но, простите за назойливость (хочется до конца разобраться), а если запускать из-под DOS, то результат будет тот же? Или адреса портов, выделенные Windows, уже будут не действительны в DOS? Тогда как можно узнать DOSовские адреса ? При этом хочу заметить, что в CIS самой карточки вроде как указываются адреса ввода-вывода, которые ей нужны? Эта информация учитывается в Windows и DOS?
В DOS приложение может делать всё что ему угодно, т.к. это однозадачная ОС и все ресурсы машины отдаются активному процессу. Про адреса в этом случае ничего не могу сказать. Здесь нужно своё железо знать, куда оно подключается и где это место в компьютере. Если речь идёт о Windows Virtual DOS Machine (VDM), то лучше не надо. Проще разобраться с моделью драйвера (уже готовые шаблоны имеются, кстати), чем потом глюки отлавливать. Ну или расчитывать на Win9x, там как в DOS к портам обращаться можно.