==================================================
はじめに
--------
ベクタースキャン方式のゲーム機として、光速船のエミュレータを開発しました。いままでのファミコンとか、ゲームボーイのようなラスタースキャン方式のゲーム機と違うこともありましたので、簡単にまとめておきます。
グラフィックスのエミュレーション
--------------------------------
最大にして、唯一といってよいのが、グラフィックスのエミュレーションです。
(a) ラスタースキャン方式の場合
ラスタースキャン方式の場合には、以下のようなグラフィックス処理を実行します。
for ( 走査線数だけ繰り返し ) {
走査線1本に対応するCPUクロック分だけ、CPUエミュレーション実行
走査線1本だけ、フレームバッファに描画
}
フレームバッファを画面へ転送
(b) ベクタースキャン方式の場合
これに対して、ベクタースキャン方式の場合には、以下のようなグラフィックス処理を実行することにしました。
for ( 1/10秒程度に対応するCPUクロック分だけ繰り返し ) {
CPU1命令を実行(CPUクロック数を保存)
CPUクロック数分だけ、周辺装置(6522A VIA)の処理を実行
if ( ビームがONか? ) {
ビーム始点、ビーム輝度を保存
CPUクロック数分だけ、ビーム移動
ビーム終点を保存
}
}
フレームバッファをクリア
保存されたビームの始点、終点、輝度に基づいて、フレームバッファにライン描画
フレームバッファを画面へ転送
正解というわけではないと思いますが、InfoVectrexでは、問題なく動作しています。他のエミュレータの構成法について情報があれば、教えて下さい。
おわりに
--------
この文書では、ベクタースキャンのエミュレータの構成法について、InfoVectrexで採用した方法を紹介しました。
参考文献
--------
コンソールエミュレータについて
http://www.geocities.jp/infones1998/tech/Paper.html
(エミュレータ構成法について解説がある)
光速船・Vectrexに関するコラム
http://vectrex.takuranke.com/vectrex_column.html
(ベクタースキャン方式について解説がある)
補遺
----
6809エミュレータを開発する時に、命令を実装する毎に、命令表を蛍光ペンで消していきました。以下は、その命令表の写真です。
タグ:エミュレータ

