Raspberry PiのRaspbian jessieでNP2kaiをセルフビルドしてみた、的なメモ

2年ぐらい前にふつうの Debian jessie で xnp2 作ってみた時とだいたい同じで、記述内容もおおむねコピペです。
ポイントだけ先に書いておくと、x11版をそのままconfigureしてmakeするとpthread関連のリンクエラーが出るので、なんらかの方法で対処する必要があります。

下準備

必要なツール

build-essential
いろいろコンパイルに必要(最初から入ってたっけ? 覚えてない…)
autoconf, automake, libtool
configure と Makefile 作成
nasm
x86 コードのアセンブルに使う(np2埋込のx86ソースを変更しない場合は不要かも?)
unzip
np2tool の展開に必要(意外と忘れる)。あとソースをgithubから(git cloneしないで)ダウンロードする場合はソース展開に使う

必要なライブラリ(の開発キット)

libgtk2.0-dev
gtk2 のライブラリ(かなり依存パッケージ多め)
libsdl2-mixer-dev
SDL_mixer のライブラリ。SDL2用。(ほんとは libsdl2-dev があれば必須ではない)
libsdl2-ttf-dev
SDL_ttf のライブラリ。SDL2用。(sdl2版をビルドしない場合はいらない。でもsdl2版np2を作っておくとすこしだけ便利なので…)
libusb-1.0.0-dev
libusb-1.0.0(説明は特にないです…)

場合によってはあったほうがいいもの

git
ソースを弄りたい場合はあったほうがいいんじゃないかな…

以上を sudo apt-get install でインストールします。

次にNP2Kaiの最新版ソースを取ってきます。githubのリポジトリからgit cloneしてもいいですが、今回は安直にzipをダウンロードしてみます。
ちなみに自分は、ここから先の作業は /tmp ディレクトリの下で行いました。少しでもSDカードへの書き込みを抑えたいので…(実際の効果はよくわかんない)

$ wget https://github.com/AZO234/NP2kai/archive/master.zip

そのままunzip master.zip すると、NP2kai-masterというディレクトリの下にソースが展開されます。

X11版のビルド

まず autogen.sh を実行して configure と Makefile を作ります。

$ cd NP2kai-master/x11
$ ./autogen.sh

autogen.sh 内でconfigureが実行され、いちおうMakefileもできているのですが、もうすこし設定したいことがあるので configure をかけ直します。
というより、そのままだとリンク時にpthread関連のライブラリのリンクに失敗するため、そのあたりの指定を追加する必要があります。とりあえずリンク時の追加ライブラリに-lpthread指定すれば問題ないようですが、gccに専用オプション(-pthread)があるらしいので念のため使ってみました。コンパイル時に-pthreadオプションを指定するとマルチスレッド関連の定義(-D_REENTRANT)が追加され、リンク時には-lpthreadが追加されるようです(他にも何かオプションが使いされてる可能性があるけど、よく知らない)。

$ CPPFLAGS="-pthread" LDFLAGS="-pthread" ./configure --enable-build-all --disable-dependency-tracking

configureの設定を変えたら念のため

$ make clean

まっさらにしてから make します。今回は --enable-build-all をつけているので通常のxnp2とIA-32版のxnp21の両方が作成されます。

$ make

うまくいったらインストールしてもいいかもしれません。(今回はconfigure時に--prefixオプションを指定していないので、デフォルトの/usr/localにインストールされます)

$ sudo make install

SDL2版のビルド

要は sdl2 ディレクトリに移動して、

$ make -f Makefile.unix

もしくは

$ make -f Makefile21.unix

するだけです。
他の環境向けのビルドを行っていた場合はあらかじめ make clean してオブジェクトファイルの混在を防いでおきましょう(意外と忘れる…自分だけなのか?)。

sdl2版は実行バイナリ(np2 もしくは np21)と同じディレクトリに設定ファイルを作成するため、/usr/localの下などに「インストール」してしまうと逆にめんどくさいです。素直に自分のホームディレクトリで運用しましょう。

SDL2版np2の使い道

X11版だけでなくSDL2版もなんとなく作ってしまいましたが、実のところX11版が動作する環境でSDL2版を使うメリットは(現時点では)ほとんどないです。設定できる項目が少なくディスク選択もやや面倒(SDL2版はファイル選択にキーボードが使えない)で新規ディスクイメージ作成も未サポートです。なんでビルドしたし…しかしSDL2版にはX11版にはない機能があります。それはTrueTypeフォントからのフォントデータ生成です。

たとえばFONT.ROMその他のフォントデータを持ってきていない状態のxnp2を素のRaspbian jessieで起動すると、

まあこんな感じでして…そこで、

  1. xnp2の作業ディレクトリ ~/.np2 にSDL2版の実行ファイルと適当なTrueTypeフォントをコピーする。フォントファイルは default.ttf という名前にリネームしておく
  2. フォントキャッシュ(font.tmp)が残っていたら消しておく
  3. SDL2版np2実行
  4. np2の画面上に日本語フォントがちゃんと表示されていることを確認したら、np2は終了してしまう(Alt+F4で終了できます)
  5. X11版のnp2を起動

フォントさえ用意できれば、ラズパイ内だけで作業が完結するのがいいところ(かなあ…?)。
見た目的にはWindowsのMSゴシック(msgothic.ttc)を使うのがいちばん無難だと思います。今回はKHドットフォントシリーズ小伝馬町16を使ってみました。そこはかとなくX68っぽい感じになります。

(そういやサウンド出力に関して、まったく確認してなかった…)

Windows 10 RS1 (Anniversary Update) でフロッピーディスクの PC-98 2HD フォーマットができなくなった件とその対策

USB 接続の3モードFDドライブの場合、format コマンドにオプション(2000 および Vista 以降では /F:1.23、XP の場合は /T:77 /N:8)を明示することで、いわゆる 2HD 形式でフロッピーディスクを初期化できるのですが…というか、できたのですが、Windows 10 の最近の更新で、どうも出来なくなったようです。

実のところ Windows におけるフロッピーディスクのサポートは21世紀初頭から縮小方向にあり、たとえばすでに Windows XP の時点で format コマンドが 2DD のフォーマットさえ公式にはサポートしなくなっていてPC-98 向けの 2HD は /T と /N オプションを使った裏技的な方法でフォーマットするしかありませんでした。しかし Vista では 2000 と同様に /F オプションでの容量指定が通るようになり(やっぱり文句が出たんですかね…?)、つい最近の Windows 10 TH2 まではこれが使えました。そして RS1で、どうやら 2HD フォーマット機能は format コマンドから完全に削除されたように思われます。どうして事前に言ってくれないのか…まあ今まで使えてたのが単なる「(undocumentedな)サービス」というだけだったのかもしれませんが…。

愚痴をいっても仕方ないので、何か対策を考えてみましょう…。

対策1:(仮想マシンで)すこし前の Windows を使う

よーするに古い Windows なら使えるんやから古い Windows 使えばええんやろ?(直球)という身もふたもないソリューションですが、USB パススルー機能のある仮想マシンを使って、ゲストOS側に USB-FDD を直接認識させます。

まあ「できるかどうか試したい」という程度の気分なので、安直に Edge の開発サイトにある仮想マシンを適当に見繕って、"IE8 on Win7"の VirtualBoxアプライアンスVirtualBox に入れてみました。
んでまあ、ホストに USB-FDD を接続して VirtualBoxVM を起動し、「デバイス」メニューの USB からそれっぽいデバイスを選んで VM にキャプチャさせます。

認識されたらふつうにフォーマット可能です。

ゲスト側の言語設定とキーボードドライバをいじらないと、キーボードレイアウトが英語モードのままなので戸惑う。まあ format だけなら気になるのはコロンぐらいなので特に問題ありません。ほんとに format するだけならね…。

対策2:すこし前の Windows のインストールメディアを使う

だいたい上と同じですが、まあぶっちゃけ USB-FDD が認識され、コマンドプロンプトが起動し、format コマンドが使える状態になってればええんやろ?ということに気づいたので、インストール時にコマンドプロンプト開けばいいんじゃね?ということです。
とりあえず手元に Windows 8.1 enterprize の x86 評価版 iso があったのでそれを使いました。(format に 64bit は必要ないかな…)

例によって VirtualBox に適当な VM を作成し(念のため未フォーマットの HD イメージも接続しましたが、必要ですかね…?)、iso イメージを突っ込んで起動。

コンピュータを修復する(R)を押して、「トラブルシューティング」→「詳細オプション」→「コマンド プロンプト」

で、画面にコマンドプロンプトが出たら、同じようにホストの USB-FDD をキャプチャします。ただしこの場合、ゲスト VM 側に認識されても通知メッセージは何も出ません。

まあ、実際に format して確かめればいいよね…(適当)

実ディスクでない iso イメージを使う限り、まともにインストールされた Windows 7 を最初から起動するよりはこちらのほうが早くコマンドプロンプトにたどりつくんじゃないでしょうか(RTA並感)。

対策3:まじめに(?)代替 format を作る

…あかん、ネタが長すぎた。
一応フォーマットプログラムを自作しました。2HD フォーマットに関しては、手持ちの USB-FDD3台(YE-DATA と TEAC)でのみ動作確認しています。また 2DD 系は 640K バイトも指定できますが、これはドライブ側が対応していない場合が多いです(手持ちの TEAC の USB ドライブは未対応でした)。

x86, x64 バイナリ:format2hd-wip-20160811-bin.zip
ソース:だいたい https://github.com/lpproj/mydosuty/tree/master/win/format2hd のあたり

ベリファイチェックを端折っているので本家の format よりは高速かもしれません。メリットはそれくらいでしょうか…

メディアが先か、ドライブが先か

どうでもいい近況から始めますが、最近またUSBのFDドライブを入手しました(3台目)。
いや3台もいらないんですが、なんかハードオフで108円だったから、つい…まあ読み書き時にエラーの出るディスクもドライブを替えるとうまく読み書きできることがあるので完全に無駄ではないんですが。
しかしジャンクとは言え、メディアよりもドライブのほうが入手が容易になる(≒安い)とは予想外でした。こういうリムーバブルメディアってだいたいまともなドライブが入手できなくなったあとでも対応メディアがずっと売ってたりするもんなんですけどね…(部屋の片隅にある、もはや読み出し手段のなくなったPDメディアを眺めながら)

FreeDOS(98) 方面の近況

(忘れそうなので先に書いておこう…最近のソースやら起動フロッピーイメージやらは以下の場所からどうぞ…)

http://bauxite.sakura.ne.jp/software/dos/freedos.htm
https://github.com/lpproj/fdkernel/releases

んで、最近、PC がらみ(の現実逃避)はこれぐらいしかやってないし…ということで前回からの進捗を書いてみようと思いましたが、要は

(純正 MS-DOS との)互換性向上

という一言になっちゃうんだよなあ…(というか、今後もそうなるだろう)。しいて言うと「WXP と ATOK が(たぶん)使えるようになった」というのが個人的には割と大きい。なにしろ「ATOK 動かない≒一太郎(ある意味 PC-98 で最もメジャーなビジネスソフト)使えない」だし。本当に長かったなあ、入れても死ななくなるまで、うん…。

…まあ、FreeDOSDOS 6 相当の互換 DOS なので、DOS5 登場以前の FEP(に限らず、ファイルアクセスを行うデバイスドライバや常駐プログラム)の動作は基本的におすすめできないってのはあるんですけどね。本家 MS-DOS には一応そのための KKCSAV.SYS というドライバがあるのですが、これは int 21h にフックかましてごそごそやる系のあやしい(←ひでえ)ドライバなので、必要ないときは常駐させないほうがいいと思う。

あ、そうだ、重要なことを言い忘れていた。NEC AI は動作しません。あと動作対応もしません。あれ IO.SYS 内部をちょっと書き換えて、内部処理をオーバライドするっぽいんですよね…まじめに MS-DOS の内部解析しないといけないけど縛り違反だから…

おまけ:せっかく無料なので、動作確認してみた(ほぼツイッター上での報告の焼き直し)

コープスパーティーエンターブレインのサイトからダウンロードできる exe は Windows 用の自己展開バイナリですが、ふつうに MS-DOS 版の LHA でも展開できます。そのまま corpse.bat を実行するだけ。特に問題ないと思われます。

Demon's Eye:なんか検索したら製作元より先に紹介(攻略?)ページっぽいところが出てきた。int DCh 経由の画面消去と 20 行表示のエスケープシーケンス対応が必要でした…

画像は Demon's Eye III。ハードディスクにアーカイブを展開して hd.bat の実行で起動。なお、そこそこ空きメモリが必要なので、たぶん XMS ドライバと DOS=HIGH の設定が必要かと思われます。

FreeDOS(98) unstable kernel 近況 (2015-09-16)

こっちのほうは2ヶ月くらい書いてないか…前回近況からの更新分をおおざっぱにまとめると

  • SCSI ハードディスク対応
  • コンソールのエスケープシーケンス対応いろいろ追加
  • adddrv/deldrv (adddev/deldev) サポート
  • 日本語 (DBCS) ファイル名サポート
  • ハードディスク簡易初期化ツール(btnpart)
  • その他バグ修正

とかそんな感じでしょうか…。
実は日本語ファイル名サポートは昔やろうとして(メンドくさくて)放棄したことがあったのですが、今やってみたらそれほど実装に困ることもなくそこそこ動くようになってしまった。うーん、昔に比べて自分のスキルが向上したとかそういうことはないはずなのに(むしろ昔よりいろいろ退化してるし)これは何なのか…。まあファイル名に日本語が使われている系のソフトがヘンな小細工なしでふつうにインストールして起動できるようになったので(すくなくとも PC-98 用の DOS としては)そこそこ使えるようになったと思いたい。

あとはハードディスク初期化ツールを適当に作ってみました。FD イメージにカーネルと一緒にぶち込んであるので、これで MS-DOS に依存せずに実機やエミュレータFreeDOS(98) をハードディスク(イメージ)にインストールできるはずです。

とまあ更新(改善)点はこんなもんですが、PC-98MS-DOS としての「互換度」に関してはまだまだ問題点が多いです。
一番の問題は FEP です。WX2, WX3系EPSONMS-DOS 付属の WXA や Windows9x 付属の DOS 版 MSIME 含む)以外の FEP はほぼ動作しません。無理に入れると操作不能もしくはシステムクラッシュするレベルなので入れないでください。ちなみに WXP もダメだよ…。最初コンソールドライバの実装の問題かと思ってましたがもうすこし根深いようです。せめて ATOK 系は使えるとよかったんですがね。いやー直せるんですかねこれ(白目)。