ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ сканкод клавиши windows

Π Π°Π±ΠΎΡ‚Π° с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€ΠΎΠΉ. Π§ΠΈΡ‚Π°Π΅ΠΌ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΈ скан-ΠΊΠΎΠ΄Ρ‹ клавиш.

Π’ Π½Π°Ρ‡Π°Π»Π΅, ΠΊΠ°ΠΊ полагаСтся, разбСрСмся с вопросом: Π·Π°Ρ‡Π΅ΠΌ Π½Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΈ скан-ΠΊΠΎΠ΄Ρ‹ клавиш?

Π›ΠΈΡ‡Π½ΠΎ для мСня ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ этот вопрос сподвигла нСбольшая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΡ€ΠΈ тСстировании ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π² ΠΎΡ‚Π΄Π΅Π»Π΅ экологов. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ встрСчаСтся Ρ‚Π°ΠΊΠΎΠΉ Ρ‚ΠΈΠΏ людСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΡ‡Π΅ΠΌΡƒ-Ρ‚ΠΎ страх ΠΊΠ°ΠΊ боятся ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ², нСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π±Π΅Π· Π½ΠΈΡ… Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ, Π΄Π° ΠΊ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Ρ‚ΠΎΠ»ΠΊΠΎΠΌ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ, Π² случаС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, Ρ‡Ρ‚ΠΎ собствСнно ΡΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ.

ΠΠ°Ρ‡ΠΈΠ½Π°Π΅ΡˆΡŒ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡˆΡŒ Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, объясняСшь всС популярно (Ρ‚ΠΎΡ‚, СстСствСнно, Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΠΎΠΌΠ΅Ρ‡Π°Π΅Ρ‚ Π½Π° ΠΎΠ±Ρ€Ρ‹Π²ΠΊΠ°Ρ… Π±ΡƒΠΌΠ°ΠΆΠ΅ΠΊ), ΡΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅ΡˆΡŒ β€œΠŸΠΎΠ½ΡΠ»?”, Ρ‚ΠΎΡ‚ – β€œΠ”Π°, понял.” Π£Ρ…ΠΎΠ΄ΠΈΡˆΡŒ, Ρ‡Π΅Ρ€Π΅Π· дСнь ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡˆΡŒ ΠΈ начинаСтся β€œΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π΅ работаСт”, β€œΠ’Π°ΠΌ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ окошко ΠΏΠΎΡΠ²ΠΈΠ»ΠΎΡΡŒβ€ ΠΈ Ρ‚.Π΄. ΠΈ Ρ‚.ΠΏ. Π‘ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅ΡˆΡŒ β€œΠ§Ρ‚ΠΎ Π΄Π΅Π»Π°Π»?” ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ дСйствиС Π·Π° дСйствиСм – ошибок Π½Π΅Ρ‚β€¦ΠšΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π» Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ? НС понятно. Π‘ΠΈΠ΄Π΅Ρ‚ΡŒ Ρ†Π΅Π»Ρ‹ΠΉ дСнь Π·Π° спиной Ρƒ Π½Π΅Π³ΠΎ ΠΈ Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚ΡŒ – Π½Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚. Π—Π°ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π·Π° собой всё, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π» – изувСрство. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ упростил дальшС Π½Π΅ΠΊΡƒΠ΄Π°, Π΄Π°ΠΆΠ΅ Π½Π΅ Hint’ы сдСлал, Π° Π² Ρ‚ΡƒΠΏΡƒΡŽ подписи ΠΏΠΎΠ΄ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΡƒΠ΄Π° ΠΏΠΈΡΠ°Ρ‚ΡŒ. НС ΠΏΠΎΠΌΠΎΠ³Π»ΠΎ. Π’ ΠΈΡ‚ΠΎΠ³Π΅, Ρ€ΠΎΠ΄ΠΈΠ»Π°ΡΡŒ простая, Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ взгляд идСя – ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π½Π΅Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΊΡƒ-шпиона, Ρ‡Ρ‚ΠΎΠ±Ρ‹ отслСТивала всС дСйствия, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚ΠΎΡ‚ Ρ‚Π²ΠΎΡ€ΠΈΡ‚ Π½Π°Π΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ. ЕстСствСнно, ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅Π΄ΠΈΠ² ΠΏΠ΅Ρ€Π΅Π΄ этим Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΠΊΠ°, Ρ‡Ρ‚ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ всС Π΅Π³ΠΎ дСйствия Π½Π°Π΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π΅ сказал куда…мало Π»ΠΈ). Π’ΠΎΡ‚ Π² процСссС Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π°Π΄ ΠΌΠΎΠΈΠΌ псСвдо-шпионом ΠΌΠ½Π΅ ΠΈ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΈΡΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ знания ΠΏΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€ΠΎΠΉ.

Π’Ρ‹ ΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ знания Π³Π΄Π΅ ΡƒΠ³ΠΎΠ΄Π½ΠΎ:

Π‘Ρ€Π°Π·Ρƒ ΠΎΠ³ΠΎΠ²ΠΎΡ€ΡŽΡΡŒ – Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ я Π½Π΅ Π±ΡƒΠ΄Ρƒ Π²Ρ‹ΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒ вСсь исходник ΠΌΠΎΠ΅Π³ΠΎ β€œΡˆΠΏΠΈΠΎΠ½Π°β€, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Ρƒ Ρ‡Π°ΡΡ‚ΡŒ, которая ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚ наТатия клавиши. Π­Ρ‚ΠΎ связано с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ для ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΌΠΎΠ΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠ½Π΅ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ с Windows API, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ дСйствия Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с ΠΌΠΎΠ΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ, Π° это ΡƒΠΆΠ΅ цСлая ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ ΡΡ‚Π°Ρ‚ΡŒΡ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ нСпосрСдствСнно ΠΏΠΎ скан-ΠΊΠΎΠ΄Π°ΠΌ. Π’ Π±ΡƒΡ„Π΅Ρ€Π΅ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ отводится Π΄Π²Π° Π±Π°ΠΉΡ‚Π° Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ символ (вСсь Ρ€Π°Π·ΠΌΠ΅Ρ€ Π±ΡƒΡ„Π΅Ρ€Π° – 32 Π±Π°ΠΉΡ‚Π°, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ 16 Π½Π°ΠΆΠ°Ρ‚ΠΈΠΉ клавиш) – ΠΎΠ΄ΠΈΠ½ Π±Π°ΠΉΡ‚ прСдставляСт собой скан-ΠΊΠΎΠ΄, Π²Ρ‚ΠΎΡ€ΠΎΠΉ – ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ (для ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… клавиш ΠΎΠ½ Ρ€Π°Π²Π΅Π½ Π½ΡƒΠ»ΡŽ). Π’ числом Π²ΠΈΠ΄Π΅ скан-ΠΊΠΎΠ΄Ρ‹ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ ΠΎΡ‡Π΅Π½ΡŒ Ρ€Π΅Π΄ΠΊΠΎ, Π½ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡ… ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ нСбольшой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΊΠΎΠΉ Π½Π° Pascal’С:

Π’ΠΎ Π΅ΡΡ‚ΡŒ послС наТатия ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ клавиши Π² рСгистрС al окаТСтся ΠΊΠΎΠ΄ символа, Π° Π² ah – скан ΠΊΠΎΠ΄.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΎ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠ΄Ρ‹.

Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠ΄Ρ‹ – это Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ систСма для ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ клавиш. Π’ΠΎ Π΅ΡΡ‚ΡŒ, зная Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ клавиши, ΠΌΠΎΠΆΠ½ΠΎ со 100% ΡƒΠ²Π΅Ρ€Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ Ρ…ΠΎΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· нСдСлю ΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Π½Π°ΠΆΠΈΠΌΠ°Π» (ΠΈ Π² ΠΊΠ°ΠΊΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ). Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, зная Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ раскладку, ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ писал ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ, Π½ΠΎ это ΡƒΠΆΠ΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΉ вопрос.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ напишСм Π½Π΅Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Π»ΠΎΠ²ΡƒΡˆΠΊΡƒ для ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹, которая Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚Π»Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ всС наТатия клавиш ΠΈ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π»ΠΎΠ³-Ρ„Π°ΠΉΠ», Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒΡΡ скан-ΠΊΠΎΠ΄ ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π½Π°ΠΆΠ°Ρ‚ΠΎΠΉ клавиши.

БобствСнно, ΠΎΠΏΡ‹Ρ‚Π½Ρ‹ΠΉ Π³Π»Π°Π· программиста сразу ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ нСдостаток, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ – Ρ€Π°Π±ΠΎΡ‚Π° с Ρ„Π°ΠΉΠ»ΠΎΠΌ ΠΈΠ· DLL, Ρ‡Ρ‚ΠΎ Π½Π΅ рСкомСндуСтся. Π’ ΠΈΠ΄Π΅Π°Π»Π΅ Π² DLL слСдуСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΊΠΎΠ΄Ρ‹ ΠΈ ΠΎΡ‚ΡΡ‹Π»Π°Ρ‚ΡŒ ΠΈ Π² ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Π° Ρ‚Π° Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΏΡƒΡΡ‚ΡŒ ΠΏΠΈΡˆΠ΅Ρ‚ ΠΈΡ… Ρ„Π°ΠΉΠ», Π½ΠΎ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π»Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°, ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ³ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ ΠΈ Ρ‚Π°ΠΊΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅

здСсь опрСдСляСтся Π±Ρ‹Π»Π° Π»ΠΈ Π½Π°ΠΆΠ°Ρ‚Π° клавиша. Если Π΄Π°, Ρ‚ΠΎ записываСм Ρ„Π°ΠΉΠ». Если это условиС ΡƒΠ±Ρ€Π°Ρ‚ΡŒ, Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ дСйствиС Π½Π° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ, Ρ‚.Π΅. Π² Ρ„Π°ΠΉΠ» Π·Π°ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ наТатая клавиша ΠΈ отпущСнная.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ пишСм основноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Для дСмонстрации дСйствия Π»ΠΎΠ²ΡƒΡˆΠΊΠΈ я сдСлал Π²ΠΎΡ‚ Ρ‚Π°ΠΊΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ:

ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ сканкод клавиши windows. spyhook. ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ сканкод клавиши windows Ρ„ΠΎΡ‚ΠΎ. ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ сканкод клавиши windows-spyhook. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ сканкод клавиши windows. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° spyhook. Π’ Π½Π°Ρ‡Π°Π»Π΅, ΠΊΠ°ΠΊ полагаСтся, разбСрСмся с вопросом: Π·Π°Ρ‡Π΅ΠΌ Π½Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΈ скан-ΠΊΠΎΠ΄Ρ‹ клавиш?Π’ Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ Memo записываСм ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ тСкст, Π° Π² Π½ΠΈΠΆΠ½Π΅ΠΌ, ΠΏΠΎ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡŽ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°, выписываСтся содСрТимоС Π»ΠΎΠ³-Ρ„Π°ΠΉΠ»Π°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π’Ρ‹ смоТСтС практичСски β€œΠ½Π° лСту” Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ происходит, ΠΊΠ°ΠΊΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ, Ρ‡Ρ‚ΠΎ наТимаСтся, ΠΊΠ°ΠΊΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ измСняСтся ΠΈ Ρ‚.Π΄. ΠΈ Ρ‚.ΠΏ.

ΠšΡΡ‚Π°Ρ‚ΠΈ, ΡΠΎΠ²Π΅Ρ‚ΡƒΡŽ ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎ-большС Π·Π°Π΄Π΅Ρ€ΠΆΠΊΡƒ Π½Π° Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π΅, ΠΈΠ½Π°Ρ‡Π΅ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΡƒΡΠΏΠ΅Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ всё содСрТимоС.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π΅Π»Π°Π΅ΠΌ ссылки Π½Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π½Π°ΠΌ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΠΈΠ· DLL. Π‘ΡƒΠ΄Π΅ΠΌ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ (Π° ΠΈΡ… Π°ΠΆ 2 ΡˆΡ‚ΡƒΠΊΠΈ) сразу ΠΆΠ΅ послС запуска ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ПослС описания Ρ„ΠΎΡ€ΠΌΡ‹ пишСм:

На событиС onCreate Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΈΠ»ΠΈ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π»ΠΎΠ³-Ρ„Π°ΠΉΠ» ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π½Π°ΡˆΡƒ Π»ΠΎΠ²ΡƒΡˆΠΊΡƒ.

БоотвСтствСнно, Π½Π° Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ прилоТСния Π»ΠΎΠ²ΡƒΡˆΠΊΡƒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ:

Π’Ρ‹Π²ΠΎΠ΄ содСрТимого Π»ΠΎΠ³-Ρ„Π°ΠΉΠ»Π° Π² Memo дСлаСтся ΠΏΡ€ΠΎΡ‰Π΅ простого:

Π’ΠΎΡ‚ ΠΈ всС, Ρ‡Ρ‚ΠΎ ΠΎΡ‚ нас Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΎΡΡŒ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ запускаСм ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ (ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠΈΠ² рядом с Π½ΠΈΠΌ ΡΠΎΠ·Π΄Π°Π½Π½ΡƒΡŽ DLL) ΠΈ Π»ΡŽΠ±ΡƒΠ΅ΠΌΡΡ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ:

ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ сканкод клавиши windows. spyhook2. ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ сканкод клавиши windows Ρ„ΠΎΡ‚ΠΎ. ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ сканкод клавиши windows-spyhook2. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ сканкод клавиши windows. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° spyhook2. Π’ Π½Π°Ρ‡Π°Π»Π΅, ΠΊΠ°ΠΊ полагаСтся, разбСрСмся с вопросом: Π·Π°Ρ‡Π΅ΠΌ Π½Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΈ скан-ΠΊΠΎΠ΄Ρ‹ клавиш?Как Π²ΠΈΠ΄ΠΈΡ‚Π΅ Π² wParam ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄, Π° Π² LParam – скан-ΠΊΠΎΠ΄ ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΠΎΠΉ клавиши. ВсС Π΄Π°Π½Π½Ρ‹Π΅ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π² HEX-Ρ„ΠΎΡ€ΠΌΠ΅ ΠΈ ΠΏΡ€ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ Π²Ρ‹ ΠΈΡ… смоТСтС Π»Π΅Π³ΠΊΠΎ Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Ρ‚ΡŒ. Если Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ трудности – ΠΎΠ±Ρ€Π°Ρ‰Π°ΠΉΡ‚Π΅ΡΡŒ, разбСрСмся вмСстС.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Нихт Ρ„Π΅Ρ€ΡˆΡ‚Π΅ΠΉΠ½: ΡƒΡ‡ΠΈΠΌ ΠΏΠΈΠ½Π³Π²ΠΈΠ½Π° ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΌΠ΅Π΄ΠΈΠΉΠ½Ρ‹Π΅ клавиши

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ скан-ΠΊΠΎΠ΄Π° клавиш

Π§Ρ‚ΠΎ Π±Ρ‹ Ρ‚Ρ‹ Ρ‚Π°ΠΌ Π½Π΅ Π½Π°ΠΆΠΈΠΌΠ°Π» Π½Π° своСй ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π΅, X-сСрвСру ΠΈ ядру, Π² ΠΎΠ±Ρ‰Π΅ΠΌ-Ρ‚ΠΎ, всС Ρ€Π°Π²Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π° Π½Π΅ΠΉ написано ΠΈΠ»ΠΈ нарисовано. Π˜Ρ… ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‚ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ скан-ΠΊΠΎΠ΄ ΠΊΠ½ΠΎΠΏΠΊΠΈ, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ сначала иксы ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ΠΊΠΎΠ΄ΠΎΠ² клавиш ядра, Π° Π·Π°Ρ‚Π΅ΠΌ ΡƒΠΆΠ΅ ΠΊΠΎΠ΄ клавиши привязываСтся ΠΊ собствСнной Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΠΊΠΎΠ΄ΠΎΠ². Если Π² Windows ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ настройки ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΌΠ΅Π΄ΠΈΠΉΠ½Ρ‹Ρ… клавиш Π² консоли ΠΊΠ°ΠΊ Ρ‚Π°ΠΊΠΎΠ²ΠΎΠΉ Π½Π΅ сущСствуСт, Ρ‚ΠΎ Π² Linux приходится ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ Ρ€Π΅Π°ΠΊΡ†ΠΈΡŽ Π½Π° Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ ΠΊΠ½ΠΎΠΏΠΎΠΊ Π² консоли ΠΈ Π² X-Window.

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ клавиши, слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρƒ xev, Π²Ρ…ΠΎΠ΄ΡΡ‰ΡƒΡŽ Π² состав Π₯-сСрвСра. ПослС Π΅Π΅ запуска появляСтся ΠΎΠΊΠ½ΠΎ Event Tester, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π°ΠΆΠΈΠΌΠ°Π΅ΠΌ клавиши, запоминая Π²Ρ‹Π΄Π°Π²Π°Π΅ΠΌΡ‹ΠΉ ΠΊΠΎΠ΄:

$ xev
.
KeyRelease event, serial 31, synthetic NO, window 0x3e00001,
root 0x67, subw 0x0, time 279734676, (311,611), root:(1104,687),
state 0x2000, keycode 236 (keysym 0x1008ff19, XF86Mail), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
KeyRelease event, serial 31, synthetic NO, window 0x2600001,
root 0x67, subw 0x0, time 265877259, (883,334), root:(886,358),
state 0x0, keycode 161 (keysym 0x0, NoSymbol), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False

Π’Ρ‹Π²ΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ³Ρ€ΠΎΠΌΠ΅Π½, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ отслСТиваСтся ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΌΡ‹ΡˆΠΊΠΈ ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π΅ Π½Π°Π΄ ΠΎΠΊΠ½ΠΎΠΌ Event Tester. ΠšΠ»Π°Π²ΠΈΡˆΡƒ описываСт Π±Π»ΠΎΠΊ KeyRelease, Π² частности, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ keycode ΠΊΠ°ΠΊ Ρ€Π°Π· ΠΈ являСтся скан-ΠΊΠΎΠ΄ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΡƒΠ·Π½Π°Ρ‚ΡŒ. Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½Π°ΠΆΠ°Ρ‚Ρ‹ Π΄Π²Π΅ клавиши. КлавишС с ΠΊΠΎΠ΄ΠΎΠΌ 236 соотвСтствуСт ΠΊΠΎΠ΄ клавиши для X-сСрвСра, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Π² keysym, Π° Ρ‚Π°ΠΊΠΆΠ΅ дСйствиС XF86Mail, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π² KDE запускаСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹ΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ‚. Для клавиши с Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ 161 ΠΊΠΎΠ΄ ΠΈ дСйствиС Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹.

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Π° ситуация, ΠΊΠΎΠ³Π΄Π° клавиша наТимаСтся, Π½ΠΎ Π΅Π΅ скан-ΠΊΠΎΠ΄ Π½Π΅ выдаСтся. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ядро Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΉΡ‚ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π’ Π²Ρ‹Π²ΠΎΠ΄Π΅ dmesg Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ такая строка:

Use ‘setkeycodes 0xec ‘ to make it known.

Π’ΠΎ Π΅ΡΡ‚ΡŒ Ρ‚Π΅Π±Π΅ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‚ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ скан-ΠΊΠΎΠ΄ клавиши ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ setkeycodes, ΠΏΡ€ΠΈ этом Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ keycode Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ просто. ΠŸΠ΅Ρ€Π΅Π²Π΅Π΄ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΡƒΡŽ Ρ†ΠΈΡ„Ρ€Ρƒ Π² дСсятичноС число (Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€ΠΎΠ² это ΡƒΠΌΠ΅ΡŽΡ‚) ΠΈ ΠΏΡ€ΠΈΠ±Π°Π²ΡŒ 128. Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ 0xec=236, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ скан-ΠΊΠΎΠ΄ 364. Если Π΅ΡΡ‚ΡŒ сомнСния, список задСйствованных ΠΈ нСзадСйствованных скан-ΠΊΠΎΠ΄ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, запустив Π² консоли ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρƒ getkeycodes ΠΈΠ»ΠΈ dumpkeys. НапримСр, Ссли Π²Ρ‹Π²ΠΎΠ΄ Β«getkeycodes | grep Β» Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π΄Π°Π», Π·Π½Π°Ρ‡ΠΈΡ‚ этот ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ смСло ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ.

ΠŸΠΎΠΌΠΎΡ‡ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ скан-ΠΊΠΎΠ΄ способна ΠΈ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° Π₯Keycaps (www.jwz.org/xkeycaps), которая являСтся графичСским Ρ„Ρ€ΠΎΠ½Ρ‚-эндом ΠΊ Xmodmap.

Π’ консоли ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° xev, разумССтся, Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ скан-ΠΊΠΎΠ΄, Π²Ρ‹Π΄Π°Π²Π°Π΅ΠΌΡ‹ΠΉ ядром, слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρƒ showkey ΠΈΠ»ΠΈ getkeycodes:

$ showkey
ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π° Π±Ρ‹Π»Π° Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ UNICODE
Π½Π°ΠΆΠΌΠΈΡ‚Π΅ Π»ΡŽΠ±ΡƒΡŽ ΠΊΠ»Π°Π²ΠΈΡˆΡƒ (ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· 10 сСк послС послСднСго наТатия).
0xe0 0x6c 0xe0 0xec

ΠŸΠ΅Ρ€Π²Ρ‹Π΅ Π΄Π²Π΅ Ρ†ΠΈΡ„Ρ€Ρ‹ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π½Π°ΠΆΠ°Ρ‚ΠΎΠΉ клавишС, Π²Ρ‚ΠΎΡ€Ρ‹Π΅ – ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΡŽ наТатия.

Настройка привязки скан-ΠΊΠΎΠ΄ΠΎΠ² Π² X-Window

$ cat /usr/include/X11/XF86keysym.h
/*
* Keys found on some «Internet» keyboards.
*/
#define XF86XK_Standby 0x1008FF10
#define XF86XK_AudioLowerVolume 0x1008FF11
#define XF86XK_AudioRaiseVolume 0x1008FF13
#define XF86XK_AudioPlay 0x1008FF14
#define XF86XK_AudioStop 0x1008FF15
#define XF86XK_Mail 0x1008FF19

keycode 161 XF86Calculator
keycode 174 XF86AudioLowerVolume
keycode 176 XF86AudioRaiseVolume
keycode 162 XF86AudioPause

И Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅, ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ, Π΄ΡƒΠΌΠ°ΡŽ, ясСн. ΠŸΡ€ΠΈΡ‡Π΅ΠΌ ΠΊΠΎΠ΄ клавиш ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π½ΠΎΡΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ Π² дСсятичном, Ρ‚Π°ΠΊ ΠΈ ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅. По ΠΌΠΎΠΈΠΌ наблюдСниям, ΠΊΠΎΠ΄Ρ‹ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° клавиш стандартизированы. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Ссли Ρ‚Ρ‹ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡˆΡŒ Ρ€Π΅Π°ΠΊΡ†ΠΈΡŽ Π½Π° Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ клавиши ΠΈ ΠΏΠ΅Ρ€Π΅Π½Π΅ΡΠ΅ΡˆΡŒ Ρ„Π°ΠΉΠ» Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΊΠΎΠΌΠΏ, Π΅ΡΡ‚ΡŒ Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΊΠ»Π°Π²Π΅ рСакция Π½Π° Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ Ρ‚Π°ΠΊΠΆΠ΅ подписанной клавиши Π±ΡƒΠ΄Π΅Ρ‚ аналогичная. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ стола Gnome с GDM ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ всС эти строки Π² общСсистСмный Ρ„Π°ΠΉΠ» /etc/X11/Xmodmap.

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π½Π°Ρ…ΠΎΠ΄ΠΈΠΌ ΠΏΡ€Π΅Π»ΡŽΠ±ΠΎΠΏΡ‹Ρ‚Π½Π΅ΠΉΡˆΠΈΠΉ Ρ„Π°ΠΉΠ» /etc/X11/Xsession.d/80ubuntu-xmodmap Ρ‚Π°ΠΊΠΎΠ³ΠΎ содСрТания:

/usr/bin/xmodmap /usr/share/apps/kxkb/ubuntu.xmodmap || true

/.icewm, ΠΏΠΎΡΠ²Π»ΡΡŽΡ‰ΠΈΠΉΡΡ послС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ запуска, слСдуСт Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ строку:

Π’ Fluxbox строка для запуска проигрыватСля Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

Π’ ΠΊΠΎΠ½Ρ„ΠΈΠ³Π°Ρ… ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹, поэтому с ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΎΠΊΠΎΠ½Π½Ρ‹ΠΌΠΈ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π°ΠΌΠΈ, Π΄ΡƒΠΌΠ°ΡŽ, Ρ‚Ρ‹ Π±Π΅Π· Ρ‚Ρ€ΡƒΠ΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅ΡˆΡŒΡΡ сам.

Настройка Ρ€Π΅Π°ΠΊΡ†ΠΈΠΈ Π² консоли

$ setkeycodes 0xec 118

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ свободныС значСния ΠΌΠΎΠΆΠ½ΠΎ Π² Ρ„Π°ΠΉΠ»Π΅ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π½ΠΎΠΉ раскладки. Π’ Ubuntu ΠΈ всСх дистрибутивах, Π±Π°Π·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ…ΡΡ Π½Π° Debian, это ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ /etc/console-setup/boottime.kmap.gz. Если послС запуска ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с клавишами Π½Π΅Ρ‚, заносим эту строку Π² ΠΎΠ΄ΠΈΠ½ ΠΈΠ· стартовых скриптов, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π² /etc/init.d/rc.local.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ Π·Π°Π΄Π°Ρ‚ΡŒ соотвСтствиС клавиши ΠΈ выполняСмого дСйствия. Π—Π΄Π΅ΡΡŒ простор для творчСства Π΄Π°ΠΆΠ΅ большС, Ρ‡Π΅ΠΌ Π² иксах. Π’ keymaps(5) ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° установки соотвСтствия keycode выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

< plain | >keycode keynumber = keysym

# ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ консоли Π½Π° ΠΎΠ΄Π½Ρƒ Π½Π°Π·Π°Π΄ ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ Π½Π° ΠΊΠ»Π°Π²ΠΈΡˆΡƒ с ΠΊΠΎΠ΄ΠΎΠΌ 105
keycode 105 = Decr_Console
# ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ консоли Π½Π° ΠΎΠ΄Π½Ρƒ Π²ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ Π½Π° ΠΈ ΠΊΠ»Π°Π²ΠΈΡˆΡƒ с ΠΊΠΎΠ΄ΠΎΠΌ 106
alt keycode 106 = Incr_Console

Но ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈ свои Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹, указывая ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…:

Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, ΠΏΠΎ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ клавиши с ΠΊΠΎΠ΄ΠΎΠΌ 120 Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ дСйствиС, ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ F100; Π² нашСм случаС Π·Π°Π΄Π°Π½ΠΎ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°. ВмСсто F100, СстСствСнно, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ любоС Π΄Ρ€ΡƒΠ³ΠΎΠ΅ имя.

/.console-setup), всС настройки Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ пСрСнСсти Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ„Π°ΠΉΠ», Ρ‡Ρ‚ΠΎ нСсколько
Π½Π΅ΡƒΠ΄ΠΎΠ±Π½ΠΎ. Если Ρ‚Ρ‹ всС-Ρ‚Π°ΠΊΠΈ Ρ€Π΅ΡˆΠΈΡˆΡŒΡΡ Π½Π° этот шаг, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ΡΡ записи ΠΊΠ°ΠΊ шаблон, Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ записывая Π½Π° ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ, Π° Π² ΠΊΠΎΠ½Ρ†Π΅ Π½Π΅ Π·Π°Π±ΡƒΠ΄ΡŒ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΏΡƒΡΡ‚ΡƒΡŽ строку.

НСмного ΠΎ Π½ΠΎΡƒΡ‚Π±ΡƒΠΊΠ΅

$ sudo mcedit /etc/acpi/events/lid

$ sudo mcedit /etc/acpi/events/power

Π­Ρ‚ΠΎ нСсколько ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½Π½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹, Π² KUbuntu Ρ‚Ρ‹ найдСшь Π±ΠΎΠ»Π΅Π΅ слоТныС скрипты. ПослС этого трСбуСтся пСрСзапуск Π΄Π΅ΠΌΠΎΠ½Π° acpid:

$ sudo /etc/init.d/acpid restart

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ настройки

ВозмоТности KeyTouch (keytouch.sf.net) нСсколько скромнСС, эта ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° примСняСтся ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ для настройки ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΌΠ΅Π΄ΠΈΠΉΠ½Ρ‹Ρ… клавиш. Π₯отя с Π΅Π΅ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ любой клавишС ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ своС дСйствиС, ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‰Π΅Π΅ΡΡ ΠΎΡ‚ установок ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. На сайтС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΊΡ€ΠΎΠΌΠ΅ исходных тСкстов ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… дистрибутивов, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ настройки для ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΌΠ΅Π΄ΠΈΠΉΠ½Ρ‹Ρ… ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° извСстных ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ.

ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ сканкод клавиши windows. 109. ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ сканкод клавиши windows Ρ„ΠΎΡ‚ΠΎ. ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ сканкод клавиши windows-109. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΊΠ°ΠΊ ΡƒΠ·Π½Π°Ρ‚ΡŒ сканкод клавиши windows. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° 109. Π’ Π½Π°Ρ‡Π°Π»Π΅, ΠΊΠ°ΠΊ полагаСтся, разбСрСмся с вопросом: Π·Π°Ρ‡Π΅ΠΌ Π½Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΈ скан-ΠΊΠΎΠ΄Ρ‹ клавиш?
ΠŸΠΎΠ»Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ ΡΡ‚Π°Ρ‚ΡŒΠΈ
Ρ‡ΠΈΡ‚Π°ΠΉ Π² январском Π½ΠΎΠΌΠ΅Ρ€Π΅ Π₯Π°ΠΊΠ΅Ρ€Π°!

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

2 ΠšΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π°

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρƒ ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ. Она ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ своС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π΅ Π²Π²Π΅Π΄Π΅Ρ‚ ΠΊΠ°ΠΊΠΎΠ΅-Π½ΠΈΠ±ΡƒΠ΄ΡŒ число ΠΈΠ»ΠΈ ΠΏΠΎΠΊΠ° Π½Π΅ Π½Π°ΠΆΠΌΠ΅Ρ‚ ΠΊΠ°ΠΊΡƒΡŽ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΊΠ»Π°Π²ΠΈΡˆΡƒ. Выполняя Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ‚ пСриодичСски ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ, Π±Ρ‹Π»Π° Π»ΠΈ Π½Π°ΠΆΠ°Ρ‚Π° клавиша, ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‰Π°Ρ Ρ€Π΅ΠΆΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π Π΅Π·ΠΈΠ΄Π΅Π½Ρ‚Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π°ΠΆΠΈΠΌΠ°Π΅Ρ‚ Π·Π°Ρ€Π°Π½Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΡŽ. МоТно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅, Π²Ρ‹Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΠΎΠ΅ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€ΠΎΠΉ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π§Ρ‚ΠΎ ΠΆΠ΅ касаСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΠΊΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€ΠΎΠΉ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСмах Microsoft Windows, Ρ‚ΠΎ ΠΎΠ½Π° Π±Ρ‹Π»Π° описана Π² 11 Ρ‚ΠΎΠΌΠ΅ Β«Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ систСмного программиста», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ называСтся Β«ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ систСма Microsoft Windows для программиста».

Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π°

ΠšΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π°, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π² Π²ΠΈΠ΄Π΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ устройства, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΊ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρƒ Ρ‚ΠΎΠ½ΠΊΠΈΠΌ ΠΊΠ°Π±Π΅Π»Π΅ΠΌ. ΠœΠ°Π»ΠΎΠ³Π°Π±Π°Ρ€ΠΈΡ‚Π½Ρ‹Π΅ Π±Π»ΠΎΠΊΠ½ΠΎΡ‚Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρ‹ содСрТат Π²ΡΡ‚Ρ€ΠΎΠ΅Π½Π½ΡƒΡŽ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρƒ.

Π§Ρ‚ΠΎ ΠΆΠ΅ находится Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹?

ΠžΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ΡΡ, Ρ‚Π°ΠΌ Π΅ΡΡ‚ΡŒ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€! Волько этот ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ состоит ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ микросхСмы ΠΈ выполняСт спСциализированныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Когда Π²Ρ‹ Π½Π°ΠΆΠΈΠΌΠ°Π΅Ρ‚Π΅ Π½Π° клавиши, ΠΎΠ½ посылаСт Π½ΠΎΠΌΠ΅Ρ€ Π½Π°ΠΆΠ°Ρ‚ΠΎΠΉ клавиши Π² Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€.

ΠšΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π½Π°Ρ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°

Если Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ сильно ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½Π½ΡƒΡŽ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ схСму ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½Π½ΡƒΡŽ Π½Π° рисункС, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ всС клавиши находятся Π² ΡƒΠ·Π»Π°Ρ… ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ (рис. 2.1).

Рис.2.1. УпрощСнная схСма ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹

Устанавливая ΠΏΠΎ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… Π»ΠΈΠ½ΠΈΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ напряТСния, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ логичСскому Π½ΡƒΠ»ΡŽ, ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ ΠΎΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ состояниС Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½Ρ‹Ρ… Π»ΠΈΠ½ΠΈΠΉ. Если Π½ΠΈ ΠΎΠ΄Π½Π° клавиша Π½Π΅ Π½Π°ΠΆΠ°Ρ‚Π°, ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ напряТСния Π½Π° всСх Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½Ρ‹Ρ… линиях соотвСтствуСт логичСской Π΅Π΄ΠΈΠ½ΠΈΡ†Π΅ (Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ всС эти Π»ΠΈΠ½ΠΈΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ ΠΊ источнику питания +5 Π’ Ρ‡Π΅Ρ€Π΅Π· рСзисторы).

Если Π²Ρ‹ Π½Π°ΠΆΠΌΠ΅Ρ‚Π΅ Π½Π° ΠΊΠ°ΠΊΡƒΡŽ-Π»ΠΈΠ±ΠΎ ΠΊΠ»Π°Π²ΠΈΡˆΡƒ, Ρ‚ΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½Π°Ρ ΠΈ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½Π°Ρ Π»ΠΈΠ½ΠΈΠΈ окаТутся Π·Π°ΠΌΠΊΠ½ΡƒΡ‚Ρ‹ΠΌΠΈ. Когда Π½Π° этой Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ Π»ΠΈΠ½ΠΈΠΈ процСссор установит Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ логичСского нуля, Ρ‚ΠΎ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ напряТСния Π½Π° Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠΉ Π»ΠΈΠ½ΠΈΠΈ Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ логичСскому Π½ΡƒΠ»ΡŽ.

Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½Ρ‹Ρ… Π»ΠΈΠ½ΠΈΠΉ появится ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ логичСского нуля, ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π½Ρ‹ΠΉ процСссор фиксируСт Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ Π½Π° ΠΊΠ»Π°Π²ΠΈΡˆΡƒ. Он посылаСт Π² Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ запрос Π½Π° ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ ΠΈ Π½ΠΎΠΌΠ΅Ρ€ клавиши Π² ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅. АналогичныС дСйствия Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΈ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ отпускаСтС Π½Π°ΠΆΠ°Ρ‚ΡƒΡŽ Ρ€Π°Π½Π΅Π΅ ΠΊΠ»Π°Π²ΠΈΡˆΡƒ.

Бкан-код клавиши

НомСр клавиши, посылаСмый ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π½Ρ‹ΠΌ процСссором, ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎ зависит ΠΎΡ‚ схСмы ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π½ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹, Π½ΠΎ Π½Π΅ ΠΎΡ‚ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, нанСсСнных Π½Π° ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ клавиш. Π­Ρ‚ΠΎΡ‚ Π½ΠΎΠΌΠ΅Ρ€ называСтся скан-ΠΊΠΎΠ΄ΠΎΠΌ (Scan Code). Π‘Π»ΠΎΠ²ΠΎ scan («ΡΠΊΠ°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅»), ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠΈΠ²Π°Π΅Ρ‚ Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ сканируСт ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρƒ для поиска Π½Π°ΠΆΠ°Ρ‚ΠΎΠΉ клавиши.

Код ASCII Π½Π°ΠΆΠ°Ρ‚ΠΎΠΉ клавиши

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½ΡƒΠΆΠ΅Π½ Π½Π΅ порядковый Π½ΠΎΠΌΠ΅Ρ€ Π½Π°ΠΆΠ°Ρ‚ΠΎΠΉ клавиши, Π° ΠΊΠΎΠ΄, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ Π½Π° этой клавишС (ΠΊΠΎΠ΄ ASCII).

Код ASCII Π½Π΅ связан Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ со скан-ΠΊΠΎΠ΄ΠΎΠΌ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ клавишС ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ нСсколько Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΊΠΎΠ΄Π° ASCII Π² зависимости ΠΎΡ‚ состояния Π΄Ρ€ΡƒΠ³ΠΈΡ… клавиш. НапримСр, клавиша с ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Β«1Β» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π΅Ρ‰Π΅ ΠΈ для Π²Π²ΠΎΠ΄Π° символа Β«!Β» (Ссли ΠΎΠ½Π° Π±Ρ‹Π»Π° Π½Π°ΠΆΠ°Ρ‚Π° вмСстС с клавишСй ).

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ всС прСобразования скан-ΠΊΠΎΠ΄Π° Π² ΠΊΠΎΠ΄ ASCII Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎ. Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС MS-DOS эти прСобразования Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ BIOS. Для использования символов ΠΊΠΈΡ€ΠΈΠ»Π»ΠΈΡ†Ρ‹ эти ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Ρ€Π°ΡΡˆΠΈΡ€ΡΡŽΡ‚ΡΡ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π½Ρ‹ΠΌΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°ΠΌΠΈ, ΠΊΠ°ΠΊ входящими Π² состав Π»ΠΎΠΊΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… вСрсий MS-DOS, Ρ‚Π°ΠΊ ΠΈ созданными Π² Π²ΠΈΠ΄Π΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ.

Π Π΅ΠΆΠΈΠΌ Π°Π²Ρ‚ΠΎΠΏΠΎΠ²Ρ‚ΠΎΡ€Π°

Если Π½Π°ΠΆΠ°Ρ‚ΡŒ Π½Π° ΠΊΠ»Π°Π²ΠΈΡˆΡƒ ΠΈ Π½Π΅ ΠΎΡ‚ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π΅Π΅, ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π° ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅Ρ‚ Π² Ρ€Π΅ΠΆΠΈΠΌ Π°Π²Ρ‚ΠΎΠΏΠΎΠ²Ρ‚ΠΎΡ€Π°. ΠŸΡ€ΠΈ этом Π² ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ автоматичСски Ρ‡Π΅Ρ€Π΅Π· Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ΠΎΠΌ Π°Π²Ρ‚ΠΎΠΏΠΎΠ²Ρ‚ΠΎΡ€Π°, посылаСтся ΠΊΠΎΠ΄ Π½Π°ΠΆΠ°Ρ‚ΠΎΠΉ клавиши. Π Π΅ΠΆΠΈΠΌ Π°Π²Ρ‚ΠΎΠΏΠΎΠ²Ρ‚ΠΎΡ€Π° ΠΎΠ±Π»Π΅Π³Ρ‡Π°Π΅Ρ‚ Π²Π²ΠΎΠ΄ с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ большого количСства ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Ρ… символов.

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π° содСрТит Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ 16-Π±Π°ΠΉΡ‚ΠΎΠ²Ρ‹ΠΉ Π±ΡƒΡ„Π΅Ρ€, Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ½Π° осущСствляСт ΠΎΠ±ΠΌΠ΅Π½ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ с ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠΌ.

Π’ΠΈΠΏΡ‹ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€

Π”ΠΎ Π½Π΅Π΄Π°Π²Π½Π΅Π³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ сущСствовали Ρ‚Ρ€ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠ° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹. Π­Ρ‚ΠΎ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π° для ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ² IBM PC/XT, 84-клавишная ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π° для IBM PC/AT ΠΈ 101-клавишная (Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Π°Ρ) ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π° для IBM PC/AT. НСкоторыС ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΡŒ Ρ€Π΅ΠΆΠΈΠΌΠ° Ρ€Π°Π±ΠΎΡ‚Ρ‹ (XT/AT), располоТСнный Π½Π° Π½ΠΈΠΆΠ½Π΅ΠΉ ΠΊΡ€Ρ‹ΡˆΠΊΠ΅. Он Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ установлСн Π² ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ опСрационная систСма Microsoft Windows ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»Π° ΡˆΠΈΡ€ΠΎΠΊΠΎΠ΅ распространСниС, ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ для Π½Π΅Π΅ Π±Ρ‹Π» создан Π½ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹. К ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π΅ Ρ‚ΠΈΠΏΠ° IBM PC/AT Π±Ρ‹Π»ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π΄Π²Π΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ, пСрвая ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΄ΡƒΠ±Π»ΠΈΡ€ΡƒΠ΅Ρ‚ Π²Ρ‹Π·ΠΎΠ² мСню Start, выполняСмый ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π»Π΅Π²ΠΎΠΉ клавиши ΠΌΡ‹ΡˆΠΈ, Π° вторая – Π²Ρ‹Π·ΠΎΠ² Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ мСню ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΏΡ€Π°Π²ΠΎΠΉ клавиши ΠΌΡ‹ΡˆΠΈ.

ΠŸΠΎΡ€Ρ‚Ρ‹ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€ΠΎΠΉ

НазначСниС ΠΏΠΎΡ€Ρ‚ΠΎΠ², ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Ρ… для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€ΠΎΠΉ, зависят ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°.

ΠšΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ IBM PC/XT

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€ΠΎΠΉ Ρ‚ΠΈΠΏΠ° IBM PC/XT ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΏΠΎΡ€Ρ‚Ρ‹ с адрСсами 60h ΠΈ 61h.

ΠŸΠΎΡ€Ρ‚ 60h доступСн Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния. ПослС выполнСния этой ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΎΠ½ содСрТит скан-ΠΊΠΎΠ΄ послСднСй Π½Π°ΠΆΠ°Ρ‚ΠΎΠΉ клавиши.

Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΠΎΡ€Ρ‚ 61h управляСт Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€ΠΎΠΉ, ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ содСрТимого ΡΡ‚Π°Ρ€ΡˆΠ΅Π³ΠΎ Π±ΠΈΡ‚Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ состояниС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… Π±ΠΈΡ‚ΠΎΠ² этого ΠΏΠΎΡ€Ρ‚Π°. Для этого ΠΌΠΎΠΆΠ½ΠΎ сначала Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ содСрТимого ΠΏΠΎΡ€Ρ‚Π° Π² рСгистр, ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ состояниС ΡΡ‚Π°Ρ€ΡˆΠ΅Π³ΠΎ Π±ΠΈΡ‚Π°, Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ запись Π½ΠΎΠ²ΠΎΠ³ΠΎ значСния Π² ΠΏΠΎΡ€Ρ‚:

Π‘ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρ‹

Π‘ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ скоростными характСристиками ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π·Π°ΠΆΠΈΠ³Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ Π³Π°ΡΠΈΡ‚ΡŒ свСтодиоды Scroll Lock, Num Lock ΠΈ Caps Lock, располоТСнныС Π½Π° Π»ΠΈΡ†Π΅Π²ΠΎΠΉ ΠΏΠ°Π½Π΅Π»ΠΈ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹.

Для Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΠΎΠ³ΠΎ управлСния ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€ΠΎΠΉ примСняСтся ΠΏΠΎΡ€Ρ‚ 60h Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ записи. Π­Ρ‚ΠΎΡ‚ ΠΏΠΎΡ€Ρ‚ слуТит для управлСния ΠΏΠΎΠ΄Ρ‡ΠΈΠ½Π΅Π½Π½Ρ‹ΠΌ процСссором Intel 8042, отвСтствСнным Π·Π° ΠΎΠ±ΠΌΠ΅Π½ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π½Ρ‹ΠΌ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠΌ, ΠΈΠ»ΠΈ Π΅Π³ΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΎΠΌ, установлСнным Π½Π° систСмной ΠΏΠ»Π°Ρ‚Π΅ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°.

ΠŸΡ€ΠΈ использовании ΠΏΠΎΡ€Ρ‚Π° 60h Π½Π° запись ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ возмоТности:

Β· установка Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ оТидания ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠΌ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ Π² Ρ€Π΅ΠΆΠΈΠΌ Π°Π²Ρ‚ΠΎΠΏΠΎΠ²Ρ‚ΠΎΡ€Π°;

Β· установка ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Π° Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ скан-ΠΊΠΎΠ΄Π° Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Π°Π²Ρ‚ΠΎΠΏΠΎΠ²Ρ‚ΠΎΡ€Π°;

Β· ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ свСтодиодами, располоТСнными Π½Π° Π»ΠΈΡ†Π΅Π²ΠΎΠΉ ΠΏΠ°Π½Π΅Π»ΠΈ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹.

ΠŸΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€ 8042 обслуТиваСт Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρƒ, Π½ΠΎ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ систСмы ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°. Π§Π΅Ρ€Π΅Π· ΠΏΠΎΡ€Ρ‚ 64h, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, выполняСтся сброс (ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅) процСссора 80286 для Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° ΠΈΠ· Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½ΠΎΠ³ΠΎ Ρ€Π΅ΠΆΠΈΠΌΠ° Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π² Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΡΡ‚ΠΈ ΠΎΠ± этом Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΈΠ· 6 Ρ‚ΠΎΠΌΠ° Β«Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ систСмного программиста», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ называСтся Β«Π—Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ процСссоров Intel 80286/80386/80486Β».

ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ ΠΊΠ°ΠΊ ΠΏΠΎΡΡ‹Π»Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ процСссору 8042, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π΅Π³ΠΎ внутрСнняя ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄ пуста. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π² слово состояния 8042 ΠΈΠ· ΠΏΠΎΡ€Ρ‚Π° с адрСсом 64h. Π‘ΠΈΡ‚ с Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ 1 Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π²Π΅Π½ Π½ΡƒΠ»ΡŽ.

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, составлСнной Π½Π° языкС ассСмблСра, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‰ΠΈΠΉ состояниС ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ процСссора 8042:

ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° доТдСтся готовности процСссора 8042, ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡΠ»Π°Ρ‚ΡŒ Π΅ΠΌΡƒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ, записав Π΅Π΅ Π² ΠΏΠΎΡ€Ρ‚ с адрСсом 60h:

НСкоторыС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ состоят Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π±Π°ΠΉΡ‚Π°. Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π±Π°ΠΉΡ‚Ρ‹ Ρ‚Π°ΠΊΠΈΡ… ΠΊΠΎΠΌΠ°Π½Π΄ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π² ΠΏΠΎΡ€Ρ‚ 60h, ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠ±Π΅Π΄ΠΈΠ²ΡˆΠΈΡΡŒ Π² готовности процСссора 8042 с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π²Ρ‹ΡˆΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄. Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΡƒ:

Для установки характСристик Ρ€Π΅ΠΆΠΈΠΌΠ° Π°Π²Ρ‚ΠΎΠΏΠΎΠ²Ρ‚ΠΎΡ€Π° Π² ΠΏΠΎΡ€Ρ‚ 60h Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ 0F3h, Π·Π°Ρ‚Π΅ΠΌ Π±Π°ΠΉΡ‚, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠΉ характСристики Ρ€Π΅ΠΆΠΈΠΌΠ°. НиТС Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ описаниС ΠΏΠΎΠ»Π΅ΠΉ Π±Π°ΠΉΡ‚Π° Ρ€Π΅ΠΆΠΈΠΌΠ° Π°Π²Ρ‚ΠΎΠΏΠΎΠ²Ρ‚ΠΎΡ€Π°:

ΠŸΠ΅Ρ€ΠΈΠΎΠ΄ Π°Π²Ρ‚ΠΎΠΏΠΎΠ²Ρ‚ΠΎΡ€Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ опрСдСляСт количСство посылок скан-ΠΊΠΎΠ΄Π°, Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… процСссором ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ Π² ΠΎΠ΄Π½Ρƒ сСкунду. МоТно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ значСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Π½ΠΈΠΆΠ΅, Π½ΠΎ ΠΈ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, 9 ΠΈΠ»ΠΈ 15h.

Π—Π°Π΄Π΅Ρ€ΠΆΠΊΠ° Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Ρ€Π΅ΠΆΠΈΠΌΠ° Π°Π²Ρ‚ΠΎΠΏΠΎΠ²Ρ‚ΠΎΡ€Π°, mc:

Π—Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ ΠΈ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π²Π½ΠΎ Π½ΡƒΠ»ΡŽ

ΠŸΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ систСмы BIOS устанавливаСт ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ для Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Ρ€Π΅ΠΆΠΈΠΌΠ° Π°Π²Ρ‚ΠΎΠΏΠΎΠ²Ρ‚ΠΎΡ€Π° Ρ€Π°Π²Π½Ρ‹ΠΌ 500 мс ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Π΅ Π°Π²Ρ‚ΠΎΠΏΠΎΠ²Ρ‚ΠΎΡ€Π°, Ρ€Π°Π²Π½Ρ‹ΠΌ 10 ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π°ΠΌ Π² сСкунду. Если это слишком ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ для вас, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ значСния.

Для управлСния свСтодиодами, располоТСнными Π½Π° Π»ΠΈΡ†Π΅Π²ΠΎΠΉ ΠΏΠ°Π½Π΅Π»ΠΈ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ 0EDh. ВслСд Π·Π° этой ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ Π² ΠΏΠΎΡ€Ρ‚ 60h Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π±Π°ΠΉΡ‚, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚:

1 – Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ свСтодиод Scroll Lock;

0 – Π²Ρ‹ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ свСтдиод Scroll Lock

1 – Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ свСтодиод Num Lock;

0 – Π²Ρ‹ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ свСтодиод Num Lock

1 – Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ свСтодиод Caps Lock;

0 – Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ свСтодиод Caps Lock

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° KBDLED

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ KBDLED, ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ свСтодиодами, располоТСнными Π½Π° Π»ΠΈΡ†Π΅Π²ΠΎΠΉ ΠΏΠ°Π½Π΅Π»ΠΈ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ (листинг 2.1). Π’Π°ΠΊΠΎΠ΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ использовании ΠΏΠΎΡ€Ρ‚Π° 60h, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ BIOS Π½Π΅ содСрТит Π½ΠΈΠΊΠ°ΠΊΠΈΡ… подходящих для этого Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Наша ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° послС запуска Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ всС свСтодиоды ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ, ΠΏΠΎΠΊΠ° Π²Ρ‹ Π½Π΅ Π½Π°ΠΆΠΌΠ΅Ρ‚Π΅ Π»ΡŽΠ±ΡƒΡŽ ΠΊΠ»Π°Π²ΠΈΡˆΡƒ. Π—Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²Ρ‹ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ свСтодиоды.

Π—Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° KBDLED ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машинС DOS, создаваСмой, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС Microsoft Windows NT.

Листинг 2.1. Π€Π°ΠΉΠ» kbdled\kbdled.c

АппаратноС ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹

ΠšΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π° ΠΊ Π»ΠΈΠ½ΠΈΠΈ прСрывания IRQ1. Π­Ρ‚ΠΎΠΉ Π»ΠΈΠ½ΠΈΠΈ соотвСтствуСт ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ INT 09h.

ΠšΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π½ΠΎΠ΅ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ обслуТиваСтся BIOS, ΠΎΠ΄Π½Π°ΠΊΠΎ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρ‹ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ ΠΈ Ρ€Π΅Π·ΠΈΠ΄Π΅Π½Ρ‚Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ прСрывания INT 09h. Для этого ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использована Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² прСрывания.

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ прСрывания INT 09h

Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ стандартный ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π½ΠΎΠ³ΠΎ прСрывания, входящий Π² состав BIOS?

Π­Ρ‚ΠΎΡ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ выполняСт ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ дСйствия:

Β· Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ ΠΈΠ· ΠΏΠΎΡ€Ρ‚Π° 60h скан-ΠΊΠΎΠ΄ Π½Π°ΠΆΠ°Ρ‚ΠΎΠΉ клавиши;

Β· записываСт вычислСнноС ΠΏΠΎ скан-ΠΊΠΎΠ΄Ρƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° ASCII Π½Π°ΠΆΠ°Ρ‚ΠΎΠΉ клавиши Π² ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π±ΡƒΡ„Π΅Ρ€ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹, располоТСнный Π² области Π΄Π°Π½Π½Ρ‹Ρ… BIOS;

Β· устанавливаСт Π² Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ Π±ΠΈΡ‚ 7 ΠΏΠΎΡ€Ρ‚Π° 61h, Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Ρ Π΄Π°Π»ΡŒΠ½Π΅ΠΉΡˆΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹;

Β· Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ этот Π±ΠΈΡ‚ Π² исходноС состояниС;

Β· записываСт Π² ΠΏΠΎΡ€Ρ‚ 20h Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 20h для ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ прСрывания.

Π‘ΡƒΡ„Π΅Ρ€ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹

Π‘ΡƒΡ„Π΅Ρ€ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π»ΠΈΠ½Ρƒ 32 Π±Π°ΠΉΡ‚Π° ΠΈ располоТСн Π² ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ IBM PC/XT ΠΏΠΎ адрСсу 0000h:041Eh.

Π’ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°Ρ… ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ IBM PC/AT ΠΈ IBM PS/2 располоТСниС ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π½ΠΎΠ³ΠΎ Π±ΡƒΡ„Π΅Ρ€Π° задаСтся содСрТимым Π΄Π²ΡƒΡ… слов памяти с адрСсами 0000h:0480h (смСщСниС адрСса Π½Π°Ρ‡Π°Π»Π° Π±ΡƒΡ„Π΅Ρ€Π°) ΠΈ 0000h:0482h (смСщСниС ΠΊΠΎΠ½Ρ†Π° Π±ΡƒΡ„Π΅Ρ€Π°). ΠžΠ±Ρ‹Ρ‡Π½ΠΎ эти ячСйки памяти содСрТат значСния, соотвСтствСнно, 001Eh ΠΈ 003Eh. Π’Π°ΠΊ ΠΊΠ°ΠΊ смСщСния Π·Π°Π΄Π°Π½Ρ‹ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ сСгмСнтного адрСса 0040h, Ρ‚ΠΎ стандартноС располоТСниС ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π½ΠΎΠ³ΠΎ Π±ΡƒΡ„Π΅Ρ€Π° Π² IBM PC/AT ΠΈ IBM PS/2 соотвСтствуСт Π΅Π³ΠΎ Ρ€Π°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ Π² IBM PC/XT.

Π‘ΡƒΡ„Π΅Ρ€ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½ цикличСски. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ самыС старыС значСния Π±ΡƒΠ΄ΡƒΡ‚ потСряны. Π”Π²Π΅ ячСйки памяти, находящиСся Π² области Π΄Π°Π½Π½Ρ‹Ρ… BIOS с адрСсами 0000h:041Ah ΠΈ 0000h:041Ch содСрТат, соотвСтствСнно, ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° Π½Π°Ρ‡Π°Π»ΠΎ ΠΈ ΠΊΠΎΠ½Π΅Ρ† Π±ΡƒΡ„Π΅Ρ€Π°. Если значСния этих ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Ρ€Π°Π²Π½Ρ‹ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Ρƒ, Π±ΡƒΡ„Π΅Ρ€ пуст.

Π—Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ всС символы ΠΈΠ· Π±ΡƒΡ„Π΅Ρ€Π° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹, установив ΠΎΠ±Π° указатСля Π½Π° Π½Π°Ρ‡Π°Π»ΠΎ Π±ΡƒΡ„Π΅Ρ€Π°. Однако Π΅ΡΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ способ с использованиСм прСрывания BIOS INT 16h, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΡ‹ опишСм ΠΏΠΎΠ·ΠΆΠ΅ Π² этой Π³Π»Π°Π²Π΅.

УказатСлями Π½Π° Π½Π°Ρ‡Π°Π»ΠΎ ΠΈ ΠΊΠΎΠ½Π΅Ρ† ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π½ΠΎΠ³ΠΎ Π±ΡƒΡ„Π΅Ρ€Π° ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ INT 09h ΠΈ INT 16h. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ ΠΈΠ· Π±ΡƒΡ„Π΅Ρ€Π° ΠΊΠΎΠ΄Ρ‹ Π½Π°ΠΆΠ°Ρ‚Ρ‹Ρ… клавиш, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ прСрывания INT 16h.

ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ Π±ΡƒΡ„Π΅Ρ€Π° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ ΠΈΠ»ΠΈ Π±ΡƒΡ„Π΅Ρ€Π°, располоТСнного Π² области Π΄Π°Π½Π½Ρ‹Ρ… BIOS ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°-ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ прСрывания INT 09h Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Π·Π²ΡƒΠΊΠΎΠ²ΠΎΠΉ сигнал.

ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠ΅ клавиши

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π Π°Π±ΠΎΡ‚Π° с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€ΠΎΠΉ AT ΠΈ PS/2

Π’ Π·Π°ΠΌΠ΅Ρ‚ΠΊΠ΅ ΠΎΠ± ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ ΠΌΡ‹ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΠ»ΠΈΡΡŒ с ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠΌ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹. Π Π°Π±ΠΎΡ‚Π° с ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠΌ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ заслуТиваСт ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ Π·Π°ΠΌΠ΅Ρ‚ΠΊΠΈ. Π’ΠΎΡ‚ ΠΎΠ½Π°.

Π›ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π°

Π‘Ρ€Π°Π·Ρƒ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡŽ список источников:

Π’ΠΈΠΏΡ‹ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€

Π’ Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π΅ я встрСчал упоминания Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ² ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€:

Some chipsets support emulating USB keyboards and mice as standard PS/2 devices, but many chipsets don’t.

Π’ этой Π·Π°ΠΌΠ΅Ρ‚ΠΊΠ΅ ΠΌΡ‹ рассмотрим Ρ€Π°Π±ΠΎΡ‚Ρƒ с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€ΠΎΠΉ, совмСстимой с AT-PS/2.

Π”Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π»ΠΈΡ†Π°

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€ΠΎΠΉ ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… участников:

Π’ дальнСйшСм Π²Π°ΠΆΠ½ΠΎ Π½Π΅ ΠΏΡƒΡ‚Π°Ρ‚ΡŒ понятия ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ (микросхСма, располоТСнная Π½Π° матСринской ΠΏΠ»Π°Ρ‚Π΅ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°) ΠΈ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π° (устройство с клавишами, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΊ систСмному Π±Π»ΠΎΠΊΡƒ).

Π‘ΠΊΠ°Π½-ΠΊΠΎΠ΄Ρ‹

Когда ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π°ΠΆΠΈΠΌΠ°Π΅Ρ‚ ΠΊΠ»Π°Π²ΠΈΡˆΡƒ Π½Π° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π΅, ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π° посылаСт ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Ρƒ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ Ρ‚. Π½. скан-ΠΊΠΎΠ΄ β€” ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ нСсколько Π±Π°ΠΉΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ содСрТат ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚ΠΎΠΌ, какая клавиша Π±Ρ‹Π»Π° задСйствована ΠΈ Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ (Π½Π°ΠΆΠ°Π»ΠΈ Π΅Π΅ ΠΈΠ»ΠΈ отпустили). Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ клавиши ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π° посылаСт ΠΎΠ΄ΠΈΠ½ скан-ΠΊΠΎΠ΄ (make), Π° ΠΏΡ€ΠΈ отпускании β€” Π΄Ρ€ΡƒΠ³ΠΎΠΉ (break). БущСствуСт Ρ‚Ρ€ΠΈ Π½Π°Π±ΠΎΡ€Π° скан-ΠΊΠΎΠ΄ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Π°ΠΊ ΠΈ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ: Π½Π°Π±ΠΎΡ€ 1, Π½Π°Π±ΠΎΡ€ 2 ΠΈ Π½Π°Π±ΠΎΡ€ 3 (scan codes set 1, set 2, set 3). ΠšΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π° XT ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°Π±ΠΎΡ€ 1. Для ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€, совмСстимых с AT-PS/2, Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ являСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°Π±ΠΎΡ€ 2 [Chapweske], ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ ΡƒΠΌΠ΅Π΅Ρ‚ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ Π½Π°Π±ΠΎΡ€ 2 Π² Π½Π°Π±ΠΎΡ€ 1 (эту ΠΎΠΏΡ†ΠΈΡŽ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Ρ€Π° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΠΈ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ, ΠΎΠ± этом Π½ΠΈΠΆΠ΅).

Scan codes set 1

Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ скан-ΠΊΠΎΠ΄ΠΎΠ² Π½Π°Π±ΠΎΡ€Π° 1 (ΠΊΠ°ΠΊ наТатия, Ρ‚Π°ΠΊ ΠΈ отпускания) состоит ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π±Π°ΠΉΡ‚Π°. Код отпускания формируСтся Ρ‚Π°ΠΊ: break = make AND 0x80, Π³Π΄Π΅ break β€” ΠΊΠΎΠ΄ отпускания, make β€” ΠΊΠΎΠ΄ наТатия, AND β€” ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ И. Π’ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ ΠΈ Π΄Π²ΡƒΡ…Π±Π°ΠΉΡ‚ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠ΄Ρ‹. Если ΠΊΠΎΠ΄ Π΄Π²ΡƒΡ…Π±Π°ΠΉΡ‚ΠΎΠ²Ρ‹ΠΉ, Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π±Π°ΠΉΡ‚ΠΎΠΌ всСгда являСтся Π±Π°ΠΉΡ‚ 0xE0. Π’ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΎ нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ². Особняком стоят клавиши Insert ΠΈ Pause. Π£ Insert скан-ΠΊΠΎΠ΄ состоит ΠΈΠ· Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… Π±Π°ΠΉΡ‚, Ρƒ Pause β€” ΠΈΠ· ΡˆΠ΅ΡΡ‚ΠΈ, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ ΠΊΠΎΠ΄Π° отпускания Ρƒ Pause Π½Π΅Ρ‚.

КлавишаКод наТатия (make)Код отпускания (break)
A0x1E0x9E
Insert0xE0, 0x520xE0, 0xD2
Print Screen0xE0, 0x2A, 0xE0, 0x370xE0, 0xB7, 0xE0, 0xAA
Pause0xE1, 0x1D, 0x45, 0xE1, 0x9D, 0xC5β€”

Scan codes set 2

Π’ Π½Π°Π±ΠΎΡ€Π΅ 2 Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ скан-ΠΊΠΎΠ΄ΠΎΠ² наТатия (make) ΠΎΠ΄Π½ΠΎΠ±Π°ΠΉΡ‚ΠΎΠ²Ρ‹Π΅. ΠšΠΎΠ΄Ρ‹ ΠΆΠ΅ отпускания состоят ΠΈΠ· Π΄Π²ΡƒΡ… Π±Π°ΠΉΡ‚ΠΎΠ², ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… 0xF0, Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ совпадаСт со скан-ΠΊΠΎΠ΄ΠΎΠΌ наТатия. Как ΠΈ Π² Π½Π°Π±ΠΎΡ€Π΅ 1, Π² Π½Π°Π±ΠΎΡ€Π΅ 2 Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ Π΄Π²ΡƒΡ…Π±Π°ΠΉΡ‚ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠ΄Ρ‹ наТатия. И Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ Π² Π½Π°Π±ΠΎΡ€Π΅ 1, Π² Π½Π°Π±ΠΎΡ€Π΅ 2 ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π±Π°ΠΉΡ‚ΠΎΠΌ Π² Π΄Π²ΡƒΡ…Π±Π°ΠΉΡ‚ΠΎΠ²ΠΎΠΌ ΠΊΠΎΠ΄Π΅ наТатия являСтся 0xE0. Если ΠΊΠΎΠ΄ наТатия Π΄Π²ΡƒΡ…Π±Π°ΠΉΡ‚ΠΎΠ²Ρ‹ΠΉ, Ρ‚ΠΎ ΠΊΠΎΠ΄ отпускания β€” Ρ‚Ρ€Π΅Ρ…Π±Π°ΠΉΡ‚ΠΎΠ²Ρ‹ΠΉ, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Π±Π°ΠΉΡ‚Ρ‹ ΠΈΠ΄ΡƒΡ‚ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ порядкС: 0xE0, 0xF0, Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π±Π°ΠΉΡ‚ скан-ΠΊΠΎΠ΄Π° наТатия. И снова особняком стоят клавиши Insert ΠΈ Pause. Π£ Insert ΠΊΠΎΠ΄ наТатия состоит ΠΈΡ… Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… Π±Π°ΠΉΡ‚, ΠΊΠΎΠ΄ отпускания β€” ΠΈΠ· ΡˆΠ΅ΡΡ‚ΠΈ. Π£ Pause ΠΊΠΎΠ΄ наТатия состоит ΠΈΠ· восьми Π±Π°ΠΉΡ‚, Π° ΠΊΠΎΠ΄Π° отпускания Π½Π΅Ρ‚ вовсС. Π’ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ скан-ΠΊΠΎΠ΄ΠΎΠ² Π½Π°Π±ΠΎΡ€Π° 2.

КлавишаКод наТатия (make)Код отпускания (break)
A0x1C0xF0, 0x1C
Insert0xE0, 0x700xE0, 0xF0, 0x70
Print Screen0xE0, 0x12, 0xE0, 0x7C0xE0, 0xF0, 0x7C, 0xE0, 0xF0, 0x12
Pause0xE1, 0x14, 0x77, 0xE1, 0xF0, 0x14, 0xF0, 0x77β€”

Scan codes set 3

Набор 3 выглядит Π»ΡƒΡ‡ΡˆΠ΅, Ρ‡Π΅ΠΌ Π΄Π²Π° Π΅Π³ΠΎ ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²Π΅Π½Π½ΠΈΠΊΠ°, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ Π±ΠΎΠ»Π΅Π΅ рСгулярный: Π² Π½Π΅ΠΌ всС ΠΊΠΎΠ΄Ρ‹ наТатия ΠΎΠ΄Π½ΠΎΠ±Π°ΠΉΡ‚ΠΎΠ²Ρ‹Π΅, Π° всС ΠΊΠΎΠ΄Ρ‹ отпускания Π΄Π²ΡƒΡ…Π±Π°ΠΉΡ‚ΠΎΠ²Ρ‹Π΅ (ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π±Π°ΠΉΡ‚ β€” 0xF0, Π²Ρ‚ΠΎΡ€ΠΎΠΉ β€” ΠΊΠΎΠ΄ наТатия). ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π½ΠΈΠΆΠ΅.

КлавишаКод наТатия (make)Код отпускания (break)
A0x1C0xF0, 0x1C
Insert0x670xF0, 0x67
Print Screen0x570xF0, 0x57
Pause0x620xF0, 0x62

ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ скан-ΠΊΠΎΠ΄ΠΎΠ² Π² ASCII ΠΊΠΎΠ΄Ρ‹

Π‘Π°ΠΌΡ‹ΠΉ простой Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ прСобразования скан-ΠΊΠΎΠ΄ΠΎΠ² Π² ΠΊΠΎΠ΄Ρ‹ ASCII β€” это использованиС массива, элСмСнтами ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ASCII ΠΊΠΎΠ΄Ρ‹, Π° индСксами β€” скан-ΠΊΠΎΠ΄Ρ‹. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ массив для Π½Π°Π±ΠΎΡ€Π° скан-ΠΊΠΎΠ΄ΠΎΠ² 2 Π½Π° языкС ассСмблСра, ΠΌΠ½Π΅ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ скан-ΠΊΠΎΠ΄ΠΎΠ² ΠΈΠ· Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π° Π² Microsoft Excel, ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΅ ΠΏΠΎ Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°Π½ΠΈΡŽ скан-ΠΊΠΎΠ΄Π° ΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ скан-ΠΊΠΎΠ΄Ρ‹ ΠΈΠ΄ΡƒΡ‚ Π½Π΅ подряд, Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ пустыС мСста Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌΠΈ символами. Π‘Ρ‚ΠΎΠ»Π±Π΅Ρ† Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Π»ΠΈΡΡŒ ASCII ΠΊΠΎΠ΄Ρ‹, я скопировал Π² Ρ„Π°ΠΉΠ» с исходным ΠΊΠΎΠ΄ΠΎΠΌ Π½Π° языкС ассСмблСра ΠΈ получился Π²ΠΎΡ‚ Ρ‚Π°ΠΊΠΎΠΉ массив:

ΠŸΠΎΡ€Ρ‚Ρ‹ Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π° 0x64 ΠΈ 0x60

Как я ΡƒΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ», для общСния с ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠΌ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ процСссор ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΏΠΎΡ€Ρ‚Ρ‹ Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π° 0x64 ΠΈ 0x60 (эти ΠΏΠΎΡ€Ρ‚Ρ‹ связаны с нСсколькими рСгистрами ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹; Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· рСгистров β€” 1 Π±Π°ΠΉΡ‚). Π’ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π½ΠΈΠΆΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ чтСния ΠΈ записи Π² эти ΠΏΠΎΡ€Ρ‚Ρ‹.

ΠŸΠΎΡ€Ρ‚Π”ΠΎΡΡ‚ΡƒΠΏΠžΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΡΡΠ΅ΠΌΠ±Π»Π΅Ρ€Π½Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π°
0x60Π§Ρ‚Π΅Π½ΠΈΠ΅Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ Π±ΡƒΡ„Π΅Ρ€ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹in al, 0x60
0x60Π—Π°ΠΏΠΈΡΡŒΠŸΠΈΡΠ°Ρ‚ΡŒ Π²ΠΎ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ Π±ΡƒΡ„Π΅Ρ€ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹out 0x60, al
0x64Π§Ρ‚Π΅Π½ΠΈΠ΅Π§ΠΈΡ‚Π°Ρ‚ΡŒ рСгистр статуса ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹in al, 0x64
0x64Π—Π°ΠΏΠΈΡΡŒΠŸΠΎΡΠ»Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Ρƒ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹out 0x64, al

Как ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π΅Ρ‚ Π² своСй ΡΡ‚Π°Ρ‚ΡŒΠ΅ Adam Chapweske, сущСствуСт ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Π° Π² понятиях Β«Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ Π±ΡƒΡ„Π΅Ρ€Β» ΠΈ Β«Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ Π±ΡƒΡ„Π΅Ρ€Β». ΠŸΡ€ΠΈΡ‡Π΅ΠΌ ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Π° присутствуСт ΠΈ Π² Π΅Π³ΠΎ ΡΡ‚Π°Ρ‚ΡŒΠ΅ (использованиС ΠΈΠΌ Ρ„Π»Π°Π³ΠΎΠ² IBF ΠΈ OBF Π½Π΅ соотвСтствуСт Π΅Π³ΠΎ ΠΆΠ΅ понятиям ΠΎ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΌ ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΌ Π±ΡƒΡ„Π΅Ρ€Π°Ρ…). ΠœΡ‹ ΠΏΡ€ΠΈΠΌΠ΅ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ опрСдСлСния: Ссли процСссор считываСт Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· ΠΏΠΎΡ€Ρ‚Π° 0x60 (это ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅, присылаСмыС ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€ΠΎΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Ρƒ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹, Π»ΠΈΠ±ΠΎ Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Π² ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ΠΎΡ‚ процСссора), Ρ‚ΠΎ ΠΎΠ½ считываСт ΠΈΡ… ΠΈΠ· Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π±ΡƒΡ„Π΅Ρ€Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹; Ссли процСссор записываСт Π΄Π°Π½Π½Ρ‹Π΅ Π² ΠΏΠΎΡ€Ρ‚ 0x60 (ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ это, Ρ‡Ρ‚ΠΎ ΠΏΠΎΡΠ»Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π΅ Π»ΠΈΠ±ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ для ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΎΠ½ послал ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Ρƒ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ β€” ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ… Ρ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ Ρ€Π°Π·Π΄Π΅Π» Π½ΠΈΠΆΠ΅), Ρ‚ΠΎ ΠΎΠ½ записываСт ΠΈΡ… Π²ΠΎ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ Π±ΡƒΡ„Π΅Ρ€ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹.

Нам понадобится ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ Π±ΡƒΡ„Π΅Ρ€ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ скан-ΠΊΠΎΠ΄Ρ‹ Π½Π°ΠΆΠΈΠΌΠ°Π΅ΠΌΡ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ клавиш. Когда Π² Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ Π±ΡƒΡ„Π΅Ρ€ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ поступаСт ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ Π±Π°ΠΉΡ‚, присланный ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€ΠΎΠΉ, устанавливаСтся Π² 1 Ρ„Π»Π°Π³ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Output Buffer Full (OBF) β€” самый младший Π±ΠΈΡ‚ рСгистра статуса ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹, ΠΈ гСнСрируСтся ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ IRQ1. Когда Π²Ρ‹ считываСтС Π±Π°ΠΉΡ‚ ΠΈΠ· Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π±ΡƒΡ„Π΅Ρ€Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹, Ρ„Π»Π°Π³ OBF сбрасываСтся Π² 0. ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π±ΡƒΡ„Π΅Ρ€Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹, слСдуСт ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Ρ„Π»Π°Π³ OBF установлСн Π² 1 β€” для этого Π½Π°Π΄ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ рСгистра статуса. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ чтСния Π±Π°ΠΉΡ‚Π° ΠΈΠ· Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π±ΡƒΡ„Π΅Ρ€Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ я помСстил Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Keyboard_ReadOutputBuffer (см. Ρ€Π°Π·Π΄Π΅Π» Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄). Однако Ссли Π²Ρ‹ Ρ‡ΠΈΡ‚Π°Π΅Ρ‚Π΅ Π±Π°ΠΉΡ‚Ρ‹ ΠΈΠ· Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π±ΡƒΡ„Π΅Ρ€Π° Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° прСрывания IRQ1, Ρ‚ΠΎ ΠΈ Ρ‚Π°ΠΊ понятно, Ρ‡Ρ‚ΠΎ Ρ„Π»Π°Π³ OBF установлСн ΠΈ ΡƒΠ±Π΅ΠΆΠ΄Π°Ρ‚ΡŒΡΡ Π² этом лишний Ρ€Π°Π· Π½Π΅Ρ‚ нСобходимости.

Π£ нас Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π²ΠΎ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ Π±ΡƒΡ„Π΅Ρ€ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹. Вакая Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ Π² Π΄Π²ΡƒΡ… случаях:

Π’ любом случаС, ΠΏΡ€ΠΈ записи Π΄Π°Π½Π½Ρ‹Ρ… Π²ΠΎ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ Π±ΡƒΡ„Π΅Ρ€ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ Π½Π°Π΄ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Ρ„Π»Π°Π³ Input Buffer Full (IBF) β€” ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ послС OBF Π±ΠΈΡ‚ рСгистра статуса ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹. Π—Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ Π±Π°ΠΉΡ‚ Π²ΠΎ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ Π±ΡƒΡ„Π΅Ρ€ ΠΌΠΎΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли Ρ„Π»Π°Π³ IBF ΡΠ±Ρ€ΠΎΡˆΠ΅Π½ Π² 0. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ записи Π±Π°ΠΉΡ‚Π° Π² Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ Π±ΡƒΡ„Π΅Ρ€ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ я помСстил Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Keyboard_WriteInputBuffer (см. Ρ€Π°Π·Π΄Π΅Π» Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄).

ΠšΠΎΠΌΠ°Π½Π΄Ρ‹

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΡΡ‹Π»Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Ρƒ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ ΠΈ самой ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π΅ появилась Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Π² ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π΅ AT. Π’ PS/2 Π±Ρ‹Π»ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π½ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹. ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ процСссору ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΡ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ устройства ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ рСгистр статуса ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹) ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ устройства (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΡŽ прСрывания IRQ1 ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠΌ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹). ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ (аналогия с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ). Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ выполнСния ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ устройство, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΊΠΎΠΌΠ°Π½Π΄Π° адрСсована, присылаСт Π² ΠΎΡ‚Π²Π΅Ρ‚ Π½Π΅ΠΊΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ (аналогия с Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ). ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ ΠΈ сама ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π° ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‰ΠΈΠ΅ΡΡ Π½Π°Π±ΠΎΡ€Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄, ΠΎΠ½ΠΈ рассмотрСны Π½ΠΈΠΆΠ΅.

ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Ρƒ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹

Команда прСдставляСт собой число Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ ΠΎΠ΄ΠΈΠ½ Π±Π°ΠΉΡ‚. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΠ»Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Ρƒ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹, процСссор Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π΅Π΅ Π² ΠΏΠΎΡ€Ρ‚ 0x64. Если Ρƒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π΅ΡΡ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, Ρ‚ΠΎ ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ записаны Π²ΠΎ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ Π±ΡƒΡ„Π΅Ρ€ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° (ΠΏΠΎΡ€Ρ‚ 0x60). Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ выполнСния Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Π² свой Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ Π±ΡƒΡ„Π΅Ρ€ число (Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈΠ· ΠΏΠΎΡ€Ρ‚Π° 0x60) β€” Π½Π΅ΠΊΠΈΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, Π°Π½Π°Π»ΠΎΠ³ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния Π² функциях. Π’ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ для ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ (Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π½Ρ‹ΠΉ список Π΅ΡΡ‚ΡŒ Π² [Chapweske] ΠΈ [НСсвиТский]).

НазваниС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ΠšΠΎΠ΄ командыАргумСнтыВозвращаСмоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
Read Command Byte0x20Π½Π΅Ρ‚command byte
Write Command Byte0x60command byteΠ½Π΅Ρ‚
Keyboard interface test0xABΠ½Π΅Ρ‚0x00 β€” ok;
0x01 β€” сlock line stuck low;
0x02 β€” clock line stuck high;
0x03 β€” data line stuck low;
0x04 β€” data line stuck high
Mouse interface test0xA9Π½Π΅Ρ‚0x00 β€” ok;
0x01 β€” сlock line stuck low;
0x02 β€” clock line stuck high;
0x03 β€” data line stuck low;
0x04 β€” data line stuck high
Controller self-test0xAAΠ½Π΅Ρ‚0x55 β€” ok
Enable mouse interface0xA8Π½Π΅Ρ‚Π½Π΅Ρ‚
Disable mouse interface0xA7Π½Π΅Ρ‚Π½Π΅Ρ‚

Из всСх ΠΊΠΎΠΌΠ°Π½Π΄ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½Ρ‹ΠΌΠΈ ΠΌΠ½Π΅ каТутся ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Read Command Byte ΠΈ Write Command Byte. Command Byte β€” это 8-разрядный рСгистр ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит Ρ„Π»Π°Π³ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π»ΠΈΡΡŽΡ‚ Π½Π° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° (см. Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Π½ΠΈΠΆΠ΅).

76543210
ATβ€”XLATPCENOVRSYSβ€”INT
PS/2β€”XLATEN2ENβ€”SYSINT2INT

НаиболСС Π²Π°ΠΆΠ½Ρ‹ΠΌΠΈ ΠΌΠ½Π΅ каТутся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„Π»Π°Π³ΠΈ (ΠΎΠ± ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… Ρ„Π»Π°Π³Π°Ρ… Ρ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ Π² [Chapweske]):

Π—Π°ΠΏΠΈΡΡŒ Π±Π°ΠΉΡ‚Π° Π² ΠΏΠΎΡ€Ρ‚ 0x64 я помСстил Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Keyboard_SendCommand (см. Ρ€Π°Π·Π΄Π΅Π» Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄). ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ β€” Π½Π΅Ρ‚, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ β€” Π½Π΅Ρ‚, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Keyboard_SendCommand слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ вмСстС с функциями Keyboard_WriteInputBuffer (Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹) ΠΈ Keyboard_ReadOutputBuffer (Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅). Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° использования этих Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Ρ‚Ρ€Π°Π½ΡΠ»ΡΡ†ΠΈΡŽ скан-ΠΊΠΎΠ΄ΠΎΠ² Π² Π½Π°Π±ΠΎΡ€ 1: сначала ΠΎΠ½ считываСт command byte ΠΈΠ· ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ Π² рСгистр al, Π·Π°Ρ‚Π΅ΠΌ сбрасываСт Π±ΠΈΡ‚ XLAT Π² рСгистрС al Π² 0, Π° ΠΏΠΎΡ‚ΠΎΠΌ записываСт содСрТимоС рСгистра al ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² command byte.

ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π΅

Команда ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π΅ прСдставляСт собой число Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 1 Π±Π°ΠΉΡ‚. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΠ»Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π΅, Π΅Π΅ Π½Π°Π΄ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π²ΠΎ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ Π±ΡƒΡ„Π΅Ρ€ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ (ΠΏΠΎΡ€Ρ‚ 0x60). ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ пСрСсылаСт ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π΅ Π»ΡŽΠ±Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, записанныС Π² Π΅Π³ΠΎ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ Π±ΡƒΡ„Π΅Ρ€ (Ссли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ½ΠΈ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Ρƒ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹). Команда ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹. АргумСнты Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ записаны Π²ΠΎ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ Π±ΡƒΡ„Π΅Ρ€ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ нСпосрСдствСнно послС самой ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹. Π’ ΠΎΡ‚Π²Π΅Ρ‚ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π° всСгда присылаСт Π±Π°ΠΉΡ‚ 0xFA (Acknowledge), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π° принята ΠΈΠ»ΠΈ 0xFE (Resend), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ с ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ пошло Π½Π΅ Ρ‚Π°ΠΊ. Π­Ρ‚ΠΎΡ‚ Π±Π°ΠΉΡ‚ Π½ΡƒΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈΠ· Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π±ΡƒΡ„Π΅Ρ€Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹. НСкоторыС Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½Ρ‹Π΅ с ΠΌΠΎΠ΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π΅ пСрСчислСны Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π½ΠΈΠΆΠ΅:

НазваниС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ΠšΠΎΠ΄ командыАргумСнтыВозвращаСмоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
RESEND0xFEнСтпослСдний посланный Π±Π°ΠΉΡ‚ ΠΈΠ»ΠΈ 0xFE (Resend)
DISABLE0xF5Π½Π΅Ρ‚0xFA (Acknowledge) ΠΈΠ»ΠΈ 0xFE (Resend)
ENABLE0xF4Π½Π΅Ρ‚0xFA (Acknowledge) ΠΈΠ»ΠΈ 0xFE (Resend)
SET_SCAN_CODE_SET0xF00x01, 0x02 ΠΈΠ»ΠΈ 0x030xFA (Acknowledge) ΠΈΠ»ΠΈ 0xFE (Resend)
Echo0xEEΠ½Π΅Ρ‚0xEE (Echo) ΠΈΠ»ΠΈ 0xFE (Resend)
Set/Reset LEDs0xEDбитовая маска: Π±ΠΈΡ‚ 0 β€” ScrollLock, Π±ΠΈΡ‚ 1 β€” NumLock, Π±ΠΈΡ‚ 2 β€” CapsLock0xFA (Acknowledge) ΠΈΠ»ΠΈ 0xFE (Resend)

Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° посылки ΠΊΠΎΠΌΠ°Π½Π΄ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρƒ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сначала посылаСт ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ сканированиС (Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΡΡ‹Π»Π°Ρ‚ΡŒ систСмному Π±Π»ΠΎΠΊΡƒ скан-ΠΊΠΎΠ΄Ρ‹ ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ клавиш), Π° Π·Π°Ρ‚Π΅ΠΌ β€” ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ сканированиС.

; Disable keyboard
push word KEYBOARD_COMMAND_DISABLE
call Keyboard_WriteInputBuffer
call Keyboard_ReadOutputBuffer

; Enable keyboard
push word KEYBOARD_COMMAND_ENABLE
call Keyboard_WriteInputBuffer
call Keyboard_ReadOutputBuffer

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ β€” Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€ΠΎΠΉ

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ макроопрСдСлСния для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€ΠΎΠΉ я помСстил Π² Ρ„Π°ΠΉΠ» keyboard.inc.

; AT-PS/2 Keyboard Controller Status Register Bits
KEYBOARD_CONTROLLER_STATUS_PERR equ 10000000b
KEYBOARD_CONTROLLER_STATUS_RxTO equ 01000000b
KEYBOARD_CONTROLLER_STATUS_TO equ 01000000b
KEYBOARD_CONTROLLER_STATUS_TxTO equ 00100000b
KEYBOARD_CONTROLLER_STATUS_MOBF equ 00100000b
KEYBOARD_CONTROLLER_STATUS_INH equ 00010000b
KEYBOARD_CONTROLLER_STATUS_A2 equ 00001000b
KEYBOARD_CONTROLLER_STATUS_SYS equ 00000100b
KEYBOARD_CONTROLLER_STATUS_IBF equ 00000010b ; if IBF=0, Input Buffer is empty and you can write data to it; if IBF=1 Input Biffer is full and you shouldn’t write data to it
KEYBOARD_CONTROLLER_STATUS_OBF equ 00000001b ; if OBF=1, Output Buffer is full and you can read data from it; if OBF=0 Output Buffer is empty and you shouldn’t read data from it

; AT-PS/2 Keyboard Commands (do not confuse «Keyboard» and «Keyboard Controller»)
KEYBOARD_COMMAND_RESET equ 0xFF ; Causes keyboard to enter «Reset» mode
KEYBOARD_COMMAND_RESEND equ 0xFE ; Used to indicate an error in reception.
KEYBOARD_COMMAND_SET_KEY_TYPE_MAKE equ 0xFD ; Allows the host to specify a key that is to send only make codes.
KEYBOARD_COMMAND_SET_KEY_TYPE_MAKE_BREAK equ 0xFC ; Similar to «Set Key Type Make», but both make codes and break codes are enabled (typematic is disabled).
KEYBOARD_COMMAND_SET_KEY_TYPE_TYPEMATIC equ 0xFB ; Similar to previous two commands, except make and typematic is enabled; break codes are disabled.
KEYBOARD_COMMAND_SET_ALL_KEYS_TYPEMATIC_MAKE_BREAK equ 0xFA ; Default setting. Make codes, break codes, and typematic repeat enabled for all keys.
KEYBOARD_COMMAND_SET_ALL_KEYS_MAKE equ 0xF9 ; Causes only make codes to be sent; break codes and typematic repeat are disabled for all keys.
KEYBOARD_COMMAND_SET_ALL_KEYS_MAKE_BREAK equ 0xF8 ; Similar to the previous two commands, except only typematic repeat is disabled.
KEYBOARD_COMMAND_SET_ALL_KEYS_TYPEMATIC equ 0xF7 ; Similar to the previous three commands, except only break codes are disabled. Make codes and typematic repeat are enabled.
KEYBOARD_COMMAND_SET_DEFAULT equ 0xF6 ; Load default typematic rate/delay (10.9cps / 500ms), key types (all keys typematic/make/break), and scan code set (2).
KEYBOARD_COMMAND_DISABLE equ 0xF5 ; Keyboard stops scanning, loads default values (see «Set Default» command), and waits further instructions.
KEYBOARD_COMMAND_ENABLE equ 0xF4 ; Reenables keyboard after disabled using previous command.
KEYBOARD_COMMAND_SET_TYPEMATIC_RATE_DELAY equ 0xF3 ; Host follows this command with one argument byte that defines the typematic rate and delay.
KEYBOARD_COMMAND_SET_SCAN_CODE_SET equ 0xF0 ; Host follows this command with one argument byte, that specifies which scan code set the keyboard should use.
KEYBOARD_COMMAND_ECHO equ 0xEE ; The keyboard responds with «Echo» (0xEE).
KEYBOARD_COMMAND_SET_RESET_LEDS equ 0xED ; The host follows this command with one argument byte, that specifies the state of the keyboard’s Num Lock, Caps Lock, and Scroll Lock LEDs.

; Flags that can be combined to form an argument of command KEYBOARD_COMMAND_SET_RESET_LEDS
KEYBOARD_LED_CAPS_LOCK equ 00000100b
KEYBOARD_LED_NUM_LOCK equ 00000010b
KEYBOARD_LED_SCROLL_LOCK equ 00000001b

; Parts of scan codes
KEYBOARD_SPECIAL_KEY equ 0xE0
KEYBOARD_BREAK_KEY equ 0xF0

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° прСрывания IRQ1 ΠΎΡ‚ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹

ΠŸΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ IRQ1 гСнСрируСтся для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π±Π°ΠΉΡ‚Π° скан-ΠΊΠΎΠ΄Π° Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Ρ‚. Π΅. Ссли Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π°ΠΆΠ°Π» ΠΊΠ»Π°Π²ΠΈΡˆΡƒ Insert, скан-ΠΊΠΎΠ΄ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π² Π½Π°Π±ΠΎΡ€Π΅ 2 состоит ΠΈΠ· Π΄Π²ΡƒΡ… Π±Π°ΠΉΡ‚ (0xE0, 0x70), Ρ‚ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ сгСнСрируСтся Π΄Π²Π° прСрывания IRQ1. ΠΊΠΎΠ΄ отпускания клавиши Insert состоит ΠΈΠ· Ρ‚Ρ€Π΅Ρ… Π±Π°ΠΉΡ‚, поэтому ΠΏΡ€ΠΈ Π΅Π΅ отпускании сгСнСрируСтся Ρ‚Ρ€ΠΈ прСрывания IRQ1. НиТС ΠΏΠΎΠΊΠ°Π·Π°Π½ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ прСрывания IRQ1, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ прСдполагаСтся, Ρ‡Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ scan code set 2. ΠŸΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ Π½Π° ΠΊΠ»Π°Π²ΠΈΡˆΡƒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ прСрывания Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ скан-ΠΊΠΎΠ΄, пСрСвСсти Π΅Π³ΠΎ Π² ASCII-ΠΊΠΎΠ΄ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ символа ΠΈ вывСсти символ Π½Π° экран.

; cursor position (0. 1999). initial value of 160 places the cursor to the 4th row on the screen.
cursor dd 240

. exit :
pop edi
pop ax
jmp int_EOI

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *