45 / 44 / 1
Регистрация: 11.07.2012
Сообщений: 1,024
|
||||||
1 | ||||||
Как написать самый простой драйвер клавиатуры?29.10.2016, 11:32. Показов 8369. Ответов 26
Метки нет (Все метки)
Хочу написать самый простой драйвер клавиатуры, по аппаратному прерыванию, что бы например при нажатии любой произвольной кнопки на экран выходили 3 символа 1,0 и пробел. При повторном нажатии кнопки снова это же самое и таким образом после нескольких нажатий кнопки на экране появились бы следующие символы 10 10 10 10 10 10 .... и тд... Больше компьютер не должен ничего делать просто тупо на каждое нажатие выдает 1,0 и пробел и все. Вот написал код, но он сперва сам выдает 1,0 пробел (без нажатия какой либо кнопки), затем реагирует только на одно нажатие клавиши и потом уже ни на чего не реагирует, в чем ошибка можете объяснить или исправить код?
0
|
29.10.2016, 11:32 | |
Ответы с готовыми решениями:
26
Как в visual studio 15 написать самый простой код на LUA Захотел написать самый простой калькулятор Написать клиент-сервер (самый простой) Написать самый простой мини-чат |
45 / 44 / 1
Регистрация: 11.07.2012
Сообщений: 1,024
|
|
29.10.2016, 12:58 [ТС] | 2 |
Мне не нужно возвращать старый системный адрес драйвера клавиатуры, на этом компе я постоянно буду нажимать одну единственную кнопку (любую) и ждать от нее на экране 3 символа 1,0, пробел, и выключать компьютер этот никогда не буду, эта программа с прерыванием на нем будет всегда (но не эта именно, эта не работает как надо, а исправленная)
Добавлено через 21 минуту Сама по себе задача бессмысленная, оно и понятно, я сам для себя ее создал и пытаюсь сделать, с одной единственной целью - убедиться, что код с аппаратным прерыванием рабочий, а не просто код ради кода. Добавлено через 3 минуты В другой теме уважаемы мастера ассемблера давали код для аппаратного прерывания сом порта, с подменой вектора прерывания 0Сh , но его не получилось проверить на практике, и я даже не понял как его проверить? Поэтому и решил поставить себе самую простую задачу на нажатию одной клавиши клавиатуры.
0
|
1624 / 806 / 146
Регистрация: 13.06.2015
Сообщений: 3,266
|
|||||||||||
30.10.2016, 01:31 | 4 | ||||||||||
Вот вам пожалуйста самое аппаратное-преаппаратное прерывание.
И переходите уже на FASM, а то долго мучиться будете. Добавлено через 11 минут Или вот через DOS ещё веселее.
2
|
1624 / 806 / 146
Регистрация: 13.06.2015
Сообщений: 3,266
|
||||||
30.10.2016, 03:47 | 6 | |||||
Моргание выключателем чтоль?
1
|
Эксперт Hardware
|
|
30.10.2016, 04:02 | 7 |
...кто опохмеляется, кто кросс бежит с утра
..кому чего здесь нравится, весёлая Москва Добавлено через 1 минуту ...нашёл куда отправить... Чипсет тебя не поймёт Добавлено через 2 минуты Kukuxumushu, лучше скажи, как прочитать SMBus
0
|
1624 / 806 / 146
Регистрация: 13.06.2015
Сообщений: 3,266
|
|
30.10.2016, 04:09 | 8 |
0
|
1624 / 806 / 146
Регистрация: 13.06.2015
Сообщений: 3,266
|
|
30.10.2016, 04:58 | 10 |
R71MT, так эт самое, вот у него и окошечко памяти есть, и порты, и даже IRQ на нём висит. Осталось только мануал на это всё хозяйство найти.
0
|
1624 / 806 / 146
Регистрация: 13.06.2015
Сообщений: 3,266
|
|
30.10.2016, 05:48 | 12 |
R71MT, понятия не имею)
0
|
Эксперт Hardware
|
|
30.10.2016, 05:54 | 13 |
Седьмой, твоё нажатие клавиши, не даёт спокойно жить APIC. Перехвати его, чтоб клава вообще ни на что не реагировала. Поставь терминал, и чтоб он тебе выдавал по-каждоому нажатию клавиши по штуке баксов.
Клава самый основной ингредиент компа. IRQ1 о многом говорит
0
|
45 / 44 / 1
Регистрация: 11.07.2012
Сообщений: 1,024
|
||||||
30.10.2016, 06:09 [ТС] | 14 | |||||
Не понял, что Вы имели в виду, вы мне уже здорово помогли в разных темах по ассемблеру, с моими тупыми вопросами, но вот этот ответ я не понял. Я себя не считаю Д. хотя смотря как на это посмотреть (это вопрос философский и к теме форума не относится), но что делать с Клавой в данном случае не знаю. И зачем Вы к Кукухимусу придираетесь? человек первый откликнулся на вопрос темы, совершил поступок достойный уважения неуча в ассемблере, а Вы его пытаетесь упрекнуть в неверности кода, хотя осталось только проверить рабочий этот код или нет и все станет ясно.
Добавлено через 11 минут эта команда как я понял, как раз наоборот отключает драйвер и выводит код в дос
0
|
1624 / 806 / 146
Регистрация: 13.06.2015
Сообщений: 3,266
|
|
30.10.2016, 06:17 | 16 |
Ваша проблема в том, что вы свои задачи формулируете очень издалека и маленькими кусочками, поэтому вам тут все уже замучились отвечать. Что вы представляете под "драйвером"? Вот у вас DOS работает, и вам какой-то хоткей нужен, по которому всплывает ваша прога, что-то делает, передаёт управление обратно в DOS? Это делает так. А если только ваша программа в монопольном режиме запущена - ничего выдумывать не надо, просто дописывайте код в обработчик, который выше сделали.
1
|
Эксперт Hardware
|
|
30.10.2016, 06:19 | 17 |
После перезагрузки нет никаких драйверов... Драйвер - это ты! Возьми управление и всё. Если не даш доське загрузится, то ты хозяит. Кроме аппаратных вещей можешь управлять системой по-своему желанию.
1
|
45 / 44 / 1
Регистрация: 11.07.2012
Сообщений: 1,024
|
|
30.10.2016, 08:10 [ТС] | 18 |
я уже не формулирую задачи просто для себя разбираюсь, пытаюсь понять как работает ассемблер, вдруг еще пригодится... тут же студенты наверно в основном обращаются, они на лету схватывают и сдают преподам, а мне просто интересно разобраться как это все работает, может зря вас от дел отвлекаю... ну не отвечайте , мне на этом форуме и так очень много мне помогли, может быть кто нибудь другой ответит, у кого есть время и желание...
хорошо так и делаю... спасибо.
Добавлено через 10 минут перезагрузки чего? Если операционной системы, то понятно что драйверов нет, ну или есть те которые резидентно загружаются вместе с операционной системой. То что моего драйвера нет это понятно. Но мне то нужно что бы запустив драйвер он был постоянно (резидентно), ни какие программы загружаться на комп не будут, просто должен быть компьютер на нем запущен драйвер одной единственной клавиши, которую периодически нажимают и на экране появляется код 1,0, пробел. я не хочу ничем управлять, только одной этой кнопкой. Ну если вам конкретика нужна, то представьте что комп управляет передатчиком высокой мощности и в космос уходит одна единственная фраза "Здравствуйте жители внеземного разума", а кнопку эту нажимает корова, у нее всего одна кнопка и она ее нажимает когда захочет, а программа (драйвер ) должна ожидать нажатие этой кнопки постоянно, и комп никогда не выключается и не перезагружается. Вот так наверно понятнее стала задача?
0
|
Модератор
|
|
30.10.2016, 14:00 | 19 |
Если я не ошибаюсь, то работа с клавиатурой - двухуровневая:
1. По аппаратному прерыванию int09h - работа с портами 2. По программному прерыванию int16h. По аппаратному цепляется русификатор (драйвер) клавиатуры, который обрабатывает коды от нажатия клавиш (они разной длины для разных клавиш) и помещает двубайтный Scan+ASCII коды в выбранной кодировке (например, CP866) в буфер клавиатуры. По программному - это просто пользовательский интерфейс чтения из буфера клавиатуры. Вы можете перехватить программное прерывание, и в ответ выдавать свои три символа, вместо одного введённого. Причём реальное чтение из буфера можете осуществлять из своего обработчика, вызывая исходный обработчик.
1
|
45 / 44 / 1
Регистрация: 11.07.2012
Сообщений: 1,024
|
||||||||||||||||
31.10.2016, 15:03 [ТС] | 20 | |||||||||||||||
да мне бы хотелось аппаратное прерывание, оно же быстрее должно срабатывать наверно? А без прицепления русификатора тоже можно (чисто по кнопке) или обязательно с русификатором?
Добавлено через 5 минут в моем коде нет вот этого простоя, этот код нужен, так получается? Т.е механизм драйвера такой: происходит подмена вектора прерывания и комп зависает (ждет это прерывание)? Но ведь такой метки нет , на которую указывает ссылка безусловного перехода @b?
Добавлено через 4 минуты Мне казалось что аппаратный драйвер это некая резидентная программа, которая постоянно находится в оперативной памяти компьютера, и которая при первом запуске подменяет вектор прерывания и код вызываемой программы постоянно находится в оперативной памяти. И по нажатию "нужной" кнопки процессор сразу обращается к этому коду? А так получается что процессор подвисает? Добавлено через 21 минуту Чем fasm лучше Masm он не правильно компилирует код? С ошибками, вы имеете в виду, и поэтому может не пойти? Добавлено через 1 час 31 минуту
Добавлено через 5 минут какое отношение APIS имеет к старому компу архитектуры 80386 на котором я провожу испытание Досовой программы? PS. APIC использовался в многоядерных/многопроцессорных системах, начиная с Intel Pentium (ядро P54). из вики. Добавлено через 2 минуты ну может так и будет, во первых бакс скоро рухнет, а во вторых модуль моей программы тоже будет сколько то стоить может быть как раз бакс, пока не знаю... Добавлено через 3 минуты да именно по этому я и пишу для нее код, пока мысль у вас верная... Но программа все равно не работает, в чем причина, я думаю надо идти в сторону резидентных программ под Досом да? Поскольку она выполняется один раз и Дос пишет, все отлично я свою задачу выполнил, а на самом деле он ошибся, не такая была у него задача... Добавлено через 4 минуты еще наверно имеет смысл в отладчике посмотреть адреса векторов аппаратных прерываний и посмотреть какой адрес стоит в смещении 4* 9 =36 , там должен стоять адрес строки 15 кода программы у текущего сегмента, да? Добавлено через 5 часов 36 минут Вот нашел совет Завершение программы прерыванием 27H оставляет ее резидентной в памяти. может это мне поможет? Не могу пока найти чем можно посмотреть область памяти MCB до загрузки своей программы и после, что бы убедиться что вектор прерывания изменен и находится в нужном состоянии? Добавлено через 3 минуты А в каком месте кода программы надо ставить
Добавлено через 8 минут Вот еще как можно, но тоже не работает Оставить программу резидентной можно с помощью функции 31H прерывания 21H
0
|
31.10.2016, 15:03 | |
31.10.2016, 15:03 | |
Помогаю со студенческими работами здесь
20
DirectX - написать самый простой воксельный движок Самый самый самый простой пример рекурсии Написать самый простой антивирусный сканер, который сможет найти вирус, записанный в автозагрузку Помогите написать драйвер клавиатуры! Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |