Bioskey, _bios_keybrd работа с клавиатурой

Содержание

Опция BIOS — Power On By Keyboard — включение компьютера с нажатия клавиши клавиатуры

Об данной опции более подробно рассказано в разделе посвященной опциям БИОС клавиатуры и мышей — здесь.

Программа Setup BIOS фирмы AWARD Software International Inc на системных платах GIGABYTE TECHNOLOGY

Название данной опции у данного производителя в данной версии BIOS:

Power On By Keyboard значение по умолчанию [Disabled]

Power On By Keyboard [Disabled]

Включение компьютера от клавиатуры — отключено.

Enter from 1 to 5 characters to set the keyboard power on password

Введите от 1 до 5 символов, чтобы установить пароль который нужно будет вводить при загрузке компьютера.

По нажатию назначенных здесь комбинации клавиш клавиатуры.

If your keyboard have power key button, you can press the key to power on.

Если на клавиатуре имеется специальная клавиша включения, вы можете нажать эту кнопку, чтобы включить питание компьютера.

В БИОСе не работает клавиатура: причины неисправностей и их устранение

Проблему того, что в БИОСе не работает клавиатура, пользователи обычно замечают при переустановке операционной системы, когда требуется выставить приоритет загрузки, или в случае изменения дополнительных настроек первичной системы ввода/вывода. В чем причина такого явления и как с этим бороться, сейчас и будет рассмотрено. Сразу хочется отметить, что не все так плохо. Есть несколько основных методов, позволяющих решить проблему течение нескольких минут. Рассмотрим их.

В БИОСе не работает клавиатура: причины

Многие пользователи обращают внимание на то, что в нормально функционирующей операционной системе такие ситуации хоть и наблюдаются, но весьма нечасто. Большей частью это касается как раз BIOS.

Среди основных причин появления такой ситуации большинство специалистов выделяют следующие:

  • физические повреждения штекеров и проводов;
  • неправильное подключение;
  • старый компьютер без поддержки подключаемого устройства;
  • некорректная настройка параметров BIOS.

Проблемы, связанные с физическими дефектами или повреждениями, сейчас рассматриваться не будут. В крайнем случае, если в БИОСе не работает клавиатура, проверить работоспособность устройства внешнего типа стандарта PS/2 или USB можно совершенно просто, подключив его к другому компьютерному терминалу. Если на нем все будет в порядке, причину нужно искать в своем системном блоке (точнее, в гнездах и портах, к которым производится подключение).

Что делать в первую очередь?

Что касается устранения неисправности, в первую очередь следует проверить правильность подключения.

В случае с USB-клавиатурами произвести соединение через соответствующий порт неправильно достаточно сложно (хотя иногда речь может идти о том, что клавиатура относится к стандарту USB 3.0, а подключается в порт USB 2.0).

Но чаще всего появление такой ситуации больше характерно для клавиатур старого образца стандарта PS/2. Производить подключение нужно с учетом того, что цвета штекера клавиатуры и соответствующего гнезда должны совпадать (они имеют фиолетовый цвет). Впрочем, и в этом случае ошибиться достаточно сложно.

Как зайти в БИОС (не работает клавиатура)?

При попытке настройки параметров первичной системы, что очень часто может быть причиной сбоев, попутно возникает вопрос доступа к ним, ведь для вызова БИОСа или перемещения по разделам настройки без клавиатуры в большинстве случаев не обойтись никак.

Но решение есть. Например, имеем ситуацию, когда в БИОСе не работает клавиатура на ноутбуке. Вход в систему настроек можно осуществить несколькими методами. Некоторые модели лэптопов изначально оборудованы специальными кнопками на панели, с помощью которых и вызывается раздел параметров БИОСа. В частности, это касается продукции Lenovo, Sony VAIO (кнопка ASSIST) и т. д.

Вторым вариантом доступа в том случае, когда в БИОСе не работает клавиатура, станет подключение внешнего ее аналога через USB-порт. Но тут нужно помнить, что внешнюю клавиатуру желательно подключать без питания, а только потом включать устройство на загрузку.

Сброс настроек

Предыдущие решения можно в некотором смысле назвать универсальными, тем не менее, и они могут не дать желаемого результата. Это можно наблюдать, когда в БИОСе не работает клавиатура USB. Такая проблема связана только с тем, что в самой системе произошел какой-то сбой.

В этом случае следует произвести полный сброс установленных параметров. Любой, даже старый компьютер стационарного типа позволяет добраться до материнской платы, на которой установлена батарейка CMOS. Ее нужно просто вытащить из гнезда на несколько минут, вставить обратно и попытаться войти в настройки, включив терминал на загрузку.

Установка корректных параметров

Но и тут есть свои подводные камни. В случае с клавиатурами USB проблема может состоять в деактивированной поддержке таких устройств в самой первичной системе.

В этом случае придется подключить клавиатуру PS/2 или, если есть такая возможность, войти в БИОС на ноутбуке через нажатие специальной кнопки, после чего найти параметры вроде Legacy USB Support или USB Keyboard Support и посмотреть на установленное значение. Если причина действительно в этом, оно будет установлено на Disabled. Его нужно изменить на Enabled и сохранить изменения при выходе (F10, Y). Далее последует перезагрузка. Возможно, именно таким способом и удастся устранить проблему.

Что может быть еще?

Как свидетельствуют отзывы, иногда отказ работы клавиатуры может быть связан с повреждениями планок оперативной памяти, нарушениями в работе блока питания, закорачиванием каких-то контактов непосредственно на материнской плате, неисправностью портов и т.д.. Тут без полной диагностики всей системы не обойтись.

Наконец, может встречаться еще и проблема с самой системой БИОС, которая заключается в нарушении ее работы или устаревании. В этом случае придется сделать полную перепрошивку, но процесс этот небезопасный, а без специальных знаний рядовой пользователь может нанести компьютеру непоправимый урон, вследствие чего ПК перестанет работать вообще.

Вместо итога

Исходя из всего вышеизложенного, можно сделать вывод, что, вне зависимости от сложившейся ситуации, не считая физических повреждений или дефектов, проблема неработоспособности клавиатуры и доступа к первичной системе решается достаточно просто.

Но причин такого явления может быть очень много. И не всегда они связаны исключительно с дефектами физического характера. В большинстве случаев для тех же USB-устройств достаточно просто включить поддержку или сделать общий сброс. Это помогает в 99 случаях из 100.

Наконец, если говорить о проблеме глобального характера, когда клавиатура не работает вообще, определить ее можно сразу же на приветственном экране при включении компьютерного терминала (будет сообщено, что клавиатура отсутствует). В этом случае придется либо проверить правильность подключения, либо использовать предложенные выше методы вплоть до замены вышедшего из строя прибора новым.

Работа с дополнительными клавишами клавиатуры.

Я вижу, что, похоже, разница между функциями GetKeyState и GetAsyncKeyState слабо понимается людьми.GetKeyState возвращает состояние виртуальной клавиши. Другими словами, GetKeyState сообщает о состоянии клавиатуры, основываясь на сообщениях, которые вы получили из своей очереди сообщений. Это не то же самое, что состоянии кнопок на физической клавиатуре:Если пользователь печатает быстро, GetKeyState не сообщит о этих нажатиях, до тех пор, пока вы не используете функции PeekMessage или GetMessage для выборки этих сообщений из очереди. Если пользователь переключился на другое окно, то функция GetKeyState не увидит что пользователь печатает в другой программе, поскольку ввод отправляется не в вашу очередь.Когда же вам нужно использовать GetKeyState, а когда GetAsyncKeyState?Для работы с интерфейсом пользователя вам почти всегда нужно использовать GetKeyState.Если вы отвечаете на входящее оконное сообщение и хотите знать, какие кнопки были нажаты в момент отправки сообщения — то вы захотите использовать GetKeyState. Например, если вы хотите отличить щелчок левой кнопки мыши от Alt + щелчок, вы должны использовать GetKeyState для запроса состояния клавиши Alt (известной как VK_MENU по историческим причинам). Это потому что вы хотите знать, была ли нажата Alt во время щелчка мышью, а не нажата ли эта кнопка прямо сейчас. Отпустил ли пользователь Alt между моментом щелчка и временем вашей обработки сообщения — совершенно неважно. Вас заботит только была ли нажата Alt в момент щелчка.Заметьте, что если вы реализуете обработчик контекстного меню, то вам вообще не следует использовать ни GetKeyState, ни GetAsyncKeyState, потому что контекстное меню может вызываться программно, вообще без действий со стороны пользователя. В IContextMenu.QueryContextMenu вы должны проверять флаг CMF_EXTENDEDVERBS, вместо того, чтобы тестировать клавиатуру, чтобы определить, следует ли вам отображать дополнительные команды. Аналогично, в IContextMenu.InvokeCommand вам следует проверять флаги CMIC_MASK_CONTROL_DOWN и CMIC_MASK_SHIFT_DOWN, если вы хотите менять поведение в зависимости от состояния модификаторов.Теперь, когда мы увидели пример различий между GetKeyState и GetAsyncKeyState, вы можете самостоятельно объяснить поведение, которое видит этот пользователь.

Мноигих беспокоит проблема расположения клавиши Fn в левом нижнем углу — то есть там где должна находится клавиша Ctrl. С данной проблемой я обратился в Samsung, но получил такой ответ, что данная преблема нерешима. цитата (Мой вопрос):Я испытваю серъезные проблем при работе с ноутбуком в связи с тем что левая клавиша Fn находится там где ДОЛЖНА находится клавиша LCtrl (то есть с краю!) Подскажите каким способом возмождно поменять эти клавиши местами? На уровне виндовс мне это сделать не удалось. Возможно существует специальная BIOS прошивка позволяющая решить эту проблему, ежедневно нарушающую душевный кофмфорт людей?цитата (Ответ Samsung):К сожалению это не возможно, можно рекомендовать использоватьвнешнюю клавиатуру.Перерыв кучу инфы в инете, я только убедился в том что на данный момент это именно так и огромное количество людей по сей день возмущены наличием этой проблемы. Клавиша Fn является hardware based, и ремапить ее на уровне винды не представляется возможным. Однако существуют гепотетические решания данной проблемы: — смена местами этих кглавиш на уровне BIOS. — вмешательство с помощью паяльника.Первый способ представляетя более рациональным. Однако, мировая тенденция такова что производители ноутбуков препочитают ждать пока пользователи переучатся, тому чтобы пойти им навстречу и выпустить BIOS версии со смененными клавишами (как виариант с возможностью переключения их местами в настройках BIOS). Такая ситуация неприемлема, и лично я вижу 2 варианта решения данной задачи: -давление на производителей ноутбуков с целью удовлетворения требований недовольнызх порльзователей -самостоятельная модификация BIOS прошивки с целью смены клавиш местами. Сразу скажу, что первый вариант уже выдвигался пользователями несколько лет назад и не получил никакого результата. Поэтому предлагаю рассмотреть вариант модификации прошивки. Что скажут по этому поводу знающие спецы? Насколько это вообще реально в теории.

Клавиша Fn работает напрямую с контроллером клавиатуры. Cистема (WinAPI, BIOS, etc.) вообще её не видит.А на ассемблере можно к ней обратиться. Нет, я уже сказал. Fn не генерит scan-код вообще. (разве что какая-то особая модель ноута. )

Что делать, если в меню BIOS не работает клавиатура

Если вы смогли зайти в BIOS, то не все потеряно

Первым делом убедитесь в правильности подключения устройства ввода информации. Если в ОС клавиатура работала, то этот вопрос отпадает. Подключить оборудование через USB-порт неправильно практически невозможно. Когда речь идет о входе PS/2, разъем для клавиатуры выделен фиолетовым цветом, а для мышки – зеленым. Важно их не перепутать.

В доме с животными нередко кабель оказывается перегрызен. Убедитесь в целостности провода. Контакты могут быть переломлены в местах подключения, рядом со штекерами.

Проверить работоспособность клавиатуры можно на другом компьютере. А исправность разъемов определяется с помощью другого устройства, которое заведомо рабочее.

Иногда случаются «глюки», исправляемые простой перезагрузкой системы. Выключаем ПК, отсоединяем оборудование и подключаем его обратно. После этого запускаем компьютер и заходим в БИОС.

Проблемы в BIOSе

Старые версии БИОСа могут не поддерживать подключение устройств ввода информации через USB-порт. Для работы с ними необходимо разыскать устройства с PS/2 проводом. Или же приобрести переходник с USB на PS/2.

Если материнская плата предусматривает возможность работы с USB, то она может быть отключена в самой системе. Также можно отключить и PS/2. По умолчанию обе опции являются включенными. Справиться с проблемой можно несколькими способами:

  • Сбросить БИОС. Выключите компьютер и выньте батарейку из материнской платы. Для более быстрого результата необходимо замкнуть контакты, выходящие к батарейке. Вставив ее обратно и запустив ПК в BIOSе будут восстановлены настройки по умолчанию. Сделать то же самое можно при помощи перемычки «CCMOS». Ее нужно на десять секунд переставить во второе положение, а затем вернуть обратно.
  • Находясь в BIOSе проверьте опцию USB Keyboard Function или Legacy USB Support. Статус Disabled означает, что входы отключены. Необходимо выбрать пункт Enabled. Перед выходом не забудьте сохранить произведенные изменения.

Как попасть в BIOS без клавиатуры

Главным вопросом, когда имеются проблемы с клавиатурой, является вход в БИОС. Устройство может быть сломано, или разъем для подключения – неисправен. Если все детали целые, то в настройках BIOSа работа USB-портов могла быть отключена. Для решения задачи есть несколько основных способов:

  • Некоторые модели ноутбуков оснащены специальной кнопкой на корпусе, предназначенной для прямого входа в БИОС (без входа в систему). К сожалению, подобная клавиша имеется не на всех устройствах. А стационарные ПК и вовсе никак не могут обойтись без клавиатуры.
  • Ремонт сломанного устройства или входа. Либо подключение другим способом.
  • Сброс настроек BIOSа до стандартных.

Попасть в БИОС без клавиатуры никак нельзя, поэтому потребуется определять причину неполадок и устранять ее. Большинство проблем являются несерьезными, и пользователь способен решить их самостоятельно.

Что делать если в биосе не работает клавиатура?

Здравствуйте дорогие читатели. Сегодняшняя статья посвящена теме «В биосе не работает клавиатура».

Данная проблема возникает довольно часто у многих пользователей компьютеров. Даже бывают моменты когда люди с 10-м стажем работы с компьютером с данной проблемой сталкиваются впервые и не знают как ее решить.

Клавиатура необходимая часть «устройств ввода вывода» и поэтому любые работы с компьютером, где не поддерживается мышка, производятся с помощью клавиатуры. Существует несколько самых распространенных причин из за которых возникают данные проблемы.

Все перечисленные способы основываться на том что вы используете полностью рабочую клавиатуру.

Что делать если не работает клавиатура

  1. Проверьте правильность подключения клавиатуры, разъем USB сложно (наверное не возможно) подключить правильно, а вот при подключении клавиатуры с разъемом PS/2 необходимо правильно соблюдать цвета.
  2. Проверьте провод клавиатуры на повреждение, особенно если у вас в доме есть домашние животные.
  3. Отключите и подключите клавиатуру. Это необходимо делать при выключенном компьютере.
  4. Подключить клавиатуру к другому компьютеру или ноутбуку и убедится в ее работоспособности.
  5. Для проверки PS/2 разъема необходимо использовать другую клавиатуру.

Если же вы были неаккуратны, то могли погнуть ножки у клавиатурного разъема PS/2. Сам разъем обычно фиолетового цвета.

В биосе не работает USB клавиатура

Чаще всего данная ситуация возникает когда вы подключаете клавиатуру к старому компьютеру.

В BIOS старых компьютеров нет поддержки USB портов, а только PS/2. Поэтому необходимо найти клавиатуру с аналогичным разъемом или купить переходник. Хотя в настоящее время уже сложно найти клавиатуру с PS/2.

Если же ваш компьютер новый или вы уверены в том что ваш BIOS поддерживает USB клавиатуры, то необходимо проверить включена ли опция «Legacy USB», «USB keyboard» или «USB Function For DOS» если там написано disable необходимы выставить значение enable, т.е включено.

При выходе из BIOS обязательно сохраните настройки. Иначе все ваши изменения ни к чему не приведут.

Не работает клавиатура при выборе ОС

Если клавиатура работает в самой ОС и BIOS, но не работает при выборе загрузки операционной системы необходимо обновить загрузчик ОС, а лучше все использовать загрузчик Grub, который устанавливается при установки Unix.

Для обновления загрузчика Windows необходимо иметь диск с установленной операционной системой. Ваша установленная ОС должна иметь полную функциональность. В этой статье рассказано как сделать восстановление загрузчика в Windows.

Альтернативные методы.

Еще несколько советов которые помогают решить проблему с клавиатурой, но они применяются очень редко.

  1. Необходимо вытащить батарейку BIOS на пару часов. Это сбросит все настройки BIOS.
  2. Переустановка или обновление BIOS.
  3. Замена блока питания.

Если данная статья не помогла решить вашу проблему, то задавайте вопросы в комментариях и мы попробуем вам помочь.

Bioskey, _bios_keybrd работа с клавиатурой

Данное требование обусловлено правилами работы некоторых транспортных компаний, которые не принимают груз к перевозке без указания паспортных данных получателя посылки (например, ТК «Деловые Линии», ТК «ЖелДорЭкспедиция» и др.). При использовании любого вида почтовой доставки указывать серию и номер паспорта получателя не требуется.

Данное требование обусловлено правилами работы некоторых транспортных компаний, которые не принимают груз к перевозке без указания паспортных данных получателя посылки (например, ТК «Деловые Линии», ТК «ЖелДорЭкспедиция» и др.). При использовании любого вида почтовой доставки указывать серию и номер паспорта получателя не требуется.

Данное требование обусловлено правилами работы некоторых транспортных компаний, которые не принимают груз к перевозке без указания паспортных данных получателя посылки (например, ТК «Деловые Линии», ТК «ЖелДорЭкспедиция» и др.). При использовании любого вида почтовой доставки указывать серию и номер паспорта получателя не требуется.

Ввод информации с клавиатуры средствами BIOS

Интерфейсом программ в персональном компьютере с клавиатурой является прерывание 16h BIOS. Далее приводится описание его функций.

АН = 00h — чтение с ожиданием двухбайтового кода из буфера клавиатуры. Прочитанный код возвращается в регистре АХ: младший байт — в регистре AL, старший — в АН. Если нажата ASCII-клавиша, в AL помещается ASCII-код символа, в АН — скэн-код. При нажатии специальных клавиш AL равен 0, а в АН возвращается расширенный скэн-код.

АН = 0lh — чтение без ожидания двухбайтового кода из буфера клавиатуры. Если буфер пуст, в 1 выставляется флаг нуля ZF. В противном случае в АХ возвращается двухбайтовый код из буфера клавиатуры, но продвижение указателя «головы» буфера не производится, т.е. код «остается» в буфере.

АН = 02h — определение состояния шифт- и триггерных клавиш. В регистре AL возвращается содержимое байта по адресу 40:17h (см. табл. 4.1).

Функция АН = 05h не имеет аналогов в библиотеке Turbo С и может использоваться для имитации нажатии клавиш в демонстрационных программах, программах переноса текста и т.д.

Функции АН = 10 — 12h являются аналогами функций 00 — 02h, но предназначены для использования в компьютерах с клавиатурой 101 /102 клавиши.

Функции АН = 00 — 02h прерывания 16h BIOS положены в основу функции bioskey() библиотеки Turbo С. Далее следует описание этой функции.

int bioskey(int cmd)

Обращается в зависимости от значения в cmd к функциям АН = 00 — 02h прерывания 16h. Возвращаемое функцией значение повторяет значение регистра АХ при выходе из прерывания.

Предварительная подготовка к работе

1.Ознакомиться с аппаратными средствами компьютера для ввода информации с клавиатуры.

2. Ознакомиться с программными средствами для ввода информации с клавиатуры.

Порядок выполнения работы

1. Разработать, написать и отладить программу управления пе­ремещением символа (например, «*») в пределах заданного на экране окна.

Таблица 4.2. Варианты заданий

Обозначение опции BIOS Описание опции в БИОСе Переведенное значение опции БИОС
  • [Disabled]
  • [Keyboard 98]
№ варианта X1 Y1 X2 Y2 Вид движения Клавиши управления Номер прерывания
Постоянное СтВВ, СтВН INT 21h
Пошаговое СтВП, СтВЛ INT 21h
Постоянное F1, F2 INT 21h
Пошаговое Все направления INT 21h
Постоянное F5, F6 INT 16h
Пошаговое F1-F4 INT 16h
Постоянное F9-F12 INT 16h
Пошаговое СтВВ, СтВН INT 16h
Постоянное СтВП, СтВЛ INT 21h
Пошаговое Все направления INT 21h
Постоянное F3, F4 INT 21h
Пошаговое F7, F8 INT 21h
Постоянное СтВВ, СтВН INT 16h
Пошаговое СтВП, СтВЛ INT 16h
Постоянное F9, F10 INT 16h
Пошаговое F11, F12 INT 16h
Постоянное СтВВ, СтВН INT 21h
Пошаговое СтВП, СтВЛ INT 21h
Постоянное F5, F10 INT 21h
Пошаговое F6, F12 INT 21h

Для управления использовать клавиши из набора: «стрелка вверх» (СтВВ), «стрелка вниз» (СтВН), «стрелка вправо» (СтВП), «стрелка влево» (СтВЛ) или функциональные клавиши Fl — F12 (варианты см. в таблице 4.2). Для ввода использовать стандартные функции языка C++. Сохранить отлаженную программу.

2. Изменить программу, заменив стандартные функции библиотеки C++ своими. Для написания функций используйте заданное прерывание (см. табл. 4.2), если его возможностей достаточно. Если его возможностей не достаточно, то замените его по своему усмотрению. Сохраните отлаженную программу.

3. Отлаженные программы предъявить преподавателю.

Содержание отчета

1. Краткие сведения о подсистеме ввода информации с клавиатуры, используемых прерываниях, буфере клавиатуры и функциях обслуживания ввода с клавиатуры.

2. Алгоритмы и тексты отлаженных программ.

4.8. Контрольные вопросы

1. Что относится к устройствам ввода информации в ЭВМ?

2. Как можно классифицировать устройства ввода?

3. Назовите основные характеристики устройств ввода информации.

4. Зачем нужен буфер клавиатуры?

5. Почему существует ввод с буферизацией и без нее?

6. Какие бывают прерывания?

7. Зачем для ввода данных с клавиатуры используют прерывания?

8. Какое прерывание вырабатывается при нажатии клавиши?

9. Назовите основные характеристики системы прерываний.

10. Почему нужны программные прерывания?

11. Почему для организации ввода с клавиатуры используются два программных прерывания INT 21h и INT 16h?

12. Какие функции библиотеки C++ для ввода с клавиатуры Вы знаете?

13. Какие функции прерывания INT 16h Вы знаете?

14. Какие функции прерывания INT 21h Вы знаете?

15. Можно ли в прикладной программе обойтись без ввода с клавиатуры?

Лабораторная работа 5.

ИСПОЛЬЗОВАНИЕ АППАРАТНЫХ ПРЕРЫВАНИЙ

Цель работы – знакомство с различного вида аппаратными прерываниями и создание собственных подпрограмм обработки прерываний.

Общие положения

Микропроцессоры 8086/88 поддерживают механизм прерываний. В самом общем виде это наличие в аппаратуре специальных средств, с помощью которых выполнение текущей программы приостанавливается и процессор переходит к так называемой программе обслуживания прерывания (Interrupt Servise Routine — ISR). Механизм прерываний позволяет организовать выполнение тех или иных функций ядра и быструю реакцию процессора на возникновение каких-то внешних со­бытий: ошибок в арифметических операциях, изменению состояния пе­риферийных устройств и пр.

Микропроцессоры 8086/88 поддерживают 256 прерываний. Каждое из них имеет свой номер и ISR. Адрес точки входа в ISR называется вектором прерывания и хранится в специальной таблице, называемой таблицей векторов прерывания (ТВП). Код ISR может располагаться в любом месте памяти. Поэтому вектор прерывания занимает 4 байта: 2 байта отво­дится на значение сегментного регистра, устанавливаемое в CS (старшее слово), 2 байта — на значение смещения, уста­навливаемое в IP (младшее слово). Вся ТВП занимает 256 * 4 = 1024 байт и располагается в оперативной памяти, начиная с адреса 0000:0000.

При возникновении прерывания процессор помешает в стек 6 байт: текущее значение CS, текущее значение IP (пара этих регистров определяет точку, с которой выполнение прерываемой программы возобновится), а также 2 байта флагов процессора. В CS и IP устанавливаются значения из ТВП, которые задают адрес начала ISR. Прерыванию 0 соответствует вектор прерывания по адресу 0000:0000, прерыванию 1 — по адресу 0000:0004h, прерыванию 2 — по адресу 0000:0008h и т.д.

Сама ISR — это программа, построенная с соблюдением специальных правил:

1) в самом начале она сохраняет в стеке все регистры процессора, которые будут использоваться в этой программе;

2) перед завершением работы программы значения регистров восстанавли­ваются;

3) последней инструкцией ISR, как правило, является инструкция возврата из прерывания IRET. Выполняя IRET, процессор извлекает из стека шесть слов информации, которые последовательно помещает в регистры IP, CS и регистр фла­гов, возвращаясь к исполнению прерванной программы.

Часто обработчикам программных прерываний требуется передать какие-то значения, задающие конкретное действие, характеристики ситуации и т.п., и получить какие-то результаты по завершению исполнения ISR. Для такого обмена данными используются внутренние регистры процессора.

Некоторые векторы прерывания в ТВП на самом деле задают не точки входа в ISR, а используются для хранения важной системной информации: адресов данных и таблиц. Кроме того, за некоторые векторы «зацеплены» ISR, не выполняющие никаких действий. Они служат заглушками для подключения дополнительных обработчиков. Так, например, в нормальном состоянии обработчик прерывания 1Ch не выполняет никаких действий и содержит единственную инструкцию возврата из прерывания IRET. Прерывание 1Ch вызывается из пределов ISR таймера (обработчик прерывания 8). Прерывание от таймера, в свою очередь, генерируется 18.2 раза в секунду аппаратурой системного таймера. Есть и другие обработчики — заглушки, вызываемые при функционировании ISR BIOS и MS-DOS.

Аппаратные прерывания

В процессе функционирования персонального компьютера могут встретиться четыре типа прерываний:

3) исключительные ситуации процессора (processor exceptions);

Аппаратные прерывания возникают как результат некоторых внешних событий и в их генерации принимает участие специальная микросхема персонального компьютера — программируемый контроллер прерываний, или PIC (Programmable Interrupt Controller). Наиболее часто для этих целей используется одна или несколько микросхем 8259А либо их функциональные эквиваленты. В архитектуре компьютеры IBM PC AT используют PIC, построенный на двух микросхемах 8259А (рис. 5.1).

Микросхема 8259А рассчитана на 8 входов запросов прерываний, обозначаемых IRQ (Interrupt Request). Сигналы на них возбуждают внешние устройства: адаптеры асинхронной последовательной и параллельной связи, плата системного таймера и др. Контроллер прерываний имеет в своем составе ряд программируемых внутренних регистров, определяющих особенности обработки запросов прерываний.

Рис 5.1. Двухкаскадная схема построения

Выход ведущей (единственной в однокаскадной схеме) микросхемы 8259А контроллера прерываний подается на специальный вход процессора (INTR). Этот вход процессора является маскируемым: если флаг маскирования прерываний IF равен единице, процессор способен «ощущать» изменение состояния линии INTR (прерывания разрешены); если же IF сброшен в 0, изменения на линии INTR не влияют на работу центрального процессора. Поэтому часто аппаратные преры­вания, в формировании которых принимает участие PIC, называют маскируемыми. Если прерывания разрешены и устанавливается высокий потенциал на линии INTR, процессор завершает исполнение текущей инструкции и отвечает двумя циклами сигнала INTA.

Первый цикл сигнала INTA — это, по существу, пустой цикл, который готовит PIC к следующему циклу. Во время второго цикла PIC помещает на шину данных байт, задающий номер аппаратного прерывания. Получив байт номера прерывания, процессор умножает его на 4, формируя смещения до вектора прерываний в ТВП.

Процессор сохраняет в стеке текущее значение регистров флагов CS и IP, затем устанавливает в 0 флаг IF, а в CS и IP — значения из вектора прерывания. В результате управление передается в ISR.

Для того чтобы различать сигналы прерываний от различных внешних устройств, система прерываний IBM PC построена следующим образом. Каждое внешнее устройство подключено к собственной линии запроса прерываний IRQ. При получении сигнала на линии IRQ контроллер прерываний передает в процессор уникальный для данной IRQ байт номера прерывания. Соответствие линий IRQ и номеров прерывания задается программированием контроллера прерываний. Такое программирование выполняется в ходе начальной загрузки системы специальной процедурой BlOSa и в дальнейшем обычно не изменяется. В принципе, перепрограммирование PIC может выполняться в любой момент и некоторые программы (Windows, OS/2) используют это при своей загрузке. В ходе программирования PIC задаются старшие 5 бит номера прерывания, а младшие 3 бита генерирует микросхема 8259А, определяя двоичный код номера линии IRQ. Ведущая (единственная) микросхема программируется BIOSом так, чтобы передавать в процессор прерывания от 08h до 0Fh. Ведомая 8259А в IBM PC AT настраивается на передачу номеров прерываний от 70h до 77h.

Кроме отображения IRQ на номера прерывания, PIC выполняет упорядочивание по приоритету одновременно возникающих запросов. Обычно наивысший приоритет имеет запрос на линии IRQ0, затем в порядке убывания IRQI, IRQ2, . IRQ7. Вход процессора INTR является так называемым «уровнем чувствительным». Это значит, что если процессор ощущает высокий уровень, он всегда начинает цикл обработки прерывания. Если начатая ISR устанавливает IF в единицу (а это, как правило, так и бывает), сохранение сигнала на линии INTR вызовет повторное вхождение в ту же самую ISR, a затем вхождение в третий, четвертый и далее раз до тех пор, пока не переполнится стек. Для того чтобы этого не происходило, контроллер прерываний блокирует генерацию сигнала INTR для текущей активной линии IRQ до тех пор, пока исполняемая ISR не даст явного указания сделать это. Обычно так ISR обозначают свое завершение, посылая в PIC команду завершения прерывания, или EOI (End Of Interrupt). Если ISR не сделает этого, контроллер продолжает блокировать выработку сигнала INTR для всех последующих запросов прерывания как по данной линии, так и по другим, менее приоритетным линиям.

Любая из линий запросов IRQi может быть маскирована. Специальный внутренний регистр PIC хранит битовую маску входов IRQi: бит 0 регистра маски управляет IRQ0 (IRQ8 в ведомой микросхеме 8259А), бит 1 — IRQI (IRQ9), . бит 7 — IRQ7 (IRQ15). Если бит равен нулю контроллер генерирует сигнал на линии INTR, если бит равен единице, контроллер не «чувствует» запрос на маскированной битом линии IRQi.

Использование двухкаскадной схемы для построения контроллера прерываний расширяет до 15 чисто обслуживаемых внешних устройств. Для двухкаскадной схемы выход INTR ведомой микросхемы 8259А подается на линию LRQ2 ведущей микросхемы. В результате линии запросов упорядочиваются по приоритету следующим образом: максимальный приоритет имеет IRQ0, затем в порядке убывания IRQI, IRQ8, . IRQ15, IRQ3, . IRQ7. Как правило, PIC в ходе начальной загрузки настраивается так, что для линий IRQ0 — IRQ7 генерируются прерывания с номерами 08h — 0Fh соответственно, а для линий IRQ8 — IRQ15 — прерывания с номерами 70h — 77h. Подключение внешних устройств персональных компьютеров к линиям IRQ и, следовательно, закрепление аппаратных пре­рываний для большинства персональных компьютеров типа IBM PC фактически стандартизовано. В табл. 5.1 приводится закрепление внешних устройств и аппаратных прерываний для IBM PC AT.

Таблица5.1. Использование прерываний в IBM PC AT

Ввод информации с клавиатуры при помощи функций BIOS

Клавиатура является основным устройством ввода алфавитно-цифровой информации, а часто — и основным средством управления работой компьютера. Для ввода информации с клавиатуры можно использовать либо функции операционной системы, либо прямой опрос контроллера клавиатуры. Мы не будем рассматривать функции MS-DOS, используемые для ввода данных с клавиатуры, так как они достаточно подробно описаны в литературе [3, 10], но непригодны для сколько-нибудь серьезной работы. Функции DOS имеют два очень серьезных недостатка. Первый недостаток заключается в том, что они не позволяют полностью реализовать возможности функциональных клавиш. Второй недостаток — клавиатурные функции DOS предназначены для работы в режиме терминала (с построчным выводом информации сверху вниз и прокруткой изображения снизу вверх). В процессе считывания символа они выполняют ряд дополнительных операций, что делает весьма неудобным их использование в любом другом, не терминальном режиме.

Функции BIOS обладают гораздо более широкими возможностями, чем функции DOS. Этих возможностей вполне достаточно для выполнения любых операций реальном режиме работы процессора. Вызов клавиатурных функций BIOS выполняется по прерыванию Int 16h. Рассмотрим эти функции.

Прерывание Int 16h, функция 00h: прочитать символ с клавиатуры

Функция 00h считывает символ из буфера клавиатуры и выдает его ASCII-код и скан-код (символ после считывания будет удален из буфера клавиатуры).

Перед вызовом прерывания требуется записать в регистр АН значение 00h.

После выполнения функции в регистры будет помещена следующая информация:

• в АН — скан-код символа;

• в AL — ASCII-код символа.

При нажатии управляющих клавиш функция выдает ASCII-код со значением 0, благодаря чему их легко можно отличить от алфавитно-цифровых. Однако друг от друга управляющие клавиши, таким образом, отличаются только по скан-кодам.

Прерывание Int 16h, функция 01 h: получить состояние клавиатуры

Функция Olh проверяет наличие символа в буфере клавиатуры. Если символ присутствует в буфере, функция выдает его ASCII-код и скан-код (не удаляя символ из буфера).

Перед вызовом прерывания требуется записать в регистр АН значение Olh.

После выполнения функции при отсутствии символа в буфере будет установлен флаг ZF. При наличии символа в буфере флаг ZF будет сброшен и в регистры помещена следующая информация:

• в АН — скан-код символа;

• в AL — ASCII-код символа.

Данная функция применяется в тех случаях, когда для управления работой программы используется не только клавиатура, но и другие устройства. Простейший способ работы в этом случае — поочередный циклический опрос всех источников информации. Использовать функцию, аналогичную 00h, нельзя — она заблокирует опрос всех остальных устройств до тех пор, пока не будет введен какой- либо символ с клавиатуры. Поэтому в цикле осуществляется только контроль поступления новой информации, а считывание информации выполняется вне цикла.

Прерывание Int 16h, функция 02h: получить состояние флагов клавиатуры

Функция 02h выдает содержимое байта флагов BIOS. Перед вызовом прерывания требуется записать в регистр АН значение 02h.

После выполнения функции регистр AL содержит описание состояния флагов:

• бит 0 — правая клавиша Shift (0 — не нажата, 1 — нажата);

• бит 1 — левая клавиша Shift (0 — не нажата, 1 — нажата);

• бит 2 — клавиша Ctrl (0 — не нажата, 1 — нажата);

• бит 3 — клавиша Alt (0 — не нажата, 1 — нажата);

• бит 4 — переключатель Scroll Lock (0 — выключен, 1 — включен);

• бит 5 — переключатель Num Lock (0 — выключен, 1 — включен);

• бит 6 — переключатель Caps Lock (0 — выключен, 1 — включен);

• бит 7 — переключатель Insert (0 — выключен, 1 — включен). Функция 02h имеет один серьезный недостаток, который сильно ограничивает возможность ее использования совместно с функцией 00h: никак не фиксируется момент изменения состояния управляющих клавиш. Если было выполнено две операции, одна из которых изменила состояние алфавитно-цифровой клавиши, а другая — состояние управляющей клавиши, то далеко не всегда можно определить, какая из операций произошла раньше.

Прерывание Int 16h, функция 03h: управление режимом автоповтора

Функция 03h устанавливает характеристики режима автоповтора.

Перед вызовом прерывания требуется записать в регистры следующую информацию:

• в АН — значение 03h;

• в AL — значение 05h;

• в ВН — код, задающий значение задержки автоповтора (табл. 1.4);

• в BL — код, задающий скорость повторения (табл. 1.5).

Работа с дополнительными клавишами клавиатуры.

Я вижу, что, похоже, разница между функциями GetKeyState и GetAsyncKeyState слабо понимается людьми.GetKeyState возвращает состояние виртуальной клавиши. Другими словами, GetKeyState сообщает о состоянии клавиатуры, основываясь на сообщениях, которые вы получили из своей очереди сообщений. Это не то же самое, что состоянии кнопок на физической клавиатуре:Если пользователь печатает быстро, GetKeyState не сообщит о этих нажатиях, до тех пор, пока вы не используете функции PeekMessage или GetMessage для выборки этих сообщений из очереди. Если пользователь переключился на другое окно, то функция GetKeyState не увидит что пользователь печатает в другой программе, поскольку ввод отправляется не в вашу очередь.Когда же вам нужно использовать GetKeyState, а когда GetAsyncKeyState?Для работы с интерфейсом пользователя вам почти всегда нужно использовать GetKeyState.Если вы отвечаете на входящее оконное сообщение и хотите знать, какие кнопки были нажаты в момент отправки сообщения — то вы захотите использовать GetKeyState. Например, если вы хотите отличить щелчок левой кнопки мыши от Alt + щелчок, вы должны использовать GetKeyState для запроса состояния клавиши Alt (известной как VK_MENU по историческим причинам). Это потому что вы хотите знать, была ли нажата Alt во время щелчка мышью, а не нажата ли эта кнопка прямо сейчас. Отпустил ли пользователь Alt между моментом щелчка и временем вашей обработки сообщения — совершенно неважно. Вас заботит только была ли нажата Alt в момент щелчка.Заметьте, что если вы реализуете обработчик контекстного меню, то вам вообще не следует использовать ни GetKeyState, ни GetAsyncKeyState, потому что контекстное меню может вызываться программно, вообще без действий со стороны пользователя. В IContextMenu.QueryContextMenu вы должны проверять флаг CMF_EXTENDEDVERBS, вместо того, чтобы тестировать клавиатуру, чтобы определить, следует ли вам отображать дополнительные команды. Аналогично, в IContextMenu.InvokeCommand вам следует проверять флаги CMIC_MASK_CONTROL_DOWN и CMIC_MASK_SHIFT_DOWN, если вы хотите менять поведение в зависимости от состояния модификаторов.Теперь, когда мы увидели пример различий между GetKeyState и GetAsyncKeyState, вы можете самостоятельно объяснить поведение, которое видит этот пользователь.

Мноигих беспокоит проблема расположения клавиши Fn в левом нижнем углу — то есть там где должна находится клавиша Ctrl. С данной проблемой я обратился в Samsung, но получил такой ответ, что данная преблема нерешима. цитата (Мой вопрос):Я испытваю серъезные проблем при работе с ноутбуком в связи с тем что левая клавиша Fn находится там где ДОЛЖНА находится клавиша LCtrl (то есть с краю!) Подскажите каким способом возмождно поменять эти клавиши местами? На уровне виндовс мне это сделать не удалось. Возможно существует специальная BIOS прошивка позволяющая решить эту проблему, ежедневно нарушающую душевный кофмфорт людей?цитата (Ответ Samsung):К сожалению это не возможно, можно рекомендовать использоватьвнешнюю клавиатуру.Перерыв кучу инфы в инете, я только убедился в том что на данный момент это именно так и огромное количество людей по сей день возмущены наличием этой проблемы. Клавиша Fn является hardware based, и ремапить ее на уровне винды не представляется возможным. Однако существуют гепотетические решания данной проблемы: — смена местами этих кглавиш на уровне BIOS. — вмешательство с помощью паяльника.Первый способ представляетя более рациональным. Однако, мировая тенденция такова что производители ноутбуков препочитают ждать пока пользователи переучатся, тому чтобы пойти им навстречу и выпустить BIOS версии со смененными клавишами (как виариант с возможностью переключения их местами в настройках BIOS). Такая ситуация неприемлема, и лично я вижу 2 варианта решения данной задачи: -давление на производителей ноутбуков с целью удовлетворения требований недовольнызх порльзователей -самостоятельная модификация BIOS прошивки с целью смены клавиш местами. Сразу скажу, что первый вариант уже выдвигался пользователями несколько лет назад и не получил никакого результата. Поэтому предлагаю рассмотреть вариант модификации прошивки. Что скажут по этому поводу знающие спецы? Насколько это вообще реально в теории.

Клавиша Fn работает напрямую с контроллером клавиатуры. Cистема (WinAPI, BIOS, etc.) вообще её не видит.А на ассемблере можно к ней обратиться. Нет, я уже сказал. Fn не генерит scan-код вообще. (разве что какая-то особая модель ноута. )

Bioskey, _bios_keybrd работа с клавиатурой

Не соберётся.
1. Знаки пунктуации за знаками комментариев.
2. Функция при таком объявлении должна возвращать значение.

Далее. Вот нажали мы f. И ты считаешь что вернулось f — это код клавиши f. Если так, то мне ничего не понятно.

Автор сайта отвечает :
Это код клавиши для директивы Bios.h а не код другого типа. Эта директива давно устарела, она использовалась в старых компиляторах, но при этом ее иногда не хватает в современных. Да, буквенные коды там не отличаются от своих символов, а вот коды клавиш типа F5, стрелок, ctrl, shift иногда нужно узнать. Для этого этот пример и показан.
Если нужен код AscII, то он узнается по-другому и разумеется он другой.

да. Функция должна возвращать значение. Я дописал, но и без этого срабатывало

Илон Маск рекомендует:  Что такое код bcmul
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL