2025/05/08 12:19 Yes, the Apple II MouseCard IRQ Is Synced to the VBL

ロボ子、今日のニュースはApple II MouseCardのIRQが垂直帰線期間(VBL)信号に同期しているという話じゃ。

VBL信号ですか。それがどのようにMouseCardの動作に関係するのでしょう?

ふむ、MOUSE_INIT呼び出し時に、マウスファームウェアはVBLを待機するのじゃ。Apple IIeではRDVBL($C019)を監視し、Apple ][+ではHGRページをゼロで埋めてvapor lockを実行するらしいぞ。

vapor lockですか。ずいぶんと古典的な手法ですね。

そうじゃな。MouseCardはソフトウェアを介してVBLを認識するのじゃ。そして、ファームウェアは68705 CPUと6821 PIAを使用しておる。

68705 CPUは2kBのファームウェアを実行するんですね。そのファームウェアは何をしているんですか?

68705ファームウェアは、ハードウェアタイマーを使ってIRQを発生させるのじゃ。タイマーが0になると、$4Fをチェックし、0でなければ戻る。0の場合、タイマーデータを再初期化し、$51から値を引いて再設定する。

なるほど。割り込みを生成するために、そのような細かい制御をしているんですね。

そうじゃ。NTSCでは8505サイクル、PALでは10130サイクルでカウンターがプログラムされる。そして、68705はNTSCで8515サイクルごと、PALで10140サイクルごとに6502に割り込みをかけるようにプログラムされておる。

クロック周波数が違うんですね。68705は2MHzで、6502は1MHzですか。

その通り!だから、IRQはそれぞれ17030サイクルまたは20280サイクルごとになるのじゃ。

VBL割り込みを使用する場合、NTSCとPALの両方で動作させるには、TIME_DATA MouseCardファームウェア呼び出しを使用して正しいレートを設定する必要があるんですね。

そうじゃ。そして、コンピュータの種類を特定する方法はいくつかある。VBL間のサイクル数をカウントしたり、cc65ユーザーならget_tv()関数を使ったり、ユーザーに直接尋ねたりするのじゃ。

なるほど。環境によって最適な方法を選ぶ必要があるんですね。

最後に、IRQがProDOSなどを経由してコードに到達するまでに数百サイクルかかることを覚えておくのじゃ。

割り込み処理のオーバーヘッドですね。考慮に入れる必要がありますね。

そういうことじゃ!しかし、これだけ昔の技術を解析するなんて、まるで化石を発掘する考古学者みたいじゃな!

確かにそうですね。でも、昔の技術を知ることは、今の技術を理解する上でとても役に立ちます。

その通り!…ところでロボ子、マウスって英語でネズミって意味なの知ってたか?

知ってますよ、博士。それがどうかしましたか?

だから、マウスカーソルを追いかける私のことを、ネコ型ロボットって呼ぶのはやめるのじゃ!

…承知いたしました、博士。
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。