プログラムについて

もとになったもの
全てを自作する能力があればいいのですが
実際の所,なかなかそうもいきません。
そんな時は他人の流用が手っ取り早くてよろし。

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

MAME
Nicola Salmoriaさんを代表とする the MAME team の手により
現在も進化を続けているアーケードエミュレータ。
数千種類のタイトルに対応し,他の追随を許さない。
様々なCPU,サウンドシステムに対応しているが
そのうちのPSGエミュレートのソースコードを流用した。
非常に高品質な再生が可能だが
PSG 3声のためにここまでしなくてもよかったか?

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

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


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

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

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

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

MinGW
Minimalist GNU for Windows
ざっくりいえば GNU Compiler Collection(GCC)のWindows版。
ネイティブなWin32プログラムを生成することが出来る。
日本語の扱いにはちょっと注意が必要。
リソースコンパイラがいつの間にか日本語(多言語)に対応していた模様。
本家ではなくTGM-GCCを使用した。

MSYS
Minimal SYStem
Windows上にUnixの開発環境を構築するためのツール群。
MinGWと合せて使えば GNU フリーソフトなども
"configure / make / make install" でインストールすることが出来る。

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

SDL
クロスプラットフォームのマルチメディアライブラリ。
各種Unix系, Windows, BeOS, MacOS(Classic,X) に対応。
ビデオ,オーディオなどの比較的低レベルなAPIで構成されている。
シンプルだが必要最低限の機能を持ち,安定して動作する。
Allegro とは逆の発想?
2.0でマルチウィンドウやハードウェアアクセラレーションに対応したので
今後利用してみたい。

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

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

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

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

ソースコード
はっきりいって むちゃくちゃ です。
もともと寄せ集めなので ファイル毎に癖があります。
無駄なコードもたくさんあります。
そもそもC++を理解していません。
恥ずかしいので本当は公開したくないんですが
Nicola Salmoria氏から
『絶対にソースコードも配布してね』
と言われちゃったんで...
まあ,何かの参考になれば幸いです。

NEC
PC-6000 Series
Emulator