KBC : Keyboard Controller (Intel 8042) Edit

目次 Edit

2つのモード Edit

AT互換モード Edit

PS/2互換モード Edit

まだよくわかりません。。

I/Oポート、レジスタ Edit

ATAのI/Oポートマップ Edit

I/OポートサイズR/W説明
0x00608bitR/Wデータ・レジスタ
0x00648bitRステータス・レジスタ
Wコマンド・レジスタ

データ・レジスタ (Port:0x0060) Edit

bit76543210
内容データ

さまざまな用途に使用します。

コマンド(データレジスタ)

ステータス・レジスタ (Port:0x0064) Edit

bit76543210
内容AT互換モードPERRRxTOTxTOINHA2SYSBSYDR
PS/2互換モードTOMOBF
DR : Data Ready (bit:0) Edit
  • 0:データの準備ができていない
  • 1:データの準備が整った(データ・レジスタからデータを読み取ることができる)
BSY : Busy (bit:1) Edit
SYS : System flag (bit:2) Edit

SYS (System flag) - Post reads this to determine if power-on reset, or software reset.
Post : Power-on system/self test (起動時システムテスト)
(リセットすると?)コマンド・バイト・レジスタのSystem flagが反映されるらしい。

  • 0:??単にコマンド・バイト・レジスタのSystem flagの状態??電源ONのままリセットされた??
  • 1:??単にコマンド・バイト・レジスタのSystem flagの状態??すでに初期化済みである??
A2 : Address line A2 (bit:3) Edit

最後にアクセスされたレジスタを表す

  • 0:ポート0x60
  • 1:ポート0x64
INH : Inhibit flag (bit:4) Edit

キーボードが抑制(Inhibit)状態であるかどうかを表す。
コマンドで抑制、非抑制を制御できる。

  • 0:入力不可能(抑制)状態
  • 1:入力可能(非抑制)状態
TxTO : Transmit Timeout (bit:5) Edit
  • 0:
  • 1:
MOBF : Mouse Output Buffer Full (bit:5) Edit
  • 0:
  • 1:
RxTO : Receive Timeout (bit:6) Edit
  • 0:
  • 1:
TO : General Timeout (bit:6) Edit
  • 0:
  • 1:
PERR : Parity Error (bit:7) Edit
  • 0:パリティエラーなし
  • 1:パリティエラー有り

コマンド・レジスタ (Port:0x0064) Edit

KBCの制御を行うコマンドを発行します。

bit76543210
内容コマンド

コマンド一覧

コマンド Edit

データ・レジスタを用いたコマンド Edit

キーボードの一般的な?制御をするためのコマンドです。
データ・レジスタを使用します。

発行手順 Edit
0xED : LED制御(Scroll Lock, Num Lock, Caps Lock) Edit

コマンド・レジスタを用いたコマンド Edit

キーボードのシステム的な?制御をするためのコマンドです。
コマンド・レジスタを使用します。

0x20/0x60 : コマンド・バイト・レジスタ リード/ライト Edit
  • 0x20:コマンド・バイト・レジスタからデータを読み取る。
  • 0x60:コマンド・バイト・レジスタにデータを書き込む。

詳しくはコマンド・バイト・レジスタを参照

0xD4 : マウスへ書き込み Edit
その他 Edit

他には、以下のものがあるようです。誰か訳してください。。。

  • ?0x90-0x9F (Write to output port) - Writes command's lower nibble to lower nibble of output port (see Output Port definition.)
  • ?0xA1 (Get version number) - Returns firmware version number.
  • ?0xA4 (Get password) - Returns 0xFA if password exists; otherwise, 0xF1.
  • ?0xA5 (Set password) - Set the new password by sending a null-terminated string of scan codes as this command's parameter.
  • ?0xA6 (Check password) - Compares keyboard input with current password.
  • 0xA7 (Disable mouse interface) - PS/2 mode only. Similar to "Disable keyboard interface" (0xAD) command.
  • 0xA8 (Enable mouse interface) - PS/2 mode only. Similar to "Enable keyboard interface" (0xAE) command.
  • 0xA9 (Mouse interface test) - Returns 0x00 if okay, 0x01 if Clock line stuck low, 0x02 if clock line stuck high, 0x03 if data line stuck low, and 0x04 if data line stuck high.
  • 0xAA (Controller self-test) - Returns 0x55 if okay.
  • 0xAB (Keyboard interface test) - Returns 0x00 if okay, 0x01 if Clock line stuck low, 0x02 if clock line stuck high, 0x03 if data line stuck low, and 0x04 if data line stuck high.
  • 0xAD (Disable keyboard interface) - Sets bit 4 of command byte and disables all communication with keyboard.
  • 0xAE (Enable keyboard interface) - Clears bit 4 of command byte and re-enables communication with keyboard.
  • 0xAF (Get version)
  • 0xC0 (Read input port) - Returns values on input port (see Input Port definition.)
  • 0xC1 (Copy input port LSn) - PS/2 mode only. Copy input port's low nibble to Status register (see Input Port definition)
  • 0xC2 (Copy input port MSn) - PS/2 mode only. Copy input port's high nibble to Status register (see Input Port definition.)
  • 0xD0 (Read output port) - Returns values on output port (see Output Port definition.)
  • 0xD1 (Write output port) - Write parameter to output port (see Output Port definition.)
  • 0xD2 (Write keyboard buffer) - Parameter written to input buffer as if received from keyboard.
  • 0xD3 (Write mouse buffer) - Parameter written to input buffer as if received from mouse.
  • 0xE0 (Read test port) - Returns values on test port (see Test Port definition.)
  • 0xF0-0xFF (Pulse output port) - Pulses command's lower nibble onto lower nibble of output port (see Output Port definition.)

コマンド・バイト・レジスタ Edit

コマンド・レジスタに0x20(Read)か0x60(Write)を出力すると、データ・レジスタを介してアクセスできるレジスタ。

bit76543210
内容AT互換モード-XLATPC_ENOVRSYS-INT
PS/2互換モード-_EN2-INT2
INT : Input Buffer Full Interrupt (bit:0) Edit
  • 0:IRQ1割り込み無効化(ステータス・レジスタのDRをポーリングしてデータの有無を調べる)
  • 1:IRQ1割り込み有効化
INT2 : Mouse Input Buffer Full Interrupt (bit:1) Edit
  • 0:IRQ12割り込み無効化
  • 1:IRQ12割り込み有効化
SYS : System Flag (bit:2) Edit

(リセットすると?)ステータス・レジスタのSystem flagに反映されるらしい。

  • 0:??リセット時、電源ONのまま?テスト/初期化するように教えるらしい??
  • 1:??リセット時、再起動して?テスト/初期化するように教えるらしい??
OVR : Inhibit Override (bit:3) Edit

古いマザーボードのキーボードスイッチ?を抑制するか否か

  • 0:抑制する
  • 1:抑制しない
_EN : Disable keyboard (bit:4) Edit
  • 0:キーボード有効化
  • 1:キーボード無効化
PC : ??PC Mode?? (bit:5) Edit
  • 0:
  • 1:
EN2 : Disable Mouse (bit:5) Edit
  • 0:マウス有効化
  • 1:マウス無効化
XLAT : Translate Scan Codes (bit:6) Edit

キーコード(スキャンコード)を変換するか否かを決める。
キーコードはコマンドセットのF0で変更可能

  • 0:キーコードをそのままバッファに入れる
  • 1:キーコードを01に変換してバッファに入れる

参考・関連 Edit


Since 2008 July. OS Project Wiki
リロード   新規 下位ページ作成 編集 凍結 差分 添付 コピー 名前変更   ホーム 一覧 検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS