4

私は現在、次のエミュレーションプロジェクトであるサイクル精度の68000コアでCを学習しています(私の最後のプロジェクトは、Javaで記述された非サイクル精度のSega Master Systemエミュレーターで、現在3番目のリリースです)。私の質問では、サイクルレベルの精度は、物事をこのレベルにすることは私にとって新しいことであると見なしています。

1 CPUサイクルの粒度に分解するには、おそらくメモリアクセスにかかる時間などを知る必要がありますが、私の質問は、メモリのフェッチ/書き込み段階で複数のサイクルを要する命令の場合、CPUは何をしているのかということです。各サイクル-たとえば、サイクルごとにコピーされるビットのx量です。

私のSMSエミュレーターでは、各命令のサイクルカウントを使用するだけなので、M1ステージなどについてあまり心配する必要はありませんでした。つまり、サイクルレベルではなく、命令レベルに対してのみ正確です。私はアーキテクチャ固有の詳細を探しているのではなく、このレベルの粒度に移行するときにどのようなことに注意する必要があるかを考えているだけです。

ただし、68kの詳細は大歓迎です。基本的に、CPUが命令のそのフェーズの途中でまだデータを書き込んでいる間に、ビデオチップがメモリの領域から読み取る場合、および他の同様の状況で何が起こるのか疑問に思っています。十分に明確にしたと思います、ありがとうございます。

4

2 に答える 2

1

私の推測では、この種のタイミングで十分な結果を得るために、耐え難いほどの詳細に入る必要はありません。とにかく、アーキテクチャの詳細に入りたくない場合は、これを行うことはできません。

あなたの主な質問は、「CPUがまだデータを書き込んでいる間にビデオチップがメモリの領域から読み取るとどうなるか」ということのようでした。一般に、これらの古いチップでは、バス プロトコルは非常に単純であり (パケット化されていません)、通常、バスがビジーであることを示すピンがあります。そのため、CPU がメモリに書き込みを行っている場合、ビデオ チップは CPU の処理が完了するまで待機する必要があります。このような制限があるため、しばらくの間、CPU によるフレーム バッファへの書き込みと RAMDAC による読み取りを同時に行えるデュアル ポート RAM が一般的でした。

于 2012-06-25T15:40:43.020 に答える
1

真にサイクル精度の高いエミュレーションを行うには、まず基準として使用するマスター クロックを決定する必要があります。これは、実行中のソフトウェアが発生順序の違いを検出できる粒度で最速のクロックである必要があります。これは CPU クロックによる可能性がありますが、ほとんどの場合、バス サイクル時間によってイベントを識別できる粒度が決定されます (多くの場合、それは CPU クロックのほんの一部です)。

次に、そのバスに接続されているさまざまなデバイス (IC) の優先順位を調べる必要があります (複数のバス マスターがある場合)。例として、ビデオ DMA が CPU を遅延させることができるかどうか (およびその方法) があります。

通常、同時に発生するイベントはありません。DMA が読み取る前に CPU が書き込むか、その逆です (これはデュアル ポート デバイスの場合でも当てはまります。デバイス固有の優先メカニズムを考慮する必要があります)。

どのクロックが識別可能なイベントの粒度を効果的に制御しているかをしっかりと理解したら、その動作を正確に再現するようにエミュレーターを構成する方法を考えることができます。

このようにして、すべてのデバイスの動作に関する十分な情報があれば、100% サイクルの正確なエミュレーションを作成できます。

セガのハードウェアの詳細については何も知りません。

于 2012-06-28T15:38:37.203 に答える