QEMUでWin16
なんでいまさらWin16?っていう疑問もあるかもしれないけど、手持ちのノートPC(FMV575NU)でも動いているし、デバッグしきれなかった環境を制覇してやろう、という気持ちもあるし(なんで?)、何より古いアプリケーションを動かして古いデータを復活させるということができます。
それに、ブートさせる手間が少ないですしねぇ〜!実機でブートを繰り返していると結構時間がムダになります。マシンスペックの問題がほとんどなんでしょうけど、わずかな設定ミスによるブート失敗と設定修正を繰り返していると、ほんとに時間かかります。過去にそういうことをやっていたわけですから・・・。
そういうことで、QEMUによるWin16の環境を再現して、いままでやれなかった、とか踏み切れなかったとか、そういうことをやれるんじゃなかろうか?というわけなのです。
それに、Win16の頃の現役PCもだいぶなくなってきましたし・・・。まぁ、別にWin16じゃなくってもカーネル1.0系の「VineLinux1.0」とかそういう古いモノでもいいんですけどねぇ〜!
※この作業を開始したのは2011年03月10日のことです。まさか翌日とてつもないことが起こるとは・・・。
このページ内のリンク
1.必要なモノを揃える
2.MS−DOSとWindows3.1を動作させる
3.バラード2が動く?!
4.フリーセルが動いた!
5.WinGSDKをインストールしてみたのですが・・・
6.MP3プレーヤを試してみた
7.WinGのサンプルをビルドするのだぁ〜!
8.サウンド・MIDI系は鬼門のようです。
1.必要なモノを揃える
QEMUについては、いまさら私が導入方法を述べる必要もないでしょう!むしろ、「なんでいまさらQEMU?」って言われそうな気がします。Windows版においては、ディスクのイメージ化の手段をどうするか?がポイントになるでしょう。色々なフリーツールがありますのでお好みでどうぞ・・・。
私が用意したのはコンパックMS−DOS5J/V、Windows3.1Beta、サウンドブラスターの添付ディスク、Ballade2などです。
MS−DOSについては、ネットから入手できるモノがあります。DR−DOSも個人的に使用する分には問題ないですし、FreeDOSもありますからいろいろ選択肢があると思います。
Windows3.1に関しても、未だにオークションで出てきているところを見ると、手持ちにあるという方がまだいらっしゃるのだと思います。
2.MS−DOSとWindows3.1を動作させる

100MBのディスクイメージを作成して、そこにMS−DOS、Windows3.1のインストールをやりました。そのあとにMS−DOSがブートしたところです。エミュレータとはいえ、当時の実機よりもはるかに速い起動です。ここからおなじみの「win」とタイプするとなつかし〜いロゴの登場です。
そして、「ジャジャ〜ン」というオープニングサウンドです。「tada.wav」がちゃんと鳴ります。
QEMUが動作できているPCでしたらサウンドカードも当然あるはず!そういうPCならば鳴らせるはずです。あとはWindows3.1の設定の問題で、SB1.5を組み込んでポートは220、割り込みは5とすればうまくいくのではないか?と思います。組み込み時にエラーが出ましたけど、Windows3.1を再起動したらちゃんと動作しました。
3.バラード2が動く?!
MIDIシーケンサの「バラード2」をインストールしてみます。MIDI環境がないので意味がないかもしれないですけど、「バラード2」で作成したデータなどがある場合に使えるモノになるかもしれません。データをSMFで保存しなおしてから引き出せばホストOS側で再利用できますものね!
ちゃぁ〜んと正常に表示されています。このソフトをWindows2000で動かすとフォントがおかしくなるんですよぉ〜!Windows3.1の頃にあったフォント関係の機能がWindows2000から変更になってしまったのが原因です。MIDI環境がないと再生できないわけですが、Windows2000の環境で正常に表示できた姿をはじめて見れました。(もちろん、XPでも同様の現象が出て正常に表示できません。)
VGAなんで画面が狭すぎ〜〜!と文句をいわない。動くだけメッケもの!
4.フリーセルが動いた!
フリーセルが動くのは当たり前、なんですけどWindows3.1ではWin32sをインストールした後の動作確認用に添付されていました。エミュレーションでちゃんと動いているわけですから、たいしたものです。私にはとぉっ〜ても作れません!
他にも色々試してみたいのですが、とりあえずここまで!(2011−03−13)
5.WinGSDKをインストールしてみたのですが・・・(2011−03−14)

Windows3.1におけるDirectX(?)ともいうべきWinGです。実際にはWin32APIとして32ビット版APIが未だに引き継がれているわけですが、残念ながらDirectXという位置付けではありませんでした。普通のWin32APIだったのですねぇ〜!
実機ではもちろんすんなりとインストールできたWinGですが、このエミュレータ上ではサンプルのコピー中にエラーとなってグループファイル作成に至りませんでした。WinGのランタイムはインストールできており、コピーされたWinGのサンプルは実行できました。HDDイメージが100MBというのは少なすぎたかもしれません。しかし、私のPCではこれくらいにしておかないと足りなくなってしまうのでこのくらいが妥当かな?Windows2000のPCでHDD30GBですから・・・。いまどきのPCではありませんから・・・。
WinGのAPIはきわめて少ないAPIで構成されたモジュールです。当時は力不足で満足にプログラミングできませんでしたので、これからの楽しみとしてやっていこうかな?と思います。当時はマイコン系ハード設計をやっていたので、PCソフトまではなかなか身に付けるところまではいけなかったのです。んじゃ、PCを何に使っていたの?って言ったら、「EDAツール」でした。つまり「回路設計ツール」です。
今どきの「回路設計」というと「VHDL」や「AHDL」とかで記述するほうを指しますが、そういうモノではなく、部品と部品を結線する情報を作成して基板を起こすほうの設計です。そう、古い手法のモノですよ!
今は仕事でハードウェア設計をやることはありません。派遣でソフトウェア開発をやるほうなので・・・。それにしても、仕事が激減して久しいこの頃ではあります・・・。今は・・・ただのヒマな年寄り・・・というしかありませんね!
6.MP3プレーヤを試してみた(2011−03−17)
Windows 3.1x Softwareにある「WinPlay3」というモノをインストールしてみました。

すんなりインストールできましたが、MP3ファイルのフォーマットが解析できないというエラーで再生できませんでした。そういえば、Windows3.1の頃はMP3なんて再生したこともなかった?と思う。マシンスペックが低すぎるのではなっから眼中になかったような記憶である。たしか、「Rio」なんていうMP3プレーヤが出てきて欲しかったけど買える状況じゃなかったよなぁ〜!
まだ実機でも試していませんが、このMP3プレーヤはネットワーク対応のようです。もしかするとネットワークがつかえないといけないのか?だとしたら実機でもダメかもしれない。ネットワーク環境は全然やってなかったなぁ〜!
となると、ネットワークも考えてみる必要があるかもなぁ〜?
なぁ〜んでこんな古いモノをいじくりまわしているのかって?そりゃ〜、ビンボーだからです。ガラクタPCでやれることを実験しているわけです。今風のネットブックなんぞあれば、な〜んの問題もないのでしょうけど、入手できそうなモノは古いロースペックPCしか考えられません。手持ちのノートPCでさえP75のWin95ノートです。バッテリーがつかえればそれでいけるのですが、それもかないません。バッテリーを入手するだけでかなりのコストです。
それならいっそのこと、バッテリーが安くすみそうなロースペックノートPCでも使えそうな環境を考えてみたらどうかなぁ〜?ということではじめてみた次第。このページの目的は、実はこういうところにあったのです。
まぁ、Windows2000PC上のQEMUでいろいろやっている分にはお金もかかりませんし、時間も無駄になりません。こういうことを実機でやりはじめると、足りないモノがでてきたり、いたずらに時間がかかってしまったりと・・・大変なわけです。
実機であるP75のFMV575NUで試してみたところ、心配したようなこともなく、あっさりと動作してしまいました。QEMUとはいろいろ環境が違うので一概にどうのこうのと言えないわけですが、やはり実機は「ホンモノ」ですね!(なんのこっちゃ!)
このFMV575NUのサウンドはモノラルで44.1kHzサンプリングには対応していません。22.05kHzサンプリングまでです。内蔵スピーカなんてとても聞くに堪えないモノですが、ヘッドホン出力に至っても「カセットプレーヤ」にも負けるという音質です。
しかし、そんなFMV575NUでもバッテリ駆動ができたらなぁ〜!と思うのでありました。苦労して修理したものだし、長いこと使っているし・・・。
7.WinGのサンプルをビルドするのだぁ〜!(2011−03−20)
WinGのサンプルにあるCUBEをビルドしてみます。エミュレーション環境ではディスクエリアが少なすぎますし、コンパイル速度も犠牲になりますのでホストOS上でVisualC++1.0を使用します。ここではWindows2000ですが、XPでも可能かと思います。ただし、16ビット版のVisualC++1.0はいろいろ問題があり、すんなりいきません。
まず、VisulaC++1,0のセットアップがうまくいきません。Windows3.1でセットアップを行った環境をWindows2000かXPのほうへコピーしておく方法が好ましいでしょう。まぁ、手作業でセットアップできないこともありませんが・・・結構大変ですよ!
それと、Windows3.1でVisulaC++1.0をセットアップしたときに「System.ini」にセットされた内容も移さないといけません。VisulaC++1.0は独自のDOSエクステンダ「DOSXNT.EXE」といういやぁ〜らしいモノがありますので・・・。また、各EXEに対する「互換性」のプロパティを設定しておかないとうまくいきません。

これを見ると「Windows2000でVisulaC++1.0が動くんだぁ〜!」って思ってしまいますけど、そんなことはありません。ワークベンチ上からはビルドできないのです。ワークベンチにいろいろWindows3.1の頃のバグがたくさんあるみたいです。ファイルサイズの取得とかタイムスタンプの2000年問題とか・・・です。
ビルドはコマンドラインからしかできませんので悪しからず!

ビルドはこんな感じですかねぇ〜?ビルドに関する注意は、「環境変数」です。余計なところにパスが通らないようにしないと邪魔されますよ!他の処理系をインストールしている場合は特に注意が必要です。(そりゃ、私だぁ〜!)
また、WinGSDKのライブラリも使用しますので、それも検索されるように設定を加えてあげないと「あのファイルがないぞぁ〜!」ってことになります。意外と忘れやすいモノなので・・・。
できあがったEXEをイメージファイルにコピーしてエミュレータ上に持ってくれば、無事動作確認ができる、という流れになります。
VisualC++1.0のワークベンチからビルドはできませんが、コマンドラインからビルドできてしまえばデバッグできる材料が揃いますので、何回もエミュレータへ持っていく必要もありません。充分デバッグしてからエミュレータのほうへ持っていけばいいわけです。
あくまでも、VisualC++1.0を持っているという前提が必要な方法ですけど・・・。
OpenWatcomでこれをやるには・・・プロジェクトの書き換えやライブラリの作成など、かなりの手間が必要です。OpenWatcomでやろうという方はそれなりのスキルがあるでしょうから、自力で解決しちゃうとは思いますが・・・。
OpenWatcomは「CLクローン」と言いながら、あんまり互換性ないものです。互換性が高かったのは・・・DOSの時代の話ですね・・・。
DOSエクステンダとかWindows3.1あたりから事情が変わってしまったのでしょうね。いずれにしても、今は役に立たない話です^^;
8.サウンド・MIDI系は鬼門のようです。(2011−03−21)
実機のほうで問題なく動作する
SequenceStudioLiteをエミュレータで試してみました。

MIDIデバイスの列挙がちゃんとできていたのでうまくいくか?と思っていたら、まったくダメでした。しかも進行状況を示すメジャーメントタイムもメッタメタの動きになるし・・・。多分、マルチメディアタイマ系のほうですね、これは。マルチメディア系がダメ?ということはサウンド・MIDI系はもちろんダメ!ということになりそうです。WAVE再生ができるのに・・・。残念です。
プログラミングも含めて、MIDI系を主体にしたかったので、これではダメですね!まぁ、所詮はエミュレータ、ってことですね。
というわけで、もくろみはあっというまにくずれてしまいましたけど・・・。しかし、この環境もあとで何かと使うかもしれないので残しておこうかと思います。MS−DOS用のLHAも入れたことだし、実験用にはいいですね。