ifno(AT)keyboard
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
*AT互換機のPS/2キーボードコントローラ
-コントローラは8042
-I/Oポート
|アドレス(hex)|wide|R/W|デバイス|説明|備考|h
|0060|byte|R|KBC|KBCデータポート/キーボードデータ||
|0060|byte|W|KBC|KBCデータ出力||
|0064|byte|R|KBC|ステータスレジスタ||
|0064|byte|W|KBC|KBC制御コマンド出力||
-ステータスレジスタについて
--I/Oポート0064をバイトリードすると読める
--bit0:1==データポートにキーデータが来ている
---このbitが1になっていたら速やかに0060を読んでデータを受...
---IRQ-1は、ここが0→1になると発生すると考えてよい
--bit1:0==キーボードコントローラに送信データを送ってよい
--bit2:システムフラグ(起動後に0になる)
--bit3:キーボードへ送信中のデータは、1==コマンド、0==デ...
---これは、0064に書き込むと自動的に1になり、0060に書き込...
--bit4:1==キーボードは入力可能状態(enable)になっている
--bit5:1==データ送信エラー
---データポートにキーデータが来ているのに、受け取らないで...
--bit6:1==データ受信エラー
--bit7:パリティビットなので基本的に気にしなくてよいと思う
---0==奇数パリティ、1==偶数パリティ
-キーコード
--基本:0060から読み取った値の、bit0-6がキーコード、bit7...
--以下に見るとおり、Aを押したらAの文字コードが送信されて...
---まあ逆にいえば、キー配置を変える(たとえばShiftとCtrl...
--一般キーコード
|00:割り当てなし(これはこないはず) |10:Q ...
|01:ESC |11:W ...
|02:フルキーの1 |12:E ...
|03:フルキーの2 |13:R ...
|04:フルキーの3 |14:T ...
|05:フルキーの4 |15:Y ...
|06:フルキーの5 |16:U ...
|07:フルキーの6 |17:I ...
|08:フルキーの7 |18:O ...
|09:フルキーの8 |19:P ...
|0A:フルキーの9 |1A:@(英語キーボ...
|0B:フルキーの0 |1B:[(英語キーボ...
|0C:フルキーの- |1C:フルキーのEnt...
|0D:フルキーの^(英語キーボードでは=)|1D:左Ctrl ...
|0E:バックスペース |1E:A ...
|0F:タブキー |1F:S ...
|30:B |40:F6 |50:テンキーの2|60:リザ...
|31:N |41:F7 |51:テンキーの3|61:リザ...
|32:M |42:F8 |52:テンキーの0|62:リザ...
|33:, |43:F9 |53:テンキーの.|63:リザ...
|34:. |44:F10 |54:SysReq |64:リザ...
|35:/ |45:NumLock |55:リザーブ? |65:リザ...
|36:右Shift |46:ScrollLock |56:リザーブ? |66:リザ...
|37:テンキーの*|47:テンキーの7|57:F11 |67:リザ...
|38:左Alt |48:テンキーの8|58:F12 |68:リザ...
|39:スペース |49:テンキーの9|59:リザーブ? |69:リザ...
|3A:CapsLock |4A:テンキーの-|5A:リザーブ? |6A:リザ...
|3B:F1 |4B:テンキーの4|5B:リザーブ? |6B:リザ...
|3C:F2 |4C:テンキーの5|5C:リザーブ? |6C:リザ...
|3D:F3 |4D:テンキーの6|5D: リザーブ? |6D:リザ...
|3E:F4 |4E:テンキーの+|5E:リザーブ? |6E:リザ...
|3F:F5 |4F:テンキーの1|5F:リザーブ? |6F:リザ...
---註:
---00はキーボードエラーを意味する。
--E0拡張キーコード
---これは E0 1C などの形式で送られてくる。メイクは E0 1C ...
|E0 1C:テンキーのEnter|E0 49:PageUp |E0 5B:左Windows|
|E0 1D:右Ctrl |E0 4B:← |E0 5C:右Windows|
|E0 35:テンキーの/ |E0 4D:→ |E0 5D:メニュー?...
|E0 37:PrintScreen |E0 4F:End ||
|E0 38:右Alt |E0 50:↓ ||
|E0 46:Break |E0 51:PageDown||
|E0 47:Home |E0 52:Insert ||
|E0 48:↑ |E0 53:Delete ||
---以下のキーコードは、実際のキー入力と関わりなく送られて...
|E0 2A:無視|E0 AA:無視|
|E0 36:無視|E0 B6:無視|
--E1拡張キーコード
---これは2種類しかない
|E1 1D 45:Pauseのメイク|E1 9D C5:Pauseのブレイク|
-キーのリピート
--リピートは、ブレイクすることなくメイクが送られてくるこ...
--BreakとPauseはリピートが発生しない
-LEDの制御など
--NumLockやCapsLockなどのLEDの制御には、次の方法でキーボ...
---1.ステータスレジスタを読んで、bit1が0になるのを待つ。
---2.データ出力(0060のこと)に、送りたい1バイトを書く。
---3.キーボードから1バイト通知が来るのを待つ。これはキー...
---4.その通知が0xfaであれば、その1バイトは正しくキーボー...
--LED制御の場合は、上記の手法を2回やって、 ED xx というデ...
--その他のコマンドとして以下のものがある。
---EE:このコマンドはキーボードが正常に動作しているかどう...
---F0 xx:このコマンドはキーボードのスキャンコード(キー...
---F2:このコマンドを送ると、2バイトのキーボードIDが通知...
---F3 xx:このコマンドはキーリピート間隔を設定する。xxのb...
---F4:キーボード入力を可能にする(キーボードイネーブル)...
---F5:キーボード初期化&キーボードディゼーブル。設定を電...
---F6:キーボード初期化(ディゼーブルなし)。基本的にF5と...
---F7:スキャンコード(コマンドF0参照)が3の場合しか関係...
---F8:スキャンコード(コマンドF0参照)が3の場合しか関係...
---F9:スキャンコード(コマンドF0参照)が3の場合しか関係...
---FA:スキャンコード(コマンドF0参照)が3の場合しか関係...
---FB:スキャンコード(コマンドF0参照)が3の場合しか関係...
---FC:スキャンコード(コマンドF0参照)が3の場合しか関係...
---FD:スキャンコード(コマンドF0参照)が3の場合しか関係...
---FE:キーボードに対して、「直前の1バイトをうまく受け取...
---FF:キーボードリセット。これはF6とは異なり、単に初期化...
-ほかにキーボードインターフェースを使ってできること
--キーボードインタフェースは、なぜかキーボード以外のデバ...
--以下のコマンドや後続データを書く場合は、かならずステー...
--8042モードレジスタ直接書き込み:
---KBC制御コマンド出力(0064)に、60を書き込む。
---その後、KBCデータ出力(0060)にモードレジスタに書き込...
---モードレジスタのビット構成は以下のとおり。
---bit0:これを1にすると、キーボードからデータが来たときに...
---bit1:これを1にすると、マウスからデータが来たときにIRQ...
---bit2:システムフラグ。用途はよく分からない。とりあえず...
---bit3:これを1にするとキーボードロックができなくなるら...
---bit4:これを1にするとキーボードインタフェースが使えな...
---bit5:これを1にするとマウスインタフェースが使えなくな...
---bit6:スキャンコード01を使うときはこれを1にする。他の...
---bit7:このピットはリザーブなので常に0を設定する。
--8042モードレジスタ直接読み込み:
---KBC制御コマンド出力(0064)に、20を書き込む。
---するとKBCデータポートに8042モードレジスタの内容が送ら...
--キーボードインタフェース無効化コマンド:
---KBC制御コマンド出力(0064)に、ADを書き込む。
---このコマンドによって8042モードレジスタのbit4が1になる。
--キーボードインタフェース有効化コマンド:
---KBC制御コマンド出力(0064)に、AEを書き込む。
---このコマンドによって8042モードレジスタのbit4が0になる。
--マウスインタフェース無効化コマンド:
---KBC制御コマンド出力(0064)に、A7を書き込む。
---このコマンドによって8042モードレジスタのbit5が1になる。
--マウスインタフェース有効化コマンド:
---KBC制御コマンド出力(0064)に、A8を書き込む。
---このコマンドによって8042モードレジスタのbit5が0になる。
//AA,AB,AC,C0,D0,D1,E0,F0~FF
-(まだ未完成)
*** リンク
-http://members.tripod.com/~oldboard/assembly/8042.html
* こめんと欄
-マウスはどのように制御するのですか? -- [[名無しさん]] S...
-ご質問ありがとうございます。マウス関係はそのうちページを...
-レスありがとうございます。マウスページ期待しております。...
-CapsLockが知らないうちについているってことはあるのでしょ...
-参考になりました。 -- ''名無しさん2'' SIZE(10){2009-07-1...
-参考になりました。 -- ''名無しさん2'' SIZE(10){2009-07-1...
-8042モードレジスタのbit6は、scan code set 1に変換するか...
-なぜ98のキーボードの説明がないのか。疑問を持っている -...
-Why isn't the page English-commented? -- ''RS'' SIZE(10)...
-初めまして。ちょっと質問があります。5Bはwindowsキー,5Dは...
-確認ができたので、編集しました。 -- [[MNAS]] SIZE(10){20...
-すみません。拡張キーコードの時もありました. -- [[MNAS]] ...
#comment
終了行:
*AT互換機のPS/2キーボードコントローラ
-コントローラは8042
-I/Oポート
|アドレス(hex)|wide|R/W|デバイス|説明|備考|h
|0060|byte|R|KBC|KBCデータポート/キーボードデータ||
|0060|byte|W|KBC|KBCデータ出力||
|0064|byte|R|KBC|ステータスレジスタ||
|0064|byte|W|KBC|KBC制御コマンド出力||
-ステータスレジスタについて
--I/Oポート0064をバイトリードすると読める
--bit0:1==データポートにキーデータが来ている
---このbitが1になっていたら速やかに0060を読んでデータを受...
---IRQ-1は、ここが0→1になると発生すると考えてよい
--bit1:0==キーボードコントローラに送信データを送ってよい
--bit2:システムフラグ(起動後に0になる)
--bit3:キーボードへ送信中のデータは、1==コマンド、0==デ...
---これは、0064に書き込むと自動的に1になり、0060に書き込...
--bit4:1==キーボードは入力可能状態(enable)になっている
--bit5:1==データ送信エラー
---データポートにキーデータが来ているのに、受け取らないで...
--bit6:1==データ受信エラー
--bit7:パリティビットなので基本的に気にしなくてよいと思う
---0==奇数パリティ、1==偶数パリティ
-キーコード
--基本:0060から読み取った値の、bit0-6がキーコード、bit7...
--以下に見るとおり、Aを押したらAの文字コードが送信されて...
---まあ逆にいえば、キー配置を変える(たとえばShiftとCtrl...
--一般キーコード
|00:割り当てなし(これはこないはず) |10:Q ...
|01:ESC |11:W ...
|02:フルキーの1 |12:E ...
|03:フルキーの2 |13:R ...
|04:フルキーの3 |14:T ...
|05:フルキーの4 |15:Y ...
|06:フルキーの5 |16:U ...
|07:フルキーの6 |17:I ...
|08:フルキーの7 |18:O ...
|09:フルキーの8 |19:P ...
|0A:フルキーの9 |1A:@(英語キーボ...
|0B:フルキーの0 |1B:[(英語キーボ...
|0C:フルキーの- |1C:フルキーのEnt...
|0D:フルキーの^(英語キーボードでは=)|1D:左Ctrl ...
|0E:バックスペース |1E:A ...
|0F:タブキー |1F:S ...
|30:B |40:F6 |50:テンキーの2|60:リザ...
|31:N |41:F7 |51:テンキーの3|61:リザ...
|32:M |42:F8 |52:テンキーの0|62:リザ...
|33:, |43:F9 |53:テンキーの.|63:リザ...
|34:. |44:F10 |54:SysReq |64:リザ...
|35:/ |45:NumLock |55:リザーブ? |65:リザ...
|36:右Shift |46:ScrollLock |56:リザーブ? |66:リザ...
|37:テンキーの*|47:テンキーの7|57:F11 |67:リザ...
|38:左Alt |48:テンキーの8|58:F12 |68:リザ...
|39:スペース |49:テンキーの9|59:リザーブ? |69:リザ...
|3A:CapsLock |4A:テンキーの-|5A:リザーブ? |6A:リザ...
|3B:F1 |4B:テンキーの4|5B:リザーブ? |6B:リザ...
|3C:F2 |4C:テンキーの5|5C:リザーブ? |6C:リザ...
|3D:F3 |4D:テンキーの6|5D: リザーブ? |6D:リザ...
|3E:F4 |4E:テンキーの+|5E:リザーブ? |6E:リザ...
|3F:F5 |4F:テンキーの1|5F:リザーブ? |6F:リザ...
---註:
---00はキーボードエラーを意味する。
--E0拡張キーコード
---これは E0 1C などの形式で送られてくる。メイクは E0 1C ...
|E0 1C:テンキーのEnter|E0 49:PageUp |E0 5B:左Windows|
|E0 1D:右Ctrl |E0 4B:← |E0 5C:右Windows|
|E0 35:テンキーの/ |E0 4D:→ |E0 5D:メニュー?...
|E0 37:PrintScreen |E0 4F:End ||
|E0 38:右Alt |E0 50:↓ ||
|E0 46:Break |E0 51:PageDown||
|E0 47:Home |E0 52:Insert ||
|E0 48:↑ |E0 53:Delete ||
---以下のキーコードは、実際のキー入力と関わりなく送られて...
|E0 2A:無視|E0 AA:無視|
|E0 36:無視|E0 B6:無視|
--E1拡張キーコード
---これは2種類しかない
|E1 1D 45:Pauseのメイク|E1 9D C5:Pauseのブレイク|
-キーのリピート
--リピートは、ブレイクすることなくメイクが送られてくるこ...
--BreakとPauseはリピートが発生しない
-LEDの制御など
--NumLockやCapsLockなどのLEDの制御には、次の方法でキーボ...
---1.ステータスレジスタを読んで、bit1が0になるのを待つ。
---2.データ出力(0060のこと)に、送りたい1バイトを書く。
---3.キーボードから1バイト通知が来るのを待つ。これはキー...
---4.その通知が0xfaであれば、その1バイトは正しくキーボー...
--LED制御の場合は、上記の手法を2回やって、 ED xx というデ...
--その他のコマンドとして以下のものがある。
---EE:このコマンドはキーボードが正常に動作しているかどう...
---F0 xx:このコマンドはキーボードのスキャンコード(キー...
---F2:このコマンドを送ると、2バイトのキーボードIDが通知...
---F3 xx:このコマンドはキーリピート間隔を設定する。xxのb...
---F4:キーボード入力を可能にする(キーボードイネーブル)...
---F5:キーボード初期化&キーボードディゼーブル。設定を電...
---F6:キーボード初期化(ディゼーブルなし)。基本的にF5と...
---F7:スキャンコード(コマンドF0参照)が3の場合しか関係...
---F8:スキャンコード(コマンドF0参照)が3の場合しか関係...
---F9:スキャンコード(コマンドF0参照)が3の場合しか関係...
---FA:スキャンコード(コマンドF0参照)が3の場合しか関係...
---FB:スキャンコード(コマンドF0参照)が3の場合しか関係...
---FC:スキャンコード(コマンドF0参照)が3の場合しか関係...
---FD:スキャンコード(コマンドF0参照)が3の場合しか関係...
---FE:キーボードに対して、「直前の1バイトをうまく受け取...
---FF:キーボードリセット。これはF6とは異なり、単に初期化...
-ほかにキーボードインターフェースを使ってできること
--キーボードインタフェースは、なぜかキーボード以外のデバ...
--以下のコマンドや後続データを書く場合は、かならずステー...
--8042モードレジスタ直接書き込み:
---KBC制御コマンド出力(0064)に、60を書き込む。
---その後、KBCデータ出力(0060)にモードレジスタに書き込...
---モードレジスタのビット構成は以下のとおり。
---bit0:これを1にすると、キーボードからデータが来たときに...
---bit1:これを1にすると、マウスからデータが来たときにIRQ...
---bit2:システムフラグ。用途はよく分からない。とりあえず...
---bit3:これを1にするとキーボードロックができなくなるら...
---bit4:これを1にするとキーボードインタフェースが使えな...
---bit5:これを1にするとマウスインタフェースが使えなくな...
---bit6:スキャンコード01を使うときはこれを1にする。他の...
---bit7:このピットはリザーブなので常に0を設定する。
--8042モードレジスタ直接読み込み:
---KBC制御コマンド出力(0064)に、20を書き込む。
---するとKBCデータポートに8042モードレジスタの内容が送ら...
--キーボードインタフェース無効化コマンド:
---KBC制御コマンド出力(0064)に、ADを書き込む。
---このコマンドによって8042モードレジスタのbit4が1になる。
--キーボードインタフェース有効化コマンド:
---KBC制御コマンド出力(0064)に、AEを書き込む。
---このコマンドによって8042モードレジスタのbit4が0になる。
--マウスインタフェース無効化コマンド:
---KBC制御コマンド出力(0064)に、A7を書き込む。
---このコマンドによって8042モードレジスタのbit5が1になる。
--マウスインタフェース有効化コマンド:
---KBC制御コマンド出力(0064)に、A8を書き込む。
---このコマンドによって8042モードレジスタのbit5が0になる。
//AA,AB,AC,C0,D0,D1,E0,F0~FF
-(まだ未完成)
*** リンク
-http://members.tripod.com/~oldboard/assembly/8042.html
* こめんと欄
-マウスはどのように制御するのですか? -- [[名無しさん]] S...
-ご質問ありがとうございます。マウス関係はそのうちページを...
-レスありがとうございます。マウスページ期待しております。...
-CapsLockが知らないうちについているってことはあるのでしょ...
-参考になりました。 -- ''名無しさん2'' SIZE(10){2009-07-1...
-参考になりました。 -- ''名無しさん2'' SIZE(10){2009-07-1...
-8042モードレジスタのbit6は、scan code set 1に変換するか...
-なぜ98のキーボードの説明がないのか。疑問を持っている -...
-Why isn't the page English-commented? -- ''RS'' SIZE(10)...
-初めまして。ちょっと質問があります。5Bはwindowsキー,5Dは...
-確認ができたので、編集しました。 -- [[MNAS]] SIZE(10){20...
-すみません。拡張キーコードの時もありました. -- [[MNAS]] ...
#comment
ページ名: