プログラムについて

もとになったもの
全てを自作する能力があればいいのですが実際の所,なかなかそうもいきません。
そんな時は先達の成果物をありがたく使わせていただくのが手っ取り早くてよろし。

QUASI88
福永省三さん作のPC-8801エミュレータ。
fMSXをベースに作られている。Unix + X Window System で動くらしいが,当方88を所有しておらず動作未確認。ソースの構成が整然としていてわかりやすかったのと,コメントが日本語だったので(^^;これをベースに決定。まずは不要部分を削除したら 消えるわ消えるわ...P6のシステムがいかにシンプルであるかを実感。Windows版はほぼ書き直しなので,ほとんど面影は残ってない...

MAME
Nicola Salmoriaさんを代表(当時)とする the MAME team の手により現在も進化を続けているアーケードエミュレータ。
数千種類のタイトルに対応し,他の追随を許さない。現在はMESSも吸収し,更に巨大なプロジェクトへと成長中。様々なCPU,サウンドシステムに対応しているが,そのうちのPSGエミュレートのソースコードをベースに使わせて頂いた。非常に高品質な再生が可能だがPSG 3声のためにここまでしなくてもよかったか?

fMSX
Marat Fayzullinさん作のMSXエミュレータ。
これをベースにしたエミュレータも多い。ソースの美しさは芸術的である(と思う)。P6とMSXは構成が似ているため流用を考えたが,どこから手を付けていいのかわからず 断念。結局,参考にした程度にとどまったが間接的にベースにしたと言えなくもない。

M88
ciscさん作のPC-8801エミュレータ。
Windows版製作にあたり,C++のプログラミングスタイルを参考にさせて頂いた。しかしあまりにもレベルが高く詳細は理解不能。I/Oポート周りの実装で一部流用させていただいた。


素晴らしいプログラムを惜しげもなく公開してくださった作者の方々に感謝します。と同時に間違った紹介をしていたら指摘して下さい。

ここまで読んで「おや?」と思った方もいるでしょう。そう,元祖P6エミュレータと言ってもいいiP6 のソースは全く見ていません。だって見たら同じになっちゃうもん。

とか言いつつもmkII対応の際には参考にさせてもらいました。やっぱりあるものは利用しないとね。どうもありがとうございます。

開発環境
全てフリーのツールを使用しています。

MSYS2
Minimal SYStem 2
Windows上にUnixライクな開発環境を構築するためのツール群の第2世代。主要なツール,ライブラリもパッケージで簡単にインストールできるので,あっという間に開発環境を構築できる。MSYS(1)で苦労していたあれは何だったのか。

MinGW
Minimalist GNU for Windows
ざっくりいえば GNU Compiler Collection(GCC)のWindows版。ネイティブなWin32プログラムを生成することが出来る。UTF-8が使えるようになってからは日本語の扱いも簡単になった。リソースコンパイラもいつの間にか日本語(多言語)に対応していた模様。
お手軽にMSYS2のパッケージを使用。

利用しているライブラリ
「なければ探す」の精神で探し出したライブラリを利用しています。
やっぱり自分で作ったものほど信用できないものはないし...

SDL
クロスプラットフォームのマルチメディアライブラリ。
Windows, Mac OS X, Linux, iOS, Android に対応。ビデオ,オーディオなどゲーム制作に便利な機能を中心に比較的低レベルなAPIで構成されている。2.0でマルチウィンドウやハードウェアアクセラレーションに対応。更に便利になり安定感も増した印象。

libpng
PNG Development Group によるPNG画像ライブラリ。
BMPでよければSDLのAPIでいいんだけど,なんとなく芸がないのでPNG。最近のブラウザならPNGも問題ないからいいでしょ。コンパイルにはzlibも使うことになるんでちょっと面倒。

d7752
ciscさん作の μPD7752風味 音声合成エンジン。
μPD7752とはP6シリーズの音声合成チップのこと。mkII以降の再現には必須なだけに非常に重要度の高いライブラリ。厳密にはシミュレータだが,そのクオリティーは文句なし。さくっと作っちゃう技術力に乾杯というか完敗。

fmgen
これまたciscさん作の PSG/FM音源ライブラリ。
簡単な手続きで高品質な出力を得ることが出来る。多くのエミュレータで使用されているのも納得。
SRのFM音源を実装するために使用。

SLibrary
ASTさんさん作の Windows用の便利なライブラリ集。
必要な機能がコンパクトにまとめられており,とても勉強になる。数ある中から SCritical(クリティカルセクションクラス)とThread(スレッド制御クラス)を ちょっと加工して使用。

ソースコード
もともとが寄せ集めなので ファイル毎に癖があります。
無駄なコードもたくさんあります。
一番の問題は私自身がC++をきちんと理解していません。
それでもだんだん整理されてきたかなと思いますので何かの参考になれば幸いです。
ソースを公開してなかったらVWやVXは生まれていなかったかもしれないと考えると
それなりに意義はあったかなと思いますです。

NEC
PC-6000 Series
Emulator