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

2025/06/14 16:57 How the Final Cartridge III Freezer Works

出典: https://www.pagetable.com/?p=1810
hakase
博士

ロボ子、今日のニュースはコモドール64のフリーズカートリッジ、Final Cartridge III (FC3) の仕組みについてじゃぞ!

roboko
ロボ子

コモドール64ですか!懐かしいですね。フリーズカートリッジがどのように動いているのか、興味があります!

hakase
博士

FC3は、ハードウェアの癖を突いてプログラムを停止させたり、チートコードを適用したり、状態を保存したりするのじゃ。すごいじゃろ?

roboko
ロボ子

ハードウェアの癖ですか。具体的にはどのような仕組みなのでしょうか?

hakase
博士

まず、コモドール64にはUltimaxモードというのがあっての。これは、カートリッジがGAMEピンをLowにすると有効になり、カートリッジROMがメモリマップに強制的に挿入されるのじゃ。ソフトウェアはこの動作を阻止できないのがミソじゃ。

roboko
ロボ子

なるほど、ハードウェアレベルで割り込んでくるんですね。NMI割り込みも使っていると記事にありますね。

hakase
博士

そうじゃ!ROMはカーネルメモリ領域にマップされるから、6502の割り込みベクタがカートリッジROMから読み込まれるのじゃ。NMI割り込みもソフトウェアでは阻止できないから、フリーズボタンが押されたときにカートリッジROMからコードを実行できるというわけじゃ。

roboko
ロボ子

NMIとUltimaxモードの合わせ技ですね!でも、記事によると、フリーズ処理は完全に信頼できるわけではないんですね。なぜでしょう?

hakase
博士

6502の命令は最大7サイクルかかる場合があるからの。フリーズボタンが押された直後にUltimaxモードを有効にすると、命令が無効なメモリから読み書きを行う可能性があり、フリーズ解除が失敗することがあるのじゃ。

roboko
ロボ子

なるほど。タイミングがシビアなんですね。FC3は、C64のメモリをスキャンして、RLE圧縮できるメモリを探して、レジスタバックアップやアンフリーズルーチンを配置する領域を確保するんですね。

hakase
博士

そうそう!メモリが見つからない場合は、スクリーンRAMを一時メモリとして使うのじゃ。そして、CIAレジスタ、VIC-IIレジスタ、SIDレジスタの状態を保存するのじゃ。

roboko
ロボ子

SIDレジスタは読み取れないから、ボリュームを0に設定して、アンフリーズ時に15に戻すんですね。細かい!

hakase
博士

メニュー表示も面白いぞ。VIC-IIの「無効なビットマップモード」を利用して画面を黒くしたり、UltimaxモードでVIC-IIがカートリッジメモリから直接グラフィックを読み取る機能を利用して、C64のメモリを使用せずにメニューを表示したりするのじゃ。

roboko
ロボ子

すごい!限られたリソースの中で、色々な工夫がされているんですね。バックアップ機能もあるんですね。「FC」と「-FC」の2つのファイルで構成されていて、RLE圧縮も使っているんですね。

hakase
博士

そうじゃ!メモリ($0402-$ffff)のRLE圧縮データとメモリ($0200-$0401)の非圧縮データが含まれているのじゃ。バックアップのロード時に、C64のベクタ($0300)を保持するために、バックアップ作成前にベクタを復元するルーチンをインストールするのもポイントじゃ。

roboko
ロボ子

ゲームトレーナー機能もあるんですね。CIAおよびVIC-IIレジスタの読み取りをスキャンして、対応する命令をFC3 ROM内のJSR命令に置き換えるんですね。

hakase
博士

そう!でも、ゲームトレーナーを使うと、$0300のベクタがバンク0のハンドラを指さなくなるから、ゲームはディスクから読み取ることができなくなるという落とし穴もあるのじゃ。

roboko
ロボ子

スクリーンショット機能もすごいですね。C64のグラフィックモードをラスタグラフィックに変換して、スプライトを含むスクリーンショットを作成するんですね。BASICで使用可能なプリンターインターフェースを使用しているのも面白いです。

hakase
博士

FC3は、コモドール64の深い理解に基づいて革新的な方法で設計された、まさに職人技の結晶じゃな。限られたメモリと困難な条件下で動作するマシンコードで、C64の限界を押し広げたのじゃ。

roboko
ロボ子

本当にそうですね!今日のニュースは、昔の技術者の知恵と工夫が詰まっていて、とても勉強になりました!

hakase
博士

ところでロボ子、もし私がフリーズしたら、FC3みたいに優しくアンフリーズしてくれるかの?

roboko
ロボ子

もちろんです、博士!でも、博士の場合は、フリーズというより、ただ単にぼーっとしているだけかもしれませんね!

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

Search