2016-12-21 12 views
3

ほとんどのエミュレータは、特定の命令がルックアップテーブル内で取るサイクル数を格納し、必要に応じて(たとえばページ境界を越えるとき)任意の条件サイクルを追加します。特定の命令が6502で実行するサイクル数を手続きで決定できますか?

アドレッシングモードとメモリの読み書きだけに基づいて命令が実行するサイクル数を手続きで判断する方法があるのだろうかと思います。

例として、即時または相対アドレッシングを使用するすべての命令が2サイクルかかることに気付きました。

ゼロページ命令はすべて3サイクル、インメモリでメモリを変更する場合はさらに2サイクルかかる。

インデックス付きのゼロページ命令は、すべて4サイクル、インメモリでメモリを変更する場合は2サイクルを要します。

...などです。

したがって、上記のような命令のサイクル数を決定するための完全に文書化された手続き的な方法がありますか?このような公式の中で決定論を破る例外はありますか?

+0

手作業で送信した古いAtari 8ビットシリーズ周辺機器の正確なタイミングを得るには、[6502命令セット](http://www.6502.org/tutorials/6502opcodes.html)のようなリファレンスを常に使用しなければなりませんでした。シリアルインタフェース上でビットごとに52サイクルまたは19サイクル(1MHzh 6502)で1ビットずつ受信される。 (〜19,200ビット/秒または〜52,600ビット/秒)。 – rcgldr

答えて

6

はい - これはほぼすべての正確なエミュレータの書き方です。 64doc.txtなどの文書を参照してください。単純なメモリアクセスのカウントよりもそれほど複雑ではありませんが、6502は1サイクルごとにメモリアクセスを実行しますが、アクセス後に残りのサイクルで意味のある結果を得ることができます(つまり、何がパイプラインで、何がないかについての議論、ドキュメントを参照)。

ADC#54の場合、プロセッサは(i)オペコードを読み取る必要があります。 (ii)オペランドを読み込む。それは2サイクルです。

ADC ($32), Yについては

  1. はアドレスの上位バイトを取得するために$ 33からリードアドレス
  2. の下位バイトを取得するために$ 32から読みオペコード
  3. 読み取りオペランド
  4. を読んで、低にYを追加アドレスの上位バイト
  5. (アドレスの上位バイト):(下位バイトのアドレス+ Y)、下位バイトの計算を実行する時間がたったのため
  6. ああ、待って、そこに運ばれた場合は、最後の結果が間違っていた、よく読んでください。そうでない場合は、素晴らしい、すべての罰金、このサイクルで気にしないでください。

したがって、5または6サイクルです。

いつでもメモリアクセスをステップバイステップのタイミングでエミュレートし、実際の操作を直交ステップとして実行できます。読み取り、書き込み、または読み取り - 変更 - 書き込みに同じロジックを使用するのも簡単です:読み取りと書き込みは同じタイミングですが、最後に異なるメモリアクセスを行い、すべての読み取り値を1サイクル書き戻します実際の結果を作成しながら、実際の結果を書いてください。

*)すべてのメモリアクセスを同時に実行するため、冗長化されていないものを含めないため、ワーピング時間は少し前からは実際のハードウェアと全く同じです。また、メモリアクセスが時間の独立した概念を持つもの(タイマーなど)を生成する可能性がある場合や、マシンがビデオ出力用にRAMをスキャンする場合はRAM自体にアクセスすると、 CLISEI **のような手順で特殊なケースを追加する必要があることに気をつけてください。エミュレータは、1990年代のように構成する必要はありません。

**)IRQステータスは、すべての操作の最後から2番目のサイクルでサンプリングされます。 CLISEIは、最終サイクルでビットを調整します。したがって、たとえ割り込みが保留中であっても、CLIは、CLIの後の命令の後まで割り込みを発生しません。それ自体はSEIとなる可能性があります。そのため、割り込みが保留されている間に、SEIが実行された後、割り込みフラグがセットされた後、割り込みハンドラにトリップする必要があります。CLI/SEIこれは、6502のサイクルごとの動作をエミュレートしている場合に自然に発生し、操作ごとの操作とタイムワーピングを行う場合、巨大なハックになりがちです。あるいは、そのようなエミュレータは、動作が間違っている可能性が非常に高いでしょう。

+1

冗長なものを含め、メモリからのすべての読み取り/書き込みを観察するのに最適なリソースはhttp://www.visual6502.org/JSSim/index.html –

+1

です。ところで、それはSTIではなくSEIです。 –

+0

@ Eight-BitGuruだからこそあなたは教祖だ! SEt割り込みではなくSet割り込み。一定。 – Tommy

関連する問題