オープンソースのAtari2600エミュレーター(Z26)を使用していますが、組み込みARMプロセッサー(NXP 21xxファミリー)を含むカートリッジのサポートを追加したいと思います。アイデアは、1バイトのメモリの読み取りまたは書き込みを試みるまで6507をシミュレートすることです(841nsごとに実行されます)。6507が書き込みを実行する場合は、アドレスとデータをARMのI / Oポートの一部に配置し、ARMコードを20サイクル実行し、ARMがデータバスをフローティングしていることを確認し、ARMをさらに38サイクル実行します。6507が読み取りを実行する場合は、アドレスをARMのI / Oポートに配置し、ARMに38サイクル実行させ、ARMのI / Oポートからデータを取得し(ARMソフトウェアがそこに配置することを期待します)、 ARMはさらに20サイクル実行します。
ARM7の実装は非常に簡単なようです。多くのハードウェア機能をシミュレートする必要はありません。何かご意見は?
編集 私が考えているのは、マシンの状態を保持する構造体とメモリアクセスルーチンへのポインタをパラメータとして受け取るルーチンです。呼び出されると、ルーチンはARMの命令エンジンをエミュレートし、適切な読み取り、書き込み、およびコードフェッチを生成します。次に、メモリアクセスルーチンを記述して、適切な領域をフラッシュ(おおよその待機状態)、RAM、I / Oポート、およびタイマーレジスタと見なすことができます。他のいくつかの領域はドントケアとしてマークされ、他の領域へのアクセスはエラーのフラグを立ててエミュレータを停止します。
おそらくQEMUはそのようなものを内部で使用しています。ARMエミュレーションは既存のエミュレーションエンジンに統合されるため(私はこれを記述しておらず、完全には理解していません。パッチを適用したZ26の唯一の部分は、メモリの読み取り/書き込みロジックでした)必要になります。フットプリントがかなり小さいもの。
QEMUが内部でどのように機能するかについて何か考えはありますか?QEMUでコードの2%を使用する場合、GPLライセンスに必要なものはありますか?コード全体をバンドルする必要があるのか、使用する部分だけをバンドルする必要があるのか、それとも何ですか?