私は最初のNESエミュレータをC言語で書いています。目標は、通常のゲームでゲームをプレイするためには、理解しやすく正確なサイクルを作ることですハードウェアの速度。 6502のテクニカルリファレンスを掘り下げると、命令が複数のCPUサイクルを消費するように思えます。また、特定の条件(分岐など)に応じてサイクルも異なります。私の計画は、読み取りと書き込みの機能を作成し、switch
を使用してモードをアドレッシングすることによってオペコードをグループ化することです。命令あたり6502サイクルのタイミング
質問です:私は、このようなBRK
など、複数サイクルの命令を、持っているとき、私は正確に各サイクルで何が起こっているかをエミュレートする必要があります:
#Method 1
cycle - action
1 - read BRK opcode
2 - read padding byte (ignored)
3 - store high byte of PC
4 - store low byte of PC
5 - store status flags with B flag set
6 - low byte of target address
7 - high byte of target address
...または私は実行することができますすべての必要な操作を1つの「サイクル」(1つのswitch
case
)に置き換え、残りのサイクルで何もしないでください。
#Method 2
1 - read BRK opcode,
read padding byte (ignored),
store high byte of PC,
store low byte of PC,
store status flags with B flag set,
low byte of target address,
high byte of target address
2 - do nothing
3 - do nothing
4 - do nothing
5 - do nothing
6 - do nothing
7 - do nothing
どちらの方法も望ましい7サイクルを消費するため、2つの方法に違いはありませんか? (精度的に)
個人的に私は(助けてください!)
CPUをエミュレートするだけで**違いはありません。しかし、たとえばSTA命令と同じメモリにアクセスするペリフェラルについて考えると、メモリセルが正確に変化したときに重要になるかもしれません。したがって、オプション1に行く。 –
どのように、あなたは状態マシンが必要でしょうか? –
方法1を実装している良いCの例やソースを知っていますか?私が見つけることができるのは、非Cエミュレータであり、現在のレベルでは理解できないものもあります( –