NetBSD/x68k on XM6i ver 0.55 - クロスプラットフォーム X68000/X68030 エミュレータ

このページは 本家XM6iのページ とは関係なく参考用として作成されています。
誤り等々の指摘は <tsutsui@ceres.dti.ne.jp> または Twitter(@tsutsuii)宛でお願いします。

NetBSD/x68k 9.1 on XM6i ver 0.55 on NetBSD 9.1

余計な説明はいいからとにかく手っ取り早く動かしたい人向け手順まとめ (ver 0.55 対応版)

従来は Windows 上の設定も載せていましたが、昨今の状況を見て NetBSD 9.1 で動かすための説明しか検証していません。

必須バイナリ準備

XM6i ver 0.55

http://www.pastel-flower.jp/~isaki/XM6i/
各自の環境に合わせたターゲットバイナリをダウンロード。

IPL ROMバイナリ

http://www.retropc.net/x68000/software/sharp/x68bios/index.htm
X68030用の X68BIOS3.LZH を選んで許諾条件を読んで同意してダウンロード。

オプションバイナリ

Human68k version 3.02のシステムディスク

後述の XM6ユーティリティ を使った SCSIINROM.DAT (とそれを流用する ROM30.DAT) を生成する場合に必要(NetBSD/x68kを動かすだけなら不要)。
http://www.retropc.net/x68000/software/sharp/human302/index.htm
ディスクイメージ版 HUMN302I.LZH を選んで許諾条件を読んで同意してダウンロード。

SX-WINDOW ver3.1

HDDにHuman68kもインストールして遊ぶなら必要。
http://www.retropc.net/x68000/software/sharp/sxwindow/index.htm
SX-WINDOW ver3.1辞書ディスクのディスクイメージ版 SXWN315I.LZH を選んで許諾条件を読んで同意してダウンロード。

各種設定準備用バイナリ

LZH展開ツール

Windows だと .LZH なんて解凍できねーよ、という方は arcdec が手軽でおすすめ
http://www.ponsoftware.com/archiver/download.htm#arcdec
インストール不要で実行後自己解凍でできたバイナリアイコンにドラッグアンドドロップするだけ。
Windows10で LZHアーカイブからファイル取り出せるのかどうかは調べてません(手抜き)。

NetBSD環境で LZH を解凍したい場合は lhasa が利用可能。
NetBSD/i386 や NetBSD/amd64 9.x の場合はバイナリパッケージでもインストール可能:

# pkg_add http://cdn.netbsd.org/pub/pkgsrc/packages/NetBSD/`uname -p`/`uname -r`/All/lhasa
Mac OS X でも .LZH の解凍はデフォルトでサポートされている? (未確認)

XM6ユーティリティ

XM6iのベースであるXM6用に作られたCGROM作成等の各種ユーティリティ(Windows限定)。
http://yohkai.no-ip.info/x680x0/XM6.htm#download
の「xm6_206u.zipのダウンロード」から XM6ユーティリティ をダウンロード。
状況によってはダウンロードに失敗する場合があるようなのでその場合は何度かリトライ。

XM6ユーティリティ実行用DLL

上記のXM6ユーティリティを使用する場合に必要。
http://yohkai.no-ip.info/x680x0/XM6.htm#dll
の「mfc71dll.zipのダウンロード」から実行時に必要なランタイムDLLをダウンロード。
Windows 10 での動作は確認していません

各種バイナリ展開

XM6i本体

ここでは c:\Users\user (Windows) または /home/user (NetBSD) 直下に展開したとして説明。
NetBSD版の場合はだいたいわかってる人が多いと思うので適当に読み替えてください
そのまま取り出すと c:\Users\user\XM6i-0.55\ または /home/user/XM6i-0.55 になるはず。

IPLROM30.DAT

X68BIOS3.LZH から IPLROM30.DAT を取り出して c:\Users\user\XM6i-0.55\ または /home/user/XM6i-0.55 に置く(必須)。
NetBSD の lhasa の場合も旧来(?)の lha 同様のオプションで解凍できます。
lha x X68BIOS3.LZH
NetBSD上で lhasa を使って展開した場合、そのままだと小文字で解凍されるので
mv iplrom30.dat IPLROM30.DAT
のようにリネーム必要。
使用許諾等の日本語ファイル名もおかしくなるので、参照必要なら適当にワイルドカードを使ってリネーム要。
……と思ったら NetBSD/amd64 9.1 + pkgsrc-2020Q3 の lhasa だと日本語ファイル名がある場合 Segmentation fault する?

wxGTK30バイナリパッケージ

NetBSD版の場合は以下のようにして wxGTK30 のバイナリパッケージをインストール。正確には後述するように XM6i-0.55 のバージョンに合わせた NetBSD 7.x 用のバイナリも必要になるが、依存パッケージは必要なのでここで現バージョンのパッケージをインストールする。
# pkg_add http://cdn.netbsd.org/pub/pkgsrc/packages/NetBSD/`uname -p`/`uname -r`/All/wxGTK30
Windows版やMacOS版では不要。

HUMAN302.XDF (オプション)

HUMN302I.LZH から HUMAN302.XDF を取り出して c:\Users\user\XM6i-0.55\ または /home/user/XM6i-0.55 に置く(オプション)。

SXWIN315.XDF (オプション)

SXWN315I.LZH から SXWIN315.XDF を取り出して c:\Users\user\XM6i-0.55\ または /home/user/XM6i-0.55 に置く(オプション)。

XM6ユーティリティ

xm6_206u.zip から XM6Util.exe を取り出して c:\Users\user\XM6i-0.55\ に置く(Windowsのみ; オプション)。

XM6ユーティリティ実行用DLL

mfc71dll.zip から MFC71.dllmsvcr71.dll を取り出して c:\Users\user\XM6i-0.55\ に置く(XM6ユーティリティ使用時のみ)。

各種バイナリ生成

後述する XM6i の「内蔵CGROM.DATを使用」および「内蔵ROM30.DATを使用」の機能を使って NetBSD/x68k を動かす場合にはこの項の操作は不要。

コマンドプロンプト起動 (オプション)

コマンドラインから実行するコマンドもあるので、「スタート」⇒「プログラム」or「すべてのプログラム」⇒「アクセサリ」⇒「コマンドプロンプト」を起動して

C:\Users\tsutsui>cd \XM6i

のようにして c:\Users\user\XM6i-0.55\ に移動。

CGROM.TMP 生成 (オプション)

Windowsのみ可。XM6iの「常に内蔵CGROMを使用」の設定で NetBSD/x68kを起動する場合は不要。
XM6Util.exe を起動して
「CG-ROM(CGROM.TMP)を合成する」
を押して CGROM.TMP を生成。

CGROMの構造さえ理解していればX11等のビットマップデータから擬似的な CGROM.TMP を生成することは技術的には難しくないはず?

SCSIINROM.DAT 生成 (オプション)

Windowsのみ可。XM6iの「常に内蔵ROM30を使用 (NetBSD/x68k起動用)」の設定で NetBSD/x68kを起動する場合は不要。
HUMAN302.XDF が置かれていることを確認して XM6Util.exe を起動して
「内蔵SCSI-ROM(SCSIINROM.DAT)を合成する」
を押して SCSIINROM.DAT を生成。

NetBSD他の環境の場合には xm6i-mkscsirom を使用すれば HUMAN302.XDF から次項の ROM30.DAT と同等の内容のROMを生成可能。

ROM30.DAT (ダミー) 生成 (オプション)

XM6iの「常に内蔵ROM30を使用 (NetBSD/x68k起動用)」を使用してNetBSD/x68kを起動する場合は不要。
dd.exe をどこかから調達して SCSIINROM.DAT が置かれていることを確認して、コマンドプロンプト上で

C:\Users/user/XM6i-0.55>dd if=SCSIINROM.DAT of=ROM30.DAT bs=128k conv=sync

としてダミーの ROM30.DAT を生成。 (SCSIINROM.DAT の後ろをパディングして 128KB にしているだけ)

NetBSD用VMフォルダ作成

XM6iでは、ROMファイルのような各種設定で共通のファイルは共通のフォルダに置き、 HDDイメージやSRAMファイルのような各種設定で個別に使い分けるファイルは設定別のフォルダに置くような思想。 (詳しくは xm6i_readme.txt 参照)
上記に基づいて NetBSD用のフォルダを作成。ここでは c:\Users\user\XM6i-0.55\NetBSD\ または /home/user/XM6i-0.55/NetBSD/ とする。

NetBSD/x68k 9.0 インストールイメージ

「インストールなんてかったるいことやってられないから手っ取り早く NetBSDを動かしたい!」
という方は拙作の NetBSD/x68k 9.0 Live Image のイメージをダウンロードして xm6i の HDD イメージとして指定してください。

NetBSD/x68k 9.1 バイナリ取得

「NetBSD/x68k のインストールからやってみたい」という方向けにはこの項から順に説明。
NetBSD/x68k 9.1 ではインストーラの sysinst がいまだおかしいのですが、とりあえず追って記載するかも。

インストールCD ISOイメージ

http://cdn.NetBSD.org/pub/NetBSD/images/9.1/ の images ディレクトリ内の NetBSD-9.1-x68k.iso (約220MB) をダウンロードして c:\Users\user\XM6i-0.55\NetBSD\ または /home/user/XM6i-0.55/NetBSD/ に置く。

インストールフロッピーイメージ

http://cdn.NetBSD.org/pub/NetBSD/NetBSD-9.1/x68k/installation/floppy/ ディレクトリ内の sysinst1.fs (1200KB) と sysinst2.fs (1200KB) をダウンロードして c:\Users\user\XM6i-0.55\NetBSD\ または /home/user/XM6i-0.55/NetBSD/ に置く。

インストールフロッピーの拡張子名前変更

拡張子を .2HC としたほうがXM6iのメニュー選択時に楽なので、
sysinst1.fssysinst1.2hc
sysinst2.fssysinst2.2hc
に名前変更。

NetBSD 7.x 用バイナリの準備

XM6i-0.55 の NetBSD用バイナリは NetBSD 7.0 上で pkgsrc-2016Q2 のバイナリを使って作成されていますが NetBSD 8.0 以降では C++ の libstdc++.so の ABI が変更されているため、 NetBSD 7.0 の ABI でビルドされた XM6i のバイナリと NetBSD 8.0 以降で作成された wxGTK30 のパッケージバイナリを混在して使用することができないようです。 このため、 wxGTK30 については NetBSD 7.x 上でビルドされたバイナリを使用する必要があります。

NetBSD 7.x 用のバイナリも以下に存在しますが、この場合は依存する libffi のバイナリも合わせて必要です。

http://ftp.jp.netbsd.org/pub/pkgsrc/packages/NetBSD/i386/7.0_2016Q4/All/
http://ftp.jp.netbsd.org/pub/pkgsrc/packages/NetBSD/x86_64/7.0_2016Q4/All/
http://ftp.jp.netbsd.org/pub/pkgsrc/packages/NetBSD/earmv6hf/7.0_2015Q3/All/

ただし、上記の古い wxGTK-3.0.2 のバイナリの場合、 wxGTK側の問題 により XM6i の VM起動時にエラーメッセージウインドウが出て面倒という問題があります。 このため、ここでは自前でビルドした NetBSD 7.2用の pkgsrc-2020Q3 の wxGTK30 のパッケージを gtk2 option 有効でビルドしたバイナリを使用します(料理番組メソッド)。

また、 NetBSD 7.x 上でビルドしたバイナリパッケージは NetBSD 7.x のみに存在するライブラリバージョンに依存したものがあるため別途用意します。 (なぜか pkgsrc/emulators/compat70 のパッケージが存在しないという問題)

まとめると以下(ここが本題)
su
pkg_add -u http://cdn.netbsd.org/pub/pkgsrc/packages/NetBSD/`uname -p`/`uname -r`/All/wxGTK30
pkg_add -u http://cdn.netbsd.org/pub/pkgsrc/packages/NetBSD/`uname -p`/`uname -r`/All/lhasa
exit
ftp http://www.pastel-flower.jp/~isaki/XM6i/archive/XM6i-0.55-netbsd7.0-`uname -m`-2016Q2.tar.gz
tar -zxf XM6i-0.55-netbsd7.0-`uname -m`-2016Q2.tar.gz
cd ~/XM6i-0.55
ftp http://www.retropc.net/x68000/software/sharp/x68bios/X68BIOS3.LZH
lha x X68BIOS3.LZH
mv iplrom30.dat IPLROM30.DAT
ftp http://cdn.netbsd.org/pub/NetBSD/NetBSD-7.2/`uname -m`/binary/sets/base.tgz
ftp http://cdn.netbsd.org/pub/NetBSD/NetBSD-7.2/`uname -m`/binary/sets/xbase.tgz
ftp http://teokurebsd.org/netbsd/packages/`uname -p`/7.2_2020Q3/All/wxGTK30-3.0.5.1nb1.tgz
ftp http://teokurebsd.org/netbsd/packages/`uname -p`/7.2_2020Q3/All/fontconfig-2.13.1nb2.tgz
ftp http://teokurebsd.org/netbsd/packages/`uname -p`/7.2_2020Q3/All/freetype2-2.10.4.tgz
tar -zxf base.tgz ./usr/lib/libstdc++.so\*
tar -zxf xbase.tgz ./usr/X11R7/lib/libfreetype.so\*
mkdir lib
mv usr/lib/* lib
mv usr/X11R7/lib/* lib
tar -zxf wxGTK30-3.0.5.1nb1.tgz ./lib/\*.so\*
tar -zxf fontconfig-2.13.1nb2.tgz ./lib/\*.so\*
tar -zxf freetype2-2.10.4.tgz ./lib/\*.so\*
mkdir ~/XM6i-0.55/NetBSD
cd ~/XM6i-0.55/NetBSD
ftp http://cdn.netbsd.org/pub/NetBSD/images/9.1/NetBSD-9.1-x68k.iso
ftp http://cdn.netbsd.org/pub/NetBSD/NetBSD-9.1/x68k/installation/floppy/sysinst1.fs
ftp http://cdn.netbsd.org/pub/NetBSD/NetBSD-9.1/x68k/installation/floppy/sysinst2.fs
mv sysinst1.fs sysinst1.2hc
mv sysinst2.fs sysinst2.2hc
適当に環境変数を設定するだけの起動用スクリプトを作成
#! /bin/sh

XM6I_DIR=/home/user/XM6i-0.55

export FONTCONFIG_PATH=/etc/fonts
export LD_LIBRARY_PATH=$XM6I_DIR/lib
$XM6I_DIR/mame/xm6i "$@"

XM6i設定

XM6i 起動

Windows版の場合は XM6i.exe をダブルクリックして起動。
上記の起動用スクリプトから起動。

VM設定ファイル新規作成

メインウインドウ(Windowsの場合)とランチャーウインドウ(設定ファイル選択ウインドウ)が開くので「新規」を押す。
開いた「XM6i 新規VM作成」のウインドウで以下を設定。
OKを押すと「フォルダ C:\Users\user\XM6i-0.55\NetBSD はすでに存在します。」 と警告が出る がさっき作成したからなのでそのまま「はい(Y)」を押して設定ファイル選択ウインドウに戻る。

SCSIハードディスクイメージの作成

以下の手順でSCSIハードディスクイメージを作成

VM設定ファイル設定

作成した「NetBSD」をクリックして選択した状態で、ボタンの「設定」を押す。
開いた「XM6iの動作設定」のウインドウで以下を設定。記載のない項目はデフォルトのまま。

上記が設定できたらOKを押す。

XM6i.ini

VMファイルの置かれるフォルダなどXM6i自体の設定は Windows版では %HOME%、NetBSD/Linux版では $HOMExm6i.ini として置かれるので、XM6iインストールフォルダの名前変更などの場合はそちらを編集。

NetBSD/x68k 起動とインストール

VM起動

インストールフロッピー1枚目挿入

インストールフロッピー2枚目挿入

sysinst

HDD起動設定

NetBSD設定

Human68kインストール

エミュレータが起動さえすればベースのXM6と同じなので
http://www.mmyh.jp/wp/x68kindex/xm6setup3
あたりを参照。

XM6i上 NetBSD/x68k⇔ホスト間 ファイル交換

XM6iが Neptune-X をサポートしたので NetBSD/x68k では困ることは少なくなりましたが一応メモとして……

XM6iでの Neptune-X サポート

mtools 等によるDOSフォーマットディスクイメージ経由