ラベル SDL の投稿を表示しています。 すべての投稿を表示
ラベル SDL の投稿を表示しています。 すべての投稿を表示

2018年11月6日火曜日

DOSBox-X 0.82.10 (2018-11-03 23:00) が OS X (Mountain Lion) でビルドできた話

リリースはこちら。コンパイルにあたって以前の版(たとえば0.82.7)と変わるところはない。現状ではMac用実行ファイルのうちSDL2版は、描画に surface しか選択肢がないので使用には適さないだろう。SDL1版は opengl とか openglnb が選択肢にあって、画面いっぱいまで伸びながら滲まないフルスクリーンが可能である。たったこれだけのことがSDL2版にはできないのだが、しかし思い出してみるに Neko Project II (np2sdl2だったかxnp2だったか忘れたが) にだって依然としてできていないんだからそんなに簡単な話ではないのかもしれない(どちらもSDL2を使用するのでそれはありうるかもしれない。まあ単に需要がないだけだったりするのかとも思うが)。
まあしかしgithubに上げると外人(失礼)がわらわら寄ってきて英語でissueを連発してくるのでうざいと思ってしまうような本邦の人間にはgithubなんぞ向いてないんでしょうね。英語の壁だけでなくて協力の壁とか本邦人にはいろいろ壁がありそうだ。

2018年9月19日水曜日

DOSBox-X 0.82.9 (2018-09-01 14:00) が OS X (Mountain Lion) でビルドできた話

以前に DOSBox-X 0.82.7 でビルドできたという記事を書いたが、今回の 0.82.9 版についても、SDL版とSDL2版の両方について事情はまったく変わらないようだ。ソースコードとバイナリのリリースはこのページで行わていれる。動作については今後見て行く予定。そもそも CHANGELOG のほとんどは読んでも意味がわからないのであるが、PC-98 エミュレーションについての改善は今回少しある様である。

まあしかしここで日本語が母語のプログラマが協力できたらいいですのにね。現在のところPCjrについてのエミュレーションが進んでいる様子らしいので、PCjrに日本語化を行ったIBM PC/JXについても何がしかできるのかもしれん。まあ俺は一切のドキュメンテーションを持ってないので無理ですが。

馬鹿にするわけではないが日本語の母語の人でSDL2版がビルドできませんなどとIssueを出している人がいてな。こういうのは聞くのがえらいのかもしれんけど、さすがに自分でなんとかできる(べき)範囲だろとちょっと思ったりもした(すいません器が小さい人間なもので)。まあしかし俺も同じところで詰まったときに恥ずかしがらずIssue を投げたらよかったのかもしれん。

質問に答えることで製造物責任をしっかり果たす開発者の人はえらいです。俺もかくありたい。以下のスクリーンショットは動作したところの図ですが、あのフリーソフトの名作であるFD(出射厚氏作)はまだ十全には動かない様子。

2018年6月4日月曜日

DOSBox-X 0.82.7 (2018-06-01 13:05) が OS X (Mountain Lion) でビルドできた話

今回こそが正式版の 0.82.7 だそうで、リリースはこちら。やったことは以前のエントリと完全に同じだけどもそれをまとめておく。

渡さないといけない環境変数は自分の場合これだけなので、これをあらかじめ build-macosxbuild-macosx-sdl2 に書いておく(必要があるかはともかく):
export CC=clang-mp-3.7
export CXX=clang++-mp-3.7
export CPPFLAGS='-I/opt/local/include -stdlib=libc++'
export LIBS='-stdlib=libc++' # SDL1.x の場合
export LIBS='-stdlib=libc++ -framework CoreFoundation -framework CoreServices' # SDL2.x の場合
./configureに渡すオプションも同様に書き足しておく。XQuartzのインストールされた場所なので(当然)人によって違う。要らんかも:
--x-includes=/opt/X11/include --x-libraries=/opt/X11/lib
以下の内容のパッチdrive_local-OSXMountainLion.patchを、解凍したソースコードのルートに置く:
--- src/dos/drive_local.cpp 2018-05-03 23:47:07.000000000 +0900
+++ src/dos/drive_local.cpp 2018-05-09 01:18:51.000000000 +0900
@@ -31,6 +31,9 @@
 #include"inout.h"
 #ifndef WIN32
 #include<utime.h>
+# if defined(__APPLE__) && defined(__MACH__)
+# include<sys/syslimits.h>
+# endif
 #else
 #include<sys/utime.h>
 #include<sys/locking.h>
パッチを当てる:
$ patch -b -p0 < drive_local-OSXMountainLion.patch
最後にビルドする:
  1. SDL 1.x: $ ./build-macosx
  2. SDL 2.x: $ ./build-macosx-sdl2
で終わり。

2018年5月20日日曜日

DOSBox-X v0.82.7 WIP (2018-05-13版) が OS X (Mountain Lion) と libc++ でビルドできた話

リリースはこちら

前回の教訓としての「 C++11 必須」を念頭に、 libc++ を明示的に選択することで clang でのビルドが可能になりました。 ./configure に必要なのはこれだけ。それ以外は2018-5-13版の通り。
$ CC=clang-mp-3.7 CXX=clang++-mp-3.7 CPPFLAGS='-I/opt/local/include -stdlib=libc++' LDFLAGS=-stdlib=libc++ ./configure --x-includes=/opt/X11/include --x-libraries=/opt/X11/lib --prefix=$HOME --enable-debug --with-sdl-prefix=/usr/local/src/dosbox-x-dosbox-x-wip-20180513-1316/vs2015/sdl/linux-host/lib
インクルードでだけ /opt/local を要求するのは変なので、これも不要かもしれない。いずれためす予定

2018年5月17日木曜日

DOSBox-X v0.82.7 WIP (2018-05-13版) が OS X (Mountain Lion) でビルドできた話

リリースはこちら

ビルドでやることは毎度同じ。当てるパッチも前回と同じCPPFLAGS から XQuartz のインクルードを外して MacPorts だけにしたが予想されていた通り不都合はない。 いまのところなんら変更なくビルドできるのはありがたいものです。
$ ./autogen.sh
$ patch -b -p5 < drive_local-OSXMountainLion.patch
$ ./build-debug      # 内部SDL1.xのビルドのみ,本体のmakeはコメントアウトした
$ CC=gcc-mp-5 CXX=g++-mp-5 CPPFLAGS=-I/opt/local/include ./configure \
--x-includes=/opt/X11/include --x-libraries=/opt/X11/lib --prefix=$HOME \
--with-sdl-prefix=/usr/local/src/dosbox-x-dosbox-x-wip-20180513-1316/vs2015/sdl/linux-host/lib
$ make -j5 # DOSBox-X本体のmake
$ make install
変更点で特筆すべきものは、Mac だけで 設定 '[sdl] output=opengl' がクラッシュしてたのが直ったというところ。これで画面すみずみまでフルスクリーンができるようになった。もはやこれだけで np2, xnp2 のフルスクリーンよりすごい。好みの話になるが、 'fullresolution=1280x800' で画面の隅まで使いきるフルスクリーンにできて、しかも 'output=openglnb' でドットのエッジがきっちり立つようになる設定をあわせるのが最高です。以下がその証拠:

2018年5月13日日曜日

DOSBox-X v0.82.6 の PC-98 に関する Compatibility

ディスクイメージではなく実ファイルをホストOSのディレクトリ構造に書き出したものをマウントしてチェックした。

※2018-06-04追記: ホストOS側ファイルシステムに書き出せてなかったアイデス作品の評価を訂正した。

playable は保守的な評価であり、実際には supported なものがおそらく存在する。PIL作品(学園ソドム, 堕落の国のAngie)とD.O.作品(雑音領域)については不具合は皆無。こちらは supported としておいてもよさそうです。猟奇の檻、猟奇の檻 第2章もどちらも同様に playable だがもっといけるかもしれない。アイデス作品(香奈子、尋問遊戯、トラベル☆ジャンクション)について、『香奈子』はマウスで刺激しないと次の画面が現れない場面が多い、音楽(86音源「外付け音源」)はちゃんと鳴る。と選択肢とかの文字が潰れているが十分プレイ可能なので45%, 『尋問遊戯』はロゴの音は鳴るがメインの音が鳴らない(効果音だけ鳴る)。また選択肢の枠が変に潰れているがプレイ可能ではある、といった点を考慮してplayable下限ぎりぎりの 35% とした。『トラベル☆ジャンクション』はマウスで刺激しないと次の画面が現れない場面が多い。音楽(86音源)はちゃんと鳴る。ところどころ、ロード画面とかの文字が潰れている。メインウィンドウの中でマウスのクリックに反応しない場合が多いのでプレイはややつらく、playable下限に近い 40% とした。

エルフと天津堂作品には少々の不具合があるが、これを playable とすべき理由とまでは思わない。ただし以下に掲げた範囲でのエルフとシルキーズの作品(愛姉妹, 遺作, 河原崎家の一族, 野々村病院の人々)は共通のゲームエンジンを使用するらしく、ただ一点、起動してからマウスで一度刺激しないとアナログ16色か8階調液晶かの選択肢が現れない(それまではキーボードからは一切の操作を受けつけない)点だけが共通して変な以外の不具合は無かった。『遺作』については全ハッピーエンドを確認したので supported とする。天津堂(WAVER)はそれぞれのクリックに二回クリックが必要な点だけが変。シーズウェア作品では『GLORIA 禁断の血族』のみが全角文字が現れるのでこちらのグループに入れる。この作品のみが画面下にファンクションキー列を現さない。

なお、 runnable だったものについて、その評価に至る理由を書く。グロリア以外のシーズウェア作品 (EVE, エイミーと呼ばないでっ, 悦楽の学園, 禁断の血族, XENON, DESIRE)は順調に起動するものの、半角文字は表示されるが全角文字が出てこないので殆ど読めないし、画面下にファンクションキー列が現れる。戯画の作品(ブリガンティ)はアドベンチャーパートのみ軽快に動作する。フォスターの作品(ここは楽園荘2, 花の記憶 第二章)はタイトル画面まで進むので runnable としたが、マウスを動かしたら全部固まる。

最後に broken 評価に至る理由について書いておく。日本ファルコムの各作品は完全にだめであり、起動すると画面が真っ黒になりうんともすんとも言わない。アイデス(フェアリーテール レッドゾーン)の作品(尋問遊戯, 香奈子)はタイトルにまでどころかチカチカするブランドロゴやそれ以前のアイデスのロゴまでも進まず止まるためにこの評価。

やはり np2 は偉大なんだな、ここに挙げたもののほぼ全部(『禁血』以外)が動くので (anex86 でも動くのかも知れんが確かめられない)。とはいえマウスポインタの挙動が正常なのとフルスクリーンの筋の良さは np2xnp2 にはない DOSBox-X のよいところなのでぜひエミュレーション精度を高めてこれを生かしてほしくある。

PC-98 Game: Year: Version: Status: runnable - playable - supported
愛姉妹 二人の果実 1994 0.82.6 playable 67% (playable)
遺作 1995 0.82.6 supported 90% (supported)
EVE burst error [イヴ] 1995 0.82.6 runnable 25% (runnable)
WAVER -The Seeker 2- 1996 0.82.6 playable 67% (playable)
エイミーと呼ばないでっ 1995 0.82.6 playable 67% (playable)
英雄伝説IV 朱紅い雫 1996 0.82.6 broken
悦楽の学園 1994 0.82.6 runnable 25% (runnable)
禁断の血族 1993 0.82.6 runnable 25% (runnable)
XENON -夢幻の肢体- 1994 0.82.6 runnable 25% (runnable)
学園ソドム 〜教室の牝奴隷達〜 1995 0.82.6 playable 67% (playable)
香奈子 1996 0.82.6 playable 45% (playable)
河原崎家の一族 1993 0.82.6 playable 67% (playable)
GLORIA 禁断の血族 1996 0.82.6 playable 67% (playable)
ここは楽園荘2 1995 0.82.6 runnable 5% (runnable)
雑音領域 1996 0.82.6 playable 67% (playable)
尋問遊戯 1995 0.82.6 playable 35% (playable)
堕落の国のAngie 〜狂界の牝奴隷達〜 1996 0.82.6 playable 67% (playable)
DESIRE 背徳の螺旋 1994 0.82.6 runnable 25% (runnable)
トラベル☆ジャンクション 1996 0.82.6 playable 40% (playable)
野々村病院の人々 1994 0.82.6 playable 67% (playable)
花の記憶 第二章 1996 0.82.6 runnable 5% (runnable)
ブランディッシュ リニューアル 1995 0.82.6 broken
ブランディッシュ2 リニューアル 1995 0.82.6 broken
ブランディッシュ3 リニューアル 1995 0.82.6 broken
ブランディッシュVT 1996 0.82.6 broken
ブリガンティ 1995 0.82.6 runnable 30% (runnable)
猟奇の檻 1995 0.82.6 playable 67% (playable)
猟奇の檻 第2章 1996 0.82.6 playable 67% (playable)

2018年5月9日水曜日

PC-98 エミュレータにもなる Dosbox-X 0.82.7 WIP (2018-05-06版) が OS X (Mountain Lion) でビルドできた話

前回 0.82.6 が出てビルドした のにすぐ3日後に最新版 v0.82.7 がリリースされたのでそのビルドもやってみたらできました。ここで言う v0.82.7 とは DOSBox-X menu rewrite WIP BETA 2018-05-06 17:54 のことです。

(※追記) 0.82.7 は最新版ではなく、最新版は依然として 0.82.6 のままだった。0.82.7 は次のマイナーバージョンアップの前のベータ版(?)ということだろう、WIPというのはそういうことだな。変更の内容から見て最新版が0.82.6なのはわかるんだけれども、いずれにせよ Mac 用に 0.82.7 をビルドする意味はほぼ(全く)ない。

前々回のパッチには間違いがあった のでなおした。__APPLE__ または __MACH__ のどちらかなのではなくて、どちらも定義されてないとだめ、というのを他人の作品を見て理解した。
--- src/dos/drive_local.cpp.orig 2018-05-03 23:47:07.000000000 +0900
+++ src/dos/drive_local.cpp 2018-05-09 01:18:51.000000000 +0900
@@ -31,6 +31,9 @@
 #include "inout.h"
 #ifndef WIN32
 #include <utime.h>
+# if defined(__APPLE__) && defined(__MACH__)
+# include <sys/syslimits.h>
+# endif
 #else
 #include <sys/utime.h>
 #include <sys/locking.h>
上記のパッチをさしあたりここでは drive_local-OSXMountainLion.patch となづけた。パッチの適用はいまいちやりかたがわかってないのであまり書きたくないのだけど、文脈上避けられない。

あとは前回とほぼ同じだが、/foo/local の下で make をやるとかってに /foo を見にいくのかもしれんという気づきを得たので /usr/include をインクルードするのをやめた。結果はおなじである。たぶんCPPFLAGSのX11のインクルードも不要だろう。解凍したソースコードのルートディレクトリで以下のように入力した:
$ ./autogen.sh
$ patch -b -p5 < drive_local-OSXMountainLion.patch
$ ./build-debug      # 内部SDLのビルドだけ成功,本体のmakeは失敗
$ CC=gcc-mp-5 CXX=g++-mp-5 \
CPPFLAGS='-I/opt/local/include -I/opt/X11/include' \
./configure --x-includes=/opt/X11/include --x-libraries=/opt/X11/lib \
--with-sdl-prefix=/usr/local/src/dosbox-x-dosbox-x-wip-20180506-1805/\
vs2015/sdl/linux-host/lib \
--prefix=$HOME
$ make -j5
$ make install
もちろんこれは私の環境のための備忘録なので、たとえば XQuartz や MacPorts が入ってない環境の人はこれとだいぶ違う ./configure になるでしょう。


2018年5月7日月曜日

Dosbox-X 0.82.6 が OS X (Mountain Lion) でビルドできた話

リリースはこちら

ソースコード付属の build-debug スクリプトを利用することでソースコード付属の内部 SDL を利用するのだけど、そのビルドが完了すると次にパッケージ本体の ./configure を始めようとして失敗するので、私の環境に特有な情報(MacPorts とか XQuartz とか、もしかすると冗長に与えすぎかも)にあわせてさきほどビルドできたSDLの場所を --with-sdl-prefix オプションで与えて ./configure をやりなおすとビルドに成功する。なお、以前述べたように依然として自家製パッチが必要な点は変わらない。
まとめると、入力した内容は以下の通り:
  • ./build-debug
  • CC=gcc-mp-5 CXX=g++-mp-5 CPPFLAGS='-I/opt/X11/include -I/opt/local/include' ./configure --x-includes='/opt/local/include /opt/X11/include' --x-libraries='/opt/local/lib /opt/X11/lib' --with-sdl-prefix=/usr/local/src/dosbox-x-dosbox-x-windows-v0.82.6/vs2015/sdl/linux-host/lib --prefix=$HOME
  • make -j5
  • make install
こうしてみると、ビルドに関して困難な点はなにもないことに気づいた。ははは。

なお、動作についてはあまり試していない。キーボードは前の版まではUS配列固定だったのが日本語キーボード配列が存在するとそれを認識してくれるようではある。また、以前に述べた、 mame では動くが xnp2 や np2sdl2 では発生する不具合についてのみチェックすると mame 同様に動いたので Dosbox-X もすごいねえという感じ。とはいえまだまだ完成には遠い様子なので mame と同様がんばってほしい。国産マシンのエミュレータの命運はもはや英語圏の開発者が握っているのかもしれんと思うと、本邦のソフトウェア産業の末路と似た感じある。ないか。

ところで、このように四苦八苦しているあいだにさらに新しい版 DOSBox-X menu rewrite WIP BETA 2018-05-06 17:54 がリリースされていたようだ、とはいえ Windows 版のメニューに関する変更が主らしいのでエミュレーションの改善とかはないんだろうか。次の版を待つべきなのかもね

Dosbox-X 0.82.6 が(現時点)ビルドできない話

Dosbox-X 0.82.6 が出たのでビルドしようとしたらSDLのあたりでひっかかる。理由は Dosbox-X が SDL のソースコードにオリジナルにはない改善を加えているために、MacPorts の SDL1.2.15 (libsdl@1.2.15_3) のヘッダファイルをインクルードしていたのでは(おそらく)だめで、 Dosbox-X のソースコードについてきたSDLのソースコードが要るようだ、というところまでは理解した。ただし単純にそのヘッダファイルをインクルードしただけでは最後のところで失敗する。この理由は未定義のシンボル(識別子、変数とか関数)を参照しているというもので、参照されるべき関数 LinuxX11_KeySymName がコンパイルされていないようだ。参照されるべき関数 LinuxX11_KeySymName を含むソースファイル src/gui/sdlmain_linux.cpp 全体ではちゃんとコンパイルされているが定義されたシンボルを全く含まないのだそうで、つまり関数の定義部分がコンパイルを通ってないということか。はあ?という感じやな。

Dosbox-X をビルドする際の ./configure オプションでは SDL がインストールされた場所を指定できるものがあって、おそらくこの変更されたヘッダファイルを指定するにはそれを用いて Dosbox-X 内 SDL をビルドした後に指定すればいいのだろうか。

そこで別途自力でSDLをビルドしようとしたのだけど、これはこれで失敗した。どうも SDL-1.2.15 リリース以降に発見されたバグ があってそれが悪さをしている。1.2.16はまだ出てないので、すくなくともSDLをビルドするには1.2.15に手動でパッチ当てんとならんというところまでは理解した。

ということで、Dosbox-Xのビルドのためにまず付属のSDL-1.2.15にパッチを当てるところからやりましょうという話になりそうだ。とはいえ bugzilla への報告がまるまる5年前なので、それ以降のアップデートがないところを見ると今後も1.2.16がリリースされる期待はせんほうがいいのかしらね。

(※追記) ここで書いたことは嘘です。とりあえずビルドはできた。

2018年4月20日金曜日

PC-98のエミュレータにもなる Dosbox-X 0.82.5 が Mac でビルドできましたという話

PC-98のエミュレータでもある Dosbox-X 0.82.5 が OS X Mountain Lion (Mac OS X Version 10.8.5) 上でビルドでき、かつ動きました。その証拠がこちら:

1,2枚目はPC-98エミュレーションモードに入ったこと、3,4枚目は従来からDOSBoxの機能であるPC-DOSエミュレーションを示しています。 まあしかしDOSBoxの設定方法ともだいぶ違うようでPC-98の使いかたが全然わからん。 プロジェクトのウェブサイトはこちら、でソースコードはこちら DOSBox-X release 0.82.5 2018-04-18 23:51。 こちらのサイトでは Mac 用のバイナリも配布されていますが、おそらく Mountain Lion はサポート されておらず動きませんでした。そこで自前でビルドする必要があります。 ということで以下の通りにコンパイルできました。それでも大きな変更なく自前でビルドするだけでちゃんと動くのは大したもんだなあ。

ビルドにあたっては、配布されたソースコードの src/dos/drive_local.cpp の前処理部をじゃっかん書き足す必要がある。そのパッチを以下に示します:
--- drive_local.cpp.orig        2018-04-20 21:15:06.000000000 +0900
+++ drive_local.cpp     2018-04-20 22:04:48.000000000 +0900
@@ -31,6 +31,9 @@
 #include "inout.h"
 #ifndef WIN32
 #include <utime.h>
+# if defined(__APPLE__) || defined(__MACH__)
+# include <sys/syslimits.h>
+# endif
 #else
 #include <sys/utime.h>
 #include <sys/locking.h>
この変更がない場合, src/dos/drive_local.cppMAX_PATH が定義されていない、といってコンパイルが途中で止まる。 MAX_PATH は OS が受容できるパスの長さの最大値を示すのかもしれませんが、 Mountain Lion の場合、この値は /usr/include にある sys/syslimits.h で定義されたマクロ識別子 PATH_MAX が必要です。 上記の src/dos/drive_local.cpp では MAX_PATH の値が PATH_MAX の値だと定められていることによります。上記の変更前の状態では Windows (32bit版) でないかどうか、の条件分岐しかなく、 Windows でないがかつ Mountain Lion の場合にも utime.h を読みに行くのでしょう。しかしすくなくとも /usr/include にそんな定義は sys/syslimits.h にしかなかった。これはたぶん Linux だけが念頭にある話なんでしょうか。

※注記 なお、これはポーティングには違いないですがベストプラクティスとも思えないのでまあバッドノウハウの類なんじゃないでしょうか。ただし現時点でとくに不具合はありません。

そこで適用したコマンドは以下のとおり、ただしこれは上記パッチを当ててからの話:
$ ./autogen.sh
$ CFLAGS='-I/usr/include -I/opt/X11/include -I/opt/local/include'\
CPPFLAGS='-I/usr/include -I/opt/X11/include -I/opt/local/include'\
CC=gcc-mp-5 CXX=g++-mp-5 ./configure --disable-sdl2
$ make -j3
$ make install
フラグでヘッダファイルのインクルード先をやたら指定しているので要らないやつがあるかもしれんのですが、/usr/include は誰でも要るはずです。 ただし /opt/X11 は XQuartz だけが使用しておりもしかしたら要らんかもしれず(ここらへんはよくわかってない)、また /opt/local はMacPortsが使用しているために俺の環境ではやはり外せないわけですが、これを手で与えるのではなくて自動にできんものかしらね。 あとは、俺の環境では SDL2 が共存しているので SDL1.2 の使用を明示することが必要でした (現状ではSDL2はサポートしてないとかREADMEとかINSTALLのファイルに説明してあるので)。

とまあこのようにやると最初に掲げた画面が得られます。人によっては足りないライブラリがあると make に言われるかもしれません、俺の場合は xkbfile がないと言われたので、 MacPorts で xorg-libxkbfile をインストールしたら直ちに解決できました。