スキャンコード
[Wikipedia|▼Menu]

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

1 概要

2 キー配列とスキャンコード

3 PC/AT・PS/2キーボードのスキャンコード

4 Macintosh ADBキーボードのスキャンコード

5 PC-9800キーボードのスキャンコード

6 USBキーボードのUsage

7 関連項目

8 外部リンク

概要

コンピュータのキーボードでは、たとえば「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がつく。

従来テンキーと兼用していたカーソルキーInsertDeleteHomeEndPageUp、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やPC/XTにはこの変換がないためセット1しか受け付けない)ただし、ノートPCでは直接セット1を発生し変換しないものがある。


次ページ
記事の検索
おまかせリスト
▼オプションを表示
ブックマーク登録
mixiチェック!
Twitterに投稿
オプション/リンク一覧
話題のニュース
列車運行情報
暇つぶしWikipedia

Size:16 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)
担当:undef