Web Analytics
Privacy Policy Cookie Policy Terms and Conditions スキャンコード - Wikipedia

スキャンコード

出典: フリー百科事典『ウィキペディア(Wikipedia)』

スキャンコード (scancode) とは、コンピュータキーボードのキーが押されたり離されたりしたときに、キーボードからCPUに送られるコード(符号)のこと。 走査コード(そうさコード)ともいう。

目次

[編集] 概要

コンピュータのキーボードでは、たとえば「A」のキーを押した場合、「A」という文字の文字コードASCIIコードなど)が直接送られるわけではない。

キーボードコントローラは、キーの押下あるいは解放を検出すると、そのキーに固有のスキャンコードをCPUに送る。 スキャンコードは、キーボードのキーを物理的に識別するものであり、そのキーの表す文字や機能とは関係ない。 CPUはスキャンコードを受け取ると、キー配列の設定や修飾キー・ロックキーなどの状態を参照して、該当する文字の入力として受理したり、修飾キーやファンクションキーの処理を実行したりする。

キーが押されたときに発生するスキャンコードをメイク (make) コード、離されたときに発生するものをブレイク (break) コードという。同じキーのメイクとブレイクはMSBやプレフィクスコードによって区別されることが多い。 オートリピート(タイプマティック)の処理をキーボード側で行う場合、キーが押されている間、メイクコードを周期的に発生する。

スキャンコードの体系はコンピュータの機種によって異なる。また、インターフェイス規格によって決まっていることもある。 さらに、同じ機種・インターフェイスであっても、複数の体系をもっている場合もある。 そのため、OSは受け取ったスキャンコードをOS独自の仮想キーコードに変換・統一してから扱うのが一般的である。

[編集] キー配列とスキャンコード

キーボードには、国や言語によってJIS配列・US配列などさまざまなキー配列があるが、同じ機種用・同じインターフェイスのキーボードであれば、キートップの刻印にかかわらず、物理的に同じ位置にあるキーは同じスキャンコードを発生するのが普通である(たとえば、PCのキーボードでは、「1」の左のキーはJIS配列では「半角/全角」、US配列では「` ~」であるが、スキャンコードは同じ)。

すなわち、キートップの刻印の違いは多くの場合表面的なもので、物理的な配列が類似していれば、スキャンコードのレベルではほとんど変わりがない(特に欧州各国のキーボードのように、物理的なキー配列に差がない場合は、刻印を無視すればまったく同一のキーボードとみなせる)。

したがって、JIS配列キーボードにUS配列の設定を適用するなどしても、ほとんどのキーは問題なくUS配列として動作する(一部、物理的にキーの有無や位置が異なるものについては、この限りではない)。

[編集] PC/AT・PS/2キーボードのスキャンコード

PC/AT互換機のスキャンコードは、歴史的な経緯により複雑な体系となっている。 以下、スキャンコードの値を16進数2桁で表す。

83キーボード(IBM PC, PC/XT)
  • 最初の製品であるためスキャンコードは整然としている(01~53)。ブレイクはMSBを立てることで示す。
84キーボード(PC/AT)
  • 物理的な配置は一部変更されたが、スキャンコードは変わっていない。SysReqキーが追加された(54)。
101拡張キーボード(PC/AT)
  • キーが大幅に追加された。
  • 右Ctrl・右Alt・テンキーのEnter・テンキーの/は、それぞれ左Ctrl(1D)・左Alt(38)・Enter(1C)・/(35)にプレフィクスE0がつく。
  • 従来テンキーと兼用していたカーソルキー、Insert、Delete、Home、End、PageUp、PageDownが独立した。それぞれ対応するテンキーのコードにプレフィクスE0がつく。
  • F11(57)、F12(58)は新規のコード。
  • PrintScreenキーは83/84キーボードではShift(2A)+テンキーの*(37)だったため、E0 2A E0 37を発生する。
  • SysReqキー(54)がなくなり、Alt+PrintScreenとなったため、Alt+PrintScreenで54を発生する。
  • Pauseキーは83/84キーボードではCtrl(1D)+NumLock(45)だったため、E1 1D 45を発生する。また、オートリピートの対象外であり、すぐにブレイクコード(E1 9D C5)を発生する。
  • Ctrl+Pause(Break)キーは83/84キーボードのScroll Lock(46)にならってE0 46を発生する。また、オートリピートの対象外であり、すぐにブレイクコード(E0 C6)を発生する。
101拡張キーボード(PS/2)
  • 従来のコード体系をコードセット1とし、新たにコードセット2と3が定義された。
  • コードセット2は、コードの値は一新されているものの、コードセット1のプレフィクスや歴史的特例などは保たれており、セット2からセット1に機械的に変換可能。ただしブレイクはプレフィクスF0で表す。
  • コードセット3はさらに整然とした体系として再定義されており、コードセット1/2のプレフィクスや特例は廃止され、すべてのキーがシンプルな1バイトのメイクコードを発生する。コードの値はセット2とおおむね共通(一部異なる)。ブレイクはプレフィクスF0で表す。

今日のPC/AT互換機では、キーボードはスキャンコードセット2を発生し、キーボードコントローラがこれをセット1に変換してCPUに送るのが一般的である。ただし、ノートPCではセット1を発生するものがある。セット3は使われていない(UNIXワークステーションのキーボードでセット3を発生するものがあるが、このようなものはPCのBIOSやOSでは通常使うことができない)。

[編集] Macintosh ADBキーボードのスキャンコード

(スタブ)

[編集] PC-9800キーボードのスキャンコード

PC-9800/9821シリーズのキーボードは、いくつかのキーが追加された程度で大きな変化がなかったため、スキャンコードも整然としている。 ブレイクはMSBを立てることで表す。 左右のSHIFTキーを区別することはできない。

なお、PC-9800シリーズの資料ではスキャンコードでなくキーコードと呼んでいる。

[編集] USBキーボードのUsage ID

USBでは、キーボードはHIDデバイスクラスに含まれており、スキャンコードに相当するものはUsage IDという用語で呼ぶ。

一般的なキーボードでは、押されたり離されたりしたキーのスキャンコードだけを送るが、USBキーボードのデータの送信方法はこれとはかなり異なり、HIDレポートというパケット形式で、そのときに押されているすべてのキーの情報を静的に送る。そのため、以下のような性質がある。

  • Aキーを押したままBキーを押すと、Bキーを押した時点で送られるHIDレポートには、AキーとBキーの両方のUsage IDが含まれる。そのため、今回新たに押されたのはBキーであるということは、本体側で判定する必要がある。
  • キーを離した場合にも、どのキーが離されたかを送るのではなく、離した後の状態を送るため、キーが離されたことはやはり本体側で判定する必要がある(したがって、ブレイクコードに相当するものはない)。

また、オートリピートやLEDの制御もキーボード内部では行わない。 キーボードは単なるスイッチに徹するという思想で設計されているということができる。

HIDレポートは通常8バイトで、先頭バイトは、そのとき押されている修飾キーを示す8ビットのフラグである。 PC用キーボードのAltキー・WindowsキーとMac用キーボードのOptionキー・Commandキーはそれぞれ同じに扱われる。 HIDレポートの後ろ6バイトは、そのとき押されているキー(最大6個、修飾キーは除く)のUsage IDが入る。 ロックキーも一般のキーと同様に扱われる。

USBは特定の機種に依存したものではないため、キーボードもPC・Mac・PC-98・UNIXワークステーションなどさまざまな機種間でなるべく共通化できるように定められている。 そのため、異なる機種用のUSBキーボードを接続しても、基本的には操作が可能である。

最近のキーボードは、CDDVDなどを再生する「マルチメディアキー」や、Webブラウザメーラーなどを起動する「インスタントキー」を備えているものが少なくないが、USBキーボードのUsage IDの定義にはこれらのキーは含まれていない(音量調節関連キーは例外)。 このようなキーを備えるUSBキーボードは、内部的にはHIDキーボードデバイスとHIDコンシューマーデバイス(リモコンなどの類)の複合デバイスになっており、これらのキーは通常キーボードデバイスではなくコンシューマーデバイスに属している(つまり、リモコンなどのボタンの一種として扱われている)。

[編集] 関連項目

[編集] 外部リンク

他の言語
THIS WEB:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia 2008 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2007:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia 2006:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu