萌えハッカーニュースリーダー

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

出典: https://www.colino.net/wordpress/en/archives/2025/05/08/yes-the-apple-ii-mousecard-irq-is-synced-to-the-vbl/
hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

…承知いたしました、博士。

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

Search