NetBSD + pkgsrc で P6エミュレータ PC6001VX のエントリの続きです。
pkgsrc/emulators/PC6001VX
ブログに書くのをサボっていましたが、 OSC大阪の展示 のほぼ2週間前の 1月15日に pkgsrc のツリーにコミット しました。
tsutsui: : Import PC6001VX-2.30.0 as emulators/PC6001VX.
— Pkgsrc Changes (@PkgsrcChanges) 2017年1月15日
以前書いた PC6001VX.pro の修正についてはすでに 本家の github には取り込まれていて、次のリリースには入るはずです。 pkgsrc 的には現状の最新である 2.30.0 を使うので本家の最新版に追従する形のパッチを入れています。
OpenGL ハードウェアアクセラレーション問題
以前のエントリで「SIGSEGV問題」として挙げた「起動して少し時間が経つと core を吐いて落ちる」という問題ですが、一部訂正があります。
NOOPENGL
について改めて調べたところ、前項に書いたPC6001VX.pro
の X11 関連の定義の「linux以外」の部分で記載するところに「QT += x11extras
」を書き忘れていたのが原因ということがわかりました。
実はこれは間違いで、「ハードウェアアクセラレーションを有効にすると落ちるグラボ(というかXサーバードライバ)がある」のが正解のようです。
たまたまビルド時に NOOPENGL を定義したバイナリを動かすと設定ファイル上でハードウェアアクセラレーションが無効の設定で記録され、そのままの状態で NOOPENGL 有効のバイナリをインストールしてもたまたま動いていただけのようです。
とりあえず手元のマシンでは以下のような状態でした。
PC6001VX の Qt5 OpenGL HwAccel 問題。結果からいうと
— Izumi Tsutsui (@tsutsuii) 2017年1月23日
・RADEON HD5450 なマシンだとセグる
・Atom N455 (Pineview) のネットブックだと問題なし
・HD5450 マシンでも HwAccel=false だと動く
うーん。
NetBSD 的には DRMKMS 対応の Xサーバーはまだまだ発展途上ということでしょうか。
ハードウェアアクセラレーションを無効にするには起動後のメニューで設定すればよいのですが、ダメなときはメニューを開く間もなく落ちてしまうので、 ~/.pc6001vx/pc6001vx.ini の以下の行を編集して true → false に変更すればOKです。
hwAccel=true
起動
PC6001VX を起動すると初回起動時は自動で ~/.pc6001vx 以下の設定ファイルディレクトリ一式を作ってくれます。その場合 ROM が無いので警告メッセージが出るので一旦終了します。
実機を持っていてエミュレータを使うような人はすでにROMを吸い出しているでしょうからそれを ~/.pc6001vx/rom ディレクトリにコピーするだけです。
実機を持っていない場合は、 秋川さんの互換BASIC の BASICROM.60 と PC6001VX作者でもある eighttailsさん制作のフォント の CGROM.60 を上記 ~/.pc6001vx/rom ディレクトリにコピーすればOKです。
イース2 OPデモ on 互換BASIC
これも以前の記事で書いた話です。
ただし、 PC-6001用互換BASIC だとイース2オープニングは何かしらおかしいようです。エミュレータの問題ではないと思いますが、これもせっかくなので調べてみたいところです。
これについて、作者の秋川さんから直接連絡いただきました。
@tsutsuii 互換BASICではCMTリレーをON/OFFするROM内ルーチンに対応しておらず、それらを呼ぶ箇所で誤動作しているようです。
— 秋川藤志 (@akikawa134) 2017年1月4日
ROM 内ルーチン的には OPEN および CLOSE のルーチン内でリレーONおよびリレーOFFまでやってくれるようなのですが、TINY野郎さんの YS2OP 実装時は両方を重複して呼ぶ実装にしていたとのことです。
@tsutsuii @akikawa134 確認しましたが、確かに、YS2OPまではリレーのON/OFFを呼んでました。元々、テープストリーミングが可能かどうかなど、色々テストをしながら作ったので、その辺りの名残かと…すみません。1B49Hと1B4BHは呼ばなくていいです(^^;
— TINY野郎 (@tiny_yarou) 2017年1月6日
互換BASIC Ver.0.6 の中には RLON および RLOFF というリレーON/OFFを実行するエントリはすでに存在しているので、上記 1B49H および 1B4BH にこれら RLON および RLOFF への JR 相対ジャンプ命令を書いてやればイース2オープニングデモも動作します。
ちなみに OSC大阪でのセミナー時のイース2OPデモも互換BASICで動かしてました。
ローディング なう #osc17os pic.twitter.com/jzMrYnBSJg
— Izumi Tsutsui (@tsutsuii) 2017年1月28日
なお、イース2エンディングデモの方はテープロード時間と実行速度がリンクしているので、 OSC大阪展示のエントリ で書いたように PC6001VX のテープロード速度を遅くするパッチを当てる必要があります。さらに、 BASICローダーとデモ本体部分の3つのパートを別の P6ファイルにしておかないと最初のテープヘッダの「ピー」が鳴らないため時間がズレてしまい、これまたうまくいきません。
テープの P6 ファイルを実テープwav作成用の分割バージョンにしたら YS2ED デモも完走した。PC600V/VX だとテープを入れ替えずに複数回オープンした際に最初にしかピー音ヘッダを付けないのでそれで時間がズレるっぽい pic.twitter.com/up0kbwWz24
— Izumi Tsutsui (@tsutsuii) 2016年12月30日
NetBSD -current と pkgsrc PC6001VX
えびはらさんによると NetBSD の -current では PC6001VX がうまく動かないそうです。調べたいと思いつつ、現状手元には -current で pkgsrc もビルドできるようなマシンがないので確認できていません。手抜きでいません