エミュレータ開発必勝本
〜君もエミュレータ製作者になれる!?〜
 

はじめに

  私が PC-8801 エミュレータ「QUASI88」を作ろうと思い立ったのは、1997年の秋頃です。当時はまだメジャーな PC-8801 エミュレータも存在せず(P88SR.EXEがこの頃にブレイクし始めた)、エミュレータ作成にはどのような知識・情報が必要かもわからないまま、手探り でエミュレータを作り始めました。とりあえずは、fMSX のソースを解読してエミュレータのプログラミング技法を覚えました。そして、古い雑誌や書籍から PC-8801 のハード情報を探し出しては、コツコツとコーディングをしていったものです。

  あれから数年が経ちましたが、今でもエミュレータ製作全般に関する情報はあまり無いように思います。インターネットで検索してもほとんど見当たらないよう です。 (私の探し方が悪いだけでしょうか? エミュレータの使い方についての情報なら、それこそ吐いて棄てるほどあるんですけどね……)

  そこで僭越ながら、エミュレータを作る際に得た知識をもとに、エミュレータの作り方を書いてみることにしました。とはいえ、私が作ったことがあるエミュ レータは前述の QUASI88 だけですので、たいしたことが書けるわけでもありません。本気でエミュレータを作ろうと思っている人なら当たり前すぎる情報かもしれません。でも中にはか つての私のように、どんな情報でも知りたい、と思っている人がおられるかもしれません。そういった人の手助けにでもなってくれればと思います。


参考文献

  いきなり最初から参考文献です。以下は私がインターネット上で見つけた、エミュレータの作り方についての文献です。(これらが理解できるのでしたら、もう この文書は不要ですね・・・ ^^; )


How To Write a Computer Emulator
http://fms.komkon.org/EMUL8/HOWTO.html

Marat Fayzullin氏のページ ( http://www.komkon.org/fms/ ) にある、エミュレータの書き方ハウツーです。内容は英語です。


コンピュータエミュ レータの書き方 日本語訳
http://www.geocities.co.jp/Playtown/2004/howto_j.htm

bero氏のページ( http://www.geocities.co.jp/Playtown/2004/ )にある、『How To Write a Computer Emulator』の和訳です。


エミュレータに関する 技術情報
http://www.geocities.co.jp/SiliconValley/5604/tech/

Jay氏のページ( http://www.geocities.co.jp/SiliconValley/5604/index.html )にある、InfoNES作成時のエミュレータ開発資料です。


エミュレータの実装に関するメモ
http://www1.interq.or.jp/~t-takeda/memo.txt

武田俊也氏のページ( http://www1.interq.or.jp/~t-takeda/top.html )にある、エミュレータの実装に関するメモです。武田氏はエミュレータの世界では著名な方で、古いパソコンのエミュレータ開発に意欲的に取り組んでおられ ます。このメモについても今後も更新が期待できそうです。


So, you want to write an emulator?
http://dsemu.org/tut/

Imran Nazar氏の、「DSemu: The Nintendo DS/GBA emulator」のページ( http://www.dsemu.org/ )にある、エミュレータの書き方の紹介のようですが、英語なのでなにが書いてあるのかよくわかりません。


「エミュレータ のしくみ」某吉 著/工学社 (ISBN4-7775-1100-6 C3004)
http://www.kohgakusha.co.jp/books/detail/4-7775-1100-6

エミュレータの動作について書かれた書籍です。あまり深く突っ込んだことは書かれてい ないようので、エミュレータ作成に興味のある、初心者にはなかなかよいのではないでしょうか。


免責事項

  ここに書いてある事柄は、私個人の経験に基づくものです。私自身コンピュータやエミュレータについて深い知識や造詣があるわけでもないので、思いっきり勘 違いしたことを書いているかもしれません。特に、新旧問わずゲーム機の機能(スプライトなど)や、最近のパソコン・ゲーム機の機能などについての知識は素 人レベルに近いです。

なにか間違いに気付かれましたら、ご指摘頂けたらさいわいです。




CONTENTS


はじめに
はじめに
参考文献
免責事項

導入編・エミュレータって何?
エミュレータって何?
用語の定義
エミュレータを作るために必要なもの

入門編・エミュレータの仕組み
ターゲットの外部装置
ターゲットの内部構造
メモリ
メモリの種類
セーブ用のメモリ
CPU
CPU のエミュレート
I/O ポート
I/O ポートのエミュレート
メモリマップド I/O
メモリマップド I/O のエミュレート
クロックと実行速度
クロックとは
実行速度をエミュレートする
割り込み
割り込みとは
外部割り込みと内部割り込み
マスカブル割り込みとノンマスカブル割り込み(NMI)
割り込み禁止状態
割り込みの優先順位
割り込みのエミュレート
グラフィック
ドット単位で表示を制御するVRAM
キャラクタ単位で表示を制御するVRAM
ゲーム機の表示機能
その他の表示機能
エミュレータ上での表現
サウンド
ターゲットのサウンド機能
サウンド機能のエミュレート
VBLANK処理
ブラウン管の表示のしくみ
HBLANK と VBLANK
タイマとしての VBLANK
エミュレータにおける VBLANK・VSYNC
HBLANK と HSYNC
その他あれこれ
エンディアンネス
リセット信号
複数のCPU
エミュレータならではの機能
高速化

実践編・エミュレータを作ろう
まだ書いてません。どんなことを書こうかな…。
とりあえずは PC-8801 の情報をまとめて、PC-8801 エミュレータを作る方法を書いてみたいですね。






この文章全体 をテキストにしたものは、こちらからどうぞ。 → make-emu.txt (Shift-JIS, CRLF)




前へ
先頭
次へ

ホームページに戻る
メールはこちら……… fukuchan@mh1.117.ne.jp