サブページ
キーボードの概要
Amigaのキーボードはインテリジェントキーボードである。独自のマイクロプロセッサを内蔵し、すべてのキースキャン処理を行い、有効なキーコードのみをコンピュータに送信する。A500、A1000、A2000の各モデルで複数のキーボードバージョンが存在するが、違いは主にキーの数と物理的なレイアウトのみである。
キーボードはRAWキーコードのみを送信し、ASCII文字は送らない。オペレーティングシステムがキーマップテーブルを使用してRAWコードをASCIIに変換する。RAWキーコードの空間は以下のように構成されている:
キーボードプロセッサはキーダウン(押下)とキーアップ(解放)の状態を区別できる。キーコードは7ビット($00–$7F)を占め、8ビット目がキーアップ/ダウンフラグとなる。ビット7が0ならキーは押されており、ビット7が1ならキーは離されている。複数キーの同時押しにも対応しており、一部の音楽ソフトウェアはこの機能を利用して和音を演奏する。
Caps Lockの例外
Caps Lockキーは特殊なケースで、キーボードはトグルスイッチを模擬する。Caps Lockを押すとアクティブになりLEDが点灯する。2度目に押されるまでキーアップコードは送信されず、2度目の押下時にキーアップコードが送信されてLEDが消灯する。つまり、アップ/ダウンフラグは物理的なキー位置ではなくロック状態を追跡する。
キーボードの電子回路
MOS 6500/1マイクロプロセッサ
キーボードの中核はMOS 6500/1であり、6502 CPUコアをベースにしたシングルチップマイクロコンピュータである。独立して動作するために必要なすべてを統合している:
6500/1に必要なのは5V電源と水晶発振子のみ。Amigaキーボードは3 MHz水晶を使用し、内部クロック周波数は1.5 MHzとなる。
556デュアルタイマーICが6500/1のRESET信号を生成する。
キーマトリクス
キーは2つのグループに分けられている:
直接接続キー: 7つの修飾キー(左Shift、右Shift、左Alt、右Alt、左Amiga、右Amiga、Control)はポートPBの下位ビットに直接接続されている。
マトリクスキー: その他すべてのキーは6列×15行のマトリクスに配置されている。6列はポートAの信号PA2–PA7に接続され、入力モードに設定される。15行はポートCとDで駆動される(PD7ピンは後期バージョンでは未接続)。
スキャンプロセス
6500/1がキーボードをスキャンする際、各行をLOWに駆動して有効化する。ポートCおよびDの出力は内部プルアップ抵抗のないオープンコレクタ型であり、1に設定された出力は実質的に非アクティブ(ハイインピーダンス)となる。行がLOWに駆動されると、プロセッサは6つの列入力を読み取る。列入力には内部プルアップ抵抗があるため、押されていないキーはHIGHを読み取る。
各キーは交差点で列と行を接続する。アクティブな行のキーが押されると、対応する列入力がLOWに引き下げられる。すべての行をスキャンした後、プロセッサはすべてのキーの完全な状態を把握する。前回のスキャンから状態が変化していれば、対応するキーコードがAmigaに送信される。
シリアルデータ転送
物理的接続
キーボードはAmigaと4線ケーブルで接続される。2本はキーボード電子回路の5V電源用。データ転送には残りの2本を使用する:
転送プロトコル
データ転送は単方向 — キーボードからAmigaへの一方向のみ。6500/1がKDATラインにデータビットを載せ、KCLKにLOWクロックパルスを伴わせる。
ビットあたりのタイミング: - KCLKのLOWパルス幅: 20マイクロ秒 - クロックパルス間隔: 40マイクロ秒 - 1ビットあたりの合計時間: 60マイクロ秒 - 1バイト(8ビット)の完全な転送時間: 480マイクロ秒 - 実効ボーレート: 16,666ボー
データ信号はアクティブLOW(LOW = 論理1、HIGH = 論理0)である。
ビット送信順序
ビットは標準的なMSBファースト順(7-6-5-4-3-2-1-0)では送信されない。代わりに、バイトは送信前に1ビット左にローテートされ、送信順序は6-5-4-3-2-1-0-7となる。キーアップ/ダウンフラグ(ビット7)は常に最後に送信される。
例えば、'J'のRAWキーコードは10100110である。左ローテート後、01001101として送信される。
このローテーションにより、同期エラーが発生した場合でも最後に受信されるビットは常にアップ/ダウンフラグとなる。再同期中にキーボードは1のみを送信するため、化けたバイトは常にキーアップコードとして解釈される。これは無害である。偽のキーダウンの方がはるかに問題となる。
CIAシフトレジスタでの受信
CIA-Aのシフトレジスタは、KCLKからのクロックパルスごとに1ビットを取り込む。8パルス後に完全なバイトが利用可能となり、CIAはレベル2割り込みを生成する。オペレーティングシステムの割り込みハンドラは以下を実行する:
- シリアルデータレジスタを読み取る
- バイトを反転し右にローテートして元のキーコードを復元する
- ハンドシェイクパルスを送信する
- キーコードを処理する
ハンドシェイクプロトコル
8ビットすべてを送信した後、キーボードはAmigaからのハンドシェイクを待つ。Amigaは、KDATラインを約75マイクロ秒LOWに引き下げることで確認応答する。これにより、キーボードはバイトが受信されたことを認識し、次のコードを送信できる。
同期回復
正しいデータ転送には送信側と受信側の同期が必要であり、ビット位置が一致していなければならない。Amigaがキーボード送信中に電源オフされたり、Amiga動作中にキーボードが接続されたりすると、同期の喪失が発生する。Amiga自体は同期エラーを検出する手段を持たない。この責任は完全にキーボード側にある。
各バイト転送後、キーボードは最大145ミリ秒間ハンドシェイク信号を待つ。この時間内にハンドシェイクが届かない場合、キーボードは転送エラーと判断し、特別な再同期モードに入る:
- キーボードはKDATを1にセットし、単一のクロックパルスを送信する
- 再び145ミリ秒間ハンドシェイクを待つ
- ハンドシェイクが受信されるまで繰り返し、同期の回復を確認する
再同期中、キーボードは1ビットのみを送信する。最後に受信されるビットは常にアップ/ダウンフラグ(左ローテーションによる)であるため、誤って受信されたバイトは常にキーアップイベントとして解釈され、安全に無視できる。
特殊コード
キーボードは$F9–$FEの範囲の予約キーコードを使用して、いくつかの特殊な状態をAmigaに通知する:
電源投入シーケンス
Amigaの電源投入時、キーボードプロセッサはセルフテストを実行する(Caps Lock LEDが短く点灯)。完了後、電源投入中に押されていたキーのコードを$FD(開始)と$FE(終了)で挟んで送信する。キーが押されていなかった場合は、$FDの直後に$FEのみが送信される。
キーボードリセット
キーボードはAmiga全体のハードウェアリセットをトリガーできる。両方のAmigaキーとControlキーを同時に押すと、キーボードプロセッサはKCLKラインを約0.5秒間LOWに保持する。これによりRESET信号が生成され、完全なシステム再起動が強制される。リセットは3つのキーのいずれかが離されたときにトリガーされる。
リセットシーケンス中、Caps Lock LEDが視覚的確認として点滅する。
KCLK信号はCIA-AのCNTピンに接続されているため、理論的にはCIAを適切にプログラミングすることでソフトウェアからリセットをトリガーすることも可能である。ただし、推奨される手法ではない。