Apple Desktop Bus Protocol (2021)

2025/11/30 22:39

Apple Desktop Bus Protocol (2021)

RSS: https://news.ycombinator.com/rss

要約

Apple Desktop Bus (ADB) を用いて古いMacキーボードをUSB‑compatibleに再活性化するプロジェクトです。

  • プロトコル概要:ホストは8bitコマンドでTalk/Listen/Reset/Flushを送信し、デバイスは16bitレジスタ(0–3)で状態・設定を保持。
  • アドレス割り当て:複数同種デバイスがある場合はレジスタ3をポーリングして衝突回避し、ユニークアドレスを与える。
  • 実装方法:STM32 Blue Pill でゼロからコードを書き、ADB信号(Attention, Sync, Stop, Srq)タイミングを正確に再現。

この手順でメカニカルキーボードをモダンPCへ接続できるようになる。

本文

背景

幼少期、母はパワーマックintosh 8500を所有しており、デスクトップ出版作業に使用していました。やがてその機械はパワーマック G4 に置き換えられ—私がコンピュータに興味を持ち始めた頃でした。両親は古いMacでゲーム(例:LemmingsFury of the Furries、オランダの教育タイトル、Internet Explorer 5 で動く初期ブラウザゲーム)をプレイさせてくれました。

重要なのは、パワーマックintosh が Apple Extended Keyboard II を標準装備していたことです。これは今でも史上最高クラスと評されるメカニカルキーボードの一つで、両親の手に残っています。ヘアブリーチクリームに過酸化水素を混ぜて「レトロブライト」処理した後も、古いMac ではまだ動作します。

私はこのキーボードを現代ハードウェア用に復活させることにしました。安価な ADB‑to‑USB アダプタは市販されていますが、自分で構築してプロトコルを学びたかったため、STM32 の「Blue Pill」ボード上でゼロからコードを書きました。Arduino や Teensy など類似のプロジェクトは多数存在しますが、私は「ハードコア」な道を選択しました。

以下に ADB プロトコルの簡潔仕様を示します。最も役立った情報は Apple の Guide to the Macintosh® Family Hardware(Apple’s Guide)から取得しています。


ADB:概要

Apple Desktop Bus (ADB) は、キーボード・マウス・トラックボール・タブレットなど複数の入力デバイスをチェーン接続できるシリアルバスです。

  • ホストがバスを制御し、コマンドを発行します。
  • デバイスはポーリング時または短時間のサービスリクエスト窓でのみバスを使用できます。
  • バスのアイドル状態では 5 V がプルアップされ、任意のデバイスが低電位に引き下げることが可能です。

主な特徴

FeatureDescription
Device addressデバイスを識別する 4bit の値。複数同種デバイスがある場合、ホストはアドレスを再割り当てできます。
Registersデバイスごとに最大 4 個の 16bit レジスタがあります。レジスタ 3 はデバイスのアドレスとハンドラ ID を保持します。
Commandsホストから送るコマンドは 4 種類:Talk(読み取り)、Listen(書き込み)、SendResetFlush

セットアップ

  1. グローバルリセット – ホストがバスを ≥ 3 ms 低電位にします。

  2. 必要ならば ≤ 1 s の遅延でデバイス(例:AEKII)がリセット完了するまで待ちます。

  3. アドレス割り当て – 同種デバイスが複数ある場合、ホストはレジスタ 3 をポーリングして衝突を解消し、ユニークなアドレスを割り当てます。以下は二つのキーボードに対する手順です。

    • ホスト → Talk レジスタ 3(addr 2)。キーボード A が最初に応答。
    • キーボード B は送信を停止し、再度アドレスが割り当てられるまで黙ります。
    • ホスト → Listen レジスタ 3(addr 2)でキーボード A に新しいアドレス(例:8)を与えます。
    • キーボード B へ同様に処理し、アドレス 9 を割り当てます。
    • 最後の Talk to addr 2 は応答がなく、ホストは次へ進みます。

    このステップをスキップしても、各タイプのデバイスが一台ずつしか存在しない場合は問題ありません。

  4. 通常動作 – ホストはデバイス(既定ではマウス)をポーリング開始します。デバイスはストップビット中にサービスリクエスト (Srq) を主張でき、ホストはレジスタ 0 を再度ポーリングして該当デバイスをアクティブ化します。


タイミング概要(Apple’s Guide)

ParameterNominalHost ± 3%Device
Bit‑cell time100 µs3 ms min
‘0’ low time65 µs
‘1’ low time35 µs
Attention (low)800 µs
Sync (high)70 µs
Stop‑bit low70 µs±30%
Global reset low3 ms3 ms min3 ms min
Srq low300 µs±30%
Tlt (high)200 µs140–260 µs140–260 µs

コマンド

各コマンドは 8bit パケットです。

CommandBitsDescription
SendReset
****0000
すべてのデバイスを初期状態にリセット。
Flush
AAAA0001
デバイス固有;通常はレジスタをクリアします。
Listen
AAAA10RR
レジスタ RR に 16bit データを書き込みます(バスが忙しい場合トランザクションはキャンセル)。
Talk
AAAA11RR
レジスタ RR から 16bit を読み取ります(RR = 3 のとき必ず応答します)。

AAAA
= デバイスアドレス、
RR
= レジスタ番号、
*
= 無視。


トランザクション構造

  1. Attention – ホストが 800 µs 低電位にします。
  2. Sync – バスを 70 µs 高電位に保ちます。
  3. Command byte – 上記の 8bit コマンド。
  4. Stop bit (0) – 70 µs の低電位;その間に任意デバイスが最大 300 µs で Srq を主張できます。
  5. Tlt – バスを 140–260 µs 高電位に保ちます。
  6. Device response – 要求された場合、スタートビット (1)、16bit データ、ストップビット (0)。 Listen の場合はホストが同様にデータを送信します。

Srq が主張されると、ホストは全デバイスのレジスタ 0 をポーリングし、該当デバイスを見つけてアクティブ化します。


レジスタ

RegisterPurpose
0メインデータ:キーボードのキーイベント、マウスのオフセット/ボタン。Srq を主張する際には必ずデータを保持している必要があります。
1デバイス固有の補助データ。
2デバイス固有のフラグ(例:LED 状態)。
3設定とメタデータ:アドレス、ハンドラ ID、SRQ 有効フラグ等。

レジスタ 3 のレイアウト

BitMeaning
15Reserved (0)
14Exceptional event
13Enable Srq (1 = enabled)
12Reserved (0)
11–8デバイスアドレス(4bit)
7–0ハンドラ ID

デバイスとアドレス範囲

Apple’s Guide は最初の八つのアドレスを割り当てています。

AddrDescription
$00
,
$01
Reserved
$02
エンコードデバイス(例:キーボード)
$03
相対デバイス(マウス、トラックパッド)
$04
絶対デバイス(タブレット)
$05–$07
Reserved
$08–$0F
再割り当て可能

キーボード

二つのプロトコルがあります:StandardExtended

レジスタ 0 – キーイベント(両プロトコル共通)

BitsMeaning
15最初に離されたキーかどうか (1 = 離した)
14–8最初のキーコード
7二番目に離されたキーかどうか
6–0二番目のキーコード

パワーキーは両バイトを占有します。

レジスタ 2 – 修飾子 & LED

BitStandardExtended
15ReservedReserved
14Delete (Backspace)Delete
13Caps LockCaps Lock
12ResetReset
11ControlControl
10ShiftShift
9Option (Alt)Option
8CommandCommand
7Reserved / Num Lock/ClearNum Lock/Clear
6Reserved / Scroll LockScroll Lock
5–3ReservedReserved
2Reserved / Scroll Lock LEDScroll Lock LED
1Reserved / Caps Lock LEDCaps Lock LED
0Reserved / Num Lock LEDNum Lock LED

Bits 0–2 は Listen で書き込み可能で、LED の制御に使用します。

キーコード

Apple’s Guide(pp. 306, 308)または元投稿に添付された ISO 配列表を参照してください。


マウス

二つのプロトコルがあります:Standard(ハンドラ ID

$0001
)と Extended
$0004
)。

レジスタ 0 – Standard プロトコル

BitsMeaning
15ボタン状態 (1 = 離した)
14–8Y 軸移動量(2’s complement、上方向が負)
7Reserved
6–0X 軸オフセット(2’s complement、左方向が負)

標準マウスは約 100 ± 10 counts/inch を報告します。ハンドラ ID を

$0002
に設定すると精度が倍増し(約 200 ± 10 counts/inch)、より高い解像度を得られます。

Extended プロトコルではボタン数と精度が向上しますが、ここでは詳細は割愛します。


仕様書の終わり。

同じ日のほかのニュース

一覧に戻る →

2025/12/04 3:40

Ghostty is now non-profit

Ghostty は501(c)(3)非営利団体 Hack Club の財務スポンサーシップを受け、税優遇とコンプライアンスを確保しつつ無料・オープンソースで提供されます。 重要ポイント 1. **持続可能性**:個人依存から脱却し、寄付で運営を安定化。 2. **信頼性**:非営利体制により資金の乱用や商業転売が防止。 3. **公共利益**:ターミナル技術を公益優先で発展させ、広範な採用促進。

2025/12/03 5:33

Valve reveals it’s the architect behind a push to bring Windows games to Arm

SteamがArmチップ向けPCゲームの移植を支援し、Steam Frameは実質的にAndroidデバイスやノートPCでSteamを遊べるトロイの木馬。FexとProtonがx86コードをARMへJIT変換し、開発者は移植作業を減らせる。重要ポイント 1. ValveはArm向けオープンソース技術に資金提供している。 2. Fex+ProtonでWindowsゲームをスマホやノートPC上で実行可能。 3. Steam Frameは「VRヘッドセット」ではなく、ArmデバイスでSteam体験を拡張するためのハードウェア。

2025/12/04 2:44

Reverse engineering a $1B Legal AI tool exposed 100k+ confidential files

**要約(300字以内)** FilevineのAI法務プラットフォームで、サブドメイン `margolis.filevine.com` にアクセスすると、Box API管理者トークンが返る脆弱性を発見。1) **発見と報告**:2025年10月27日から責任ある報告を行い、Filevineは迅速に修正。2) **技術的詳細**:エンドポイント `/prod/recommend` に `{"projectName":"Very sensitive Project"}` を送るだけで、全Boxファイルシステムへの完全アクセス権が得られた。3) **リスクと教訓**:機密文書やHIPAA保護資料を数百万件抽出可能となり、法律事務所・クライアントに深刻被害。AI法務テック企業はデータ保護体制を徹底すべきである。