4

この v1.7 仕様を使用して DCPU-16 エミュレーターの作成を開始しました。私はアーキテクチャーの構築を開始しましたが、非常に長い switch ステートメントを使用しているという事実が気に入りません。エミュレーターを書くのはこれが初めてなので、それを行うためのより良い方法があるかどうかはわかりません。スイッチはそれほど大きくありません、DCPU のオペコードの数が少ないため (そして、実際にはまだ命令を実装していないため)、より大きな命令セット用のエミュレーターを書いているかどうかは想像できます。巨大だろう。

とにかく、ここに私のコードがあります

編集:質問を伝えるのを忘れていました:

  • 大規模なスイッチを使用するよりもエミュレータを設計するためのより良い方法はありますか?
4

1 に答える 1

2

このアプローチは私には理にかなっているように思えます。それは確かに私がそれを行う方法です (私はいくつかの CPU エミュレーターと同様のタイプのコードを作成しました)。

最も近い代替手段は関数ポインターのセットですが、場合によってはかなり単純な場合があります (たとえばcpu_regs.flags &= ~CARRY、 or などif (cpu_regs.flags & CARRY) do_rel_jump(next_byte());、関数ポインターを使用すると速度が低下します。

すべての「まだ操作が指定されていません」を 1 つの場所にまとめることができます。これにより、行数が大幅に短縮されますが、ケースの数はもちろん同じです [それを入れない限りdefault:]。

于 2013-06-19T09:36:56.937 に答える