CPUエミュの作成を考える
一度は作ってみたいと思うがどこまでやるのか?
というのは迷うところ。
例えば1命令の処理を行う場合
Z-80の LD A,(aabbh)
(aabbh = 16bitアドレス aa=上位バイト bb=下位バイト)
CPUの動きは
PC=プログラムカウンタ
(1)OPコードフェッチ
アドレスバスにPCが指すアドレスが出力→
→PCが指すアドレスの内容 OPコードがメモリからデータ
バスに現れCPUに読み込まれる→PC=PC+1→
(2)オペランドフェッチ
→PCが指すアドレスの内容 bbh がメモリからデータバスに
現れる→Aレジスタに読み込まれる→PC=PC+1→
→PCが指すアドレスの内容 aah がメモリからデータバスに
現れる→Aレジスタに読み込まれる→PC=PC+1→
(3)処理
→読み込まれたアドレス aabbhがアドレスバスに出力→
→出力アドレスのデータがデータバスに現れる→
Aレジスタに読み込まれる。
この流れが LD A,(aabbh) の動作で、よくCPUの
データシートの命令のタイムチャートで示される動作の
説明である。
エミュの実現手段として3パターン程あるか?
実物の動作に近いエミュ2パターン
[1] 先に示したようにCPUの動作にソフトウェア側の
処理も近い記述をして実現する方式
[2]命令単位で処理を記述(命令ごとカスタム)してその
命令の実行クロックだけをカウントしサンプリング
時間レート内での空時間でウェイト処理を入れ
処理時間を実機に近い値で処理をする方式。
[3]命令コードの機能だけ見たし出来るだけ高速に実現
して今の時代ならこれくらい出来るはずという
極限追及方式
この3種類だろうか?
[3]の実現方法でも更に2パターンはある。
各命令内記述ではインラインアセンブラまで使う方法と
あくまでもC/C++の記述駆使までの方法と分けられ
どちらもプログラマの挑戦し甲斐のある部分である。
インラインアセンブラを使ってしまうと実行環境
毎に用意する必要性がありポータビリティは損なわれるので
C/C++による構造化の効率化と記述の限界で留めるべき
である。
個人的には正当コードのエミュ作成の場合[3]を目指すこと
になるが今のPCではどのくらい(何MHz)相当なのだろうか?
4MHzのZ-80Aから今のCPUは3GHzのQuadコアなら…
クロックは単純に3000/4=750倍なので
4MHzのCPUを余裕でエミュできるはずである。
但し、Windowsの他の処理がバックグラウンドで動いているの
でエミュ環境がCPUエミュに割ける時間はの1/16~1/4くらい
か?それでも楽々でリアルエミュできるはず。
という概算が出るので
それから考えるとZ-80Hや40~60MHzくらいまでは
エミュ可能か?面白い!
スペックを勝手仕様設定でRISC的に1命令1~2クロックとし
てしまえばもっと早いCPUとなる。
だから 8bit CPUエミュでも相当遊べるエミュパソコンを
実現できるはず。
PS2エミュがあそこまでできるのだからレトロ8bitPCは
軽快に動作するのは明らか。
だからこちらとは別カテゴリーの『仮想8ビットCPUおやじ』
を立ち上げて理想の8ビットPCを作ろうとしているのだ。
(いつ完成するか完成するのかも分からない
人生の余興度が高いカテゴリーではある)
Z-80のリアルCPUエミュに関しては拘りたいのは
CPUコア部分だけなのでそれ以外の部分は
オープンソースのものをベースにコア部分の差し替え
でかなり楽に実現は出来るので暇さえあればやってみたい
気持ちはある。
[余談]
実際に差し替えて遊んでみたいのは完成度の高い
EmuZ-2500だが MZ-25xx系の集めた仕様書籍が少なく情報
不足で遊び辛い。
X1turboZは中古書籍を買いあさってかなり揃っているので
できればX1turboZのエミュがあればよいのだがX1シリーズは
X1turboまでのエミュしかない。
またMZ25はROMバイナリ入手可能に対しX1系ROMは
各自吸出ししかできず turboZ本体は以前にヤフオクで入手し
ているものの吸出しツールと表示できるディスプレイもないの
で非常に残念な状態だ!
こうなるともう少し楽な自分仕様の8ビットCPU&PCを
作ってしまう方が早いと思ってしまう。
| 固定リンク | コメント (0) | トラックバック (0)





最近のコメント