スキャンコード (scancode) とは、コンピュータのキーボードのキーが押されたり離されたりしたときに、キーボードからCPUに送られるコード(符号)のこと。走査コード(そうさコード)ともいう。 コンピュータのキーボードでは、たとえば「A」のキーを押した場合、「A」という文字の文字コード(ASCIIコードなど)が直接送られるわけではない。 キーボードコントローラは、キーの押下あるいは解放を検出すると、そのキーに固有のスキャンコードをCPUに送る。スキャンコードは、キーボードのキーを物理的に識別するものであり、そのキーの表す文字や機能とは関係ない。CPUはスキャンコードを受け取ると、キー配列の設定や修飾キー・ロックキーなどの状態を参照して、該当する文字の入力として受理したり、修飾キーやファンクションキーの処理を実行したりする。 キーが押されたときに発生するスキャンコードをメイク (make) コード、離されたときに発生するものをブレイク (break) コードという。同じキーのメイクとブレイクはMSBやプレフィクスコードによって区別されることが多い。オートリピート(タイプマティック)の処理をキーボード側で行う場合、キーが押されている間、メイクコードを周期的に発生する。 スキャンコードの体系はコンピュータの機種によって異なる。また、インタフェース規格によって決まっていることもある。さらに、同じ機種・インタフェースであっても、複数の体系をもっている場合もある。そのため、オペレーティングシステム (OS) は受け取ったスキャンコードをOS独自の仮想キーコードに変換・統一してから扱うのが一般的である。 キーボードには、国や言語によってJIS配列・US配列などさまざまなキー配列があるが、同じ機種用・同じインタフェースのキーボードであれば、キートップの刻印にかかわらず、物理的に同じ位置にあるキーは同じスキャンコードを発生するのが普通である(たとえば、パーソナルコンピュータ (PC) のキーボードでは、「1」の左のキーはJIS配列では「半角/全角」、US配列では「` ~」であるが、スキャンコードは同じ)。 すなわち、キートップの刻印の違いは多くの場合表面的なもので、物理的な配列が類似していれば、スキャンコードのレベルではほとんど変わりがない(特に欧州各国のキーボードのように、物理的なキー配列に差がない場合は、刻印を無視すればまったく同一のキーボードとみなせる)。 したがって、JIS配列キーボードにUS配列の設定を適用するなどしても、ほとんどのキーは問題なくUS配列として動作する(一部、物理的にキーの有無や位置が異なるものについては、この限りではない)。 PC/AT互換機のスキャンコードは、歴史的な経緯により複雑な体系となっている。 以下、スキャンコードの値を16進数2桁で表す。 今日のPC/AT互換機では、キーボードはスキャンコードセット2を発生し、本体のキーボードコントローラがこれをセット1に変換してCPUに送るのが一般的である。(この変換をしない設定にもできる。PCやPC/XTにはこの変換がないためセット1しか受け付けない)ただし、ノートPCでは直接セット1を発生し変換しないものがある。
目次
1 概要
2 キー配列とスキャンコード
3 PC/AT・PS/2キーボードのスキャンコード
4 Macintosh ADBキーボードのスキャンコード
5 PC-9800キーボードのスキャンコード
6 USBキーボードのUsage
7 関連項目
8 外部リンク
概要
キー配列とスキャンコード
PC/AT・PS/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で表す。
Size:16 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)』
担当:undef