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

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

NetBSD/x68k 6.1.3 on XM6i ver 0.41

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

最新版の XM6iでも一部設定項目の増減を除きほぼそのままの手順でいけると思います……

必須バイナリ準備

XM6i ver 0.41

http://xm6i.org/download.html
各自の環境に合わせたターゲットバイナリをダウンロード。
NetBSD版およびMac版では設定は共通だけど各種ツールバイナリは同等品がないので必要なら自力で何とかする必要があり

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 XP環境なので .LZH なんて解凍できねーよ、という方は arcdec が手軽でおすすめ
http://www.ponsoftware.com/archiver/download.htm#arcdec
インストール不要で実行後自己解凍でできたバイナリアイコンにドラッグアンドドロップするだけ。
Windows7ではOS標準でLZHアーカイブからもファイル取り出せるので特にツールは不要。

NetBSD環境で LZH を解凍したい場合は lhasa が利用可能。 NetBSD/i386 や NetBSD/amd64 6.0 の場合はバイナリパッケージでもインストール可能:
# pkg_add http://ftp7.jp.netbsd.org/pub/pkgsrc/packages/NetBSD/`uname -p`/6.0/All/lhasa
往年(?)の UNIX版 LHA とオプションは同様:
% lha x X68BIOS3.LZH
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をダウンロード。

GNU utilities for Win32

NetBSD/x68k 6.0.1以前でインストールフロッピーイメージのサイズを切り上げるのに使用。
NetBSD/x68k 6.1以降では不要。
http://sourceforge.net/projects/unxutils/
の「download」から UnxUtils.zip をダウンロード。
ファイルサイズ切り上げに使う Windows版 dd(1) のみ使用。

dd for windows (オプション)

administrator権限がない環境で手動で任意サイズのイメージファイルを作成する場合に使用。
XM6i Ver 0.39以降はイメージ作成機能が復活したので不要。
http://www.chrysocome.net/ddの dd for windows にある http://www.chrysocome.net/downloads/dd-0.6beta3.zip をダウンロード。

GNU utilities の ddconv=sync をサポートするが /dev/zero の模擬機能がなく、
dd for windows のほうはその逆なので、やむなく似て非なる2つを使用。

各種バイナリ展開

XM6i本体

ここでは c:\ 直下に展開したとして説明。
NetBSD版/Liunx版の場合はだいたいわかってる人が多いと思うので適当に読み替えてください
そのまま取り出すと c:\XM6i-0.41\ になるが、そのままだとパスにバージョン番号が含まれていて XM6i本体バージョンアップ時に各種設定の修正が必要になるので c:\XM6i\ に名前変更。
バージョンアップでのインストールの場合はフォルダ内の各ファイルを上書きでコピーすればよいはず。

IPLROM30.DAT

X68BIOS3.LZH から IPLROM30.DAT を取り出して c:\XM6i\ に置く(必須)。
NetBSD上で lhasa を使って展開した場合、そのままだと小文字で解凍されるので
% mv iplrom30.dat IPLROM30.DAT
のようにリネーム必要。使用許諾等の日本語ファイル名もおかしくなるので、参照必要なら適当にワイルドカードを使ってリネーム要。

wxGTK28バイナリパッケージ

NetBSD版の場合は以下のようにして wxGTK28 のバイナリパッケージをインストール。
# pkg_add http://ftp7.jp.netbsd.org/pub/pkgsrc/packages/NetBSD/`uname -p`/6.0/All/wxGTK28
Windows版やMacOS版では不要。
Linux版はよくわかっていないので XM6iのマニュアルその他を読んでください……。

HUMAN302.XDF (オプション)

HUMN302I.LZH から HUMAN302.XDF を取り出して c:\XM6i\ に置く(オプション)。

SXWIN315.XDF (オプション)

SXWN315I.LZH から SXWIN315.XDF を取り出して c:\XM6i\ に置く(オプション)。

XM6ユーティリティ

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

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

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

dd.exe (GNU utilities)

UnxUtils.zip のzipアーカイブ中の usr/local/wbin 内にある dd.exe を取り出して c:\XM6i\ に置く(オプション)。

各種バイナリ生成

後述する XM6i の「NetBSD/x68k 起動支援モード」を使用して NetBSD/x68k を動かす場合にはこの項の操作は不要。

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

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

C:\Users\tsutsui>cd \XM6i

のようにして c:\XM6i\ に移動。

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

Windowsのみ可。XM6iの「NetBSD/x68k 起動支援モード」を使用してNetBSD/x68kを起動する場合は不要。
XM6Util.exe を起動して
「CG-ROM(CGROM.TMP)を合成する」
を押して CGROM.TMP を生成。

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

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

Windowsのみ可。XM6iの「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の「NetBSD/x68k 起動支援モード」を使用してNetBSD/x68kを起動する場合は不要。
dd.exeSCSIINROM.DAT が置かれていることを確認して、コマンドプロンプト上で

C:\XM6i>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:\XM6i\NetBSD\ とする。

NetBSD/x68k 6.1.3 バイナリ取得

以前のドキュメント作成時点の最新版であった NetBSD/x68k 5.1はいろいろ問題があったので 5.1_STABLE のスナップショットを用意してましたが NetBSD 6.0 や 6.1 では各種問題が解決されているほか NetBSD/x68k 自体も色々改善されてるので公式バイナリ推奨。

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

http://ftp7.jp.NetBSD.org/pub/NetBSD/iso/6.1.3/
iso ディレクトリ内の NetBSD-6.1.3-x68k.iso (約162MB) をダウンロードして c:\XM6i\NetBSD\ に置く。

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

http://ftp7.jp.NetBSD.org/pub/NetBSD/NetBSD-6.1.3/
x68k/installation/floppy/ ディレクトリ内の sysinst1.fs (1200KB) と sysinst2.fs (1200KB) をダウンロードして c:\XM6i\NetBSD\ に置く。
NetBSD/x68k 6.1 以降では 2枚目のフロッピーイメージも 1200KBにパディングされるように変更済み。

ダウンロード後、XM6iでオープンしやすいように拡張子を .fs から .2hc に変更。

NetBSD/x68k用 イメージ作成および調整

XM6i Ver 0.38以前では XM6i自体にディスクイメージ作成機能がなく、また NetBSD/x68k 6.0.1以前では 2枚目のインストールフロッピーイメージが 2HCのサイズである 1200KBにパディングされていなかったので事前にファイルの作成や調整が必要がでしたが、 XM6i Ver 0.41 と NetBSD/x68k 6.1 以降の場合は特に処理は不要。

dd での操作については NetBSD上でも参考になるかもしれないので以前の記述を残してます。

HDDイメージ作成

コマンドプロンプト上で fsutil コマンドを使ってHDDイメージを作成。
XM6i標準の拡張子は .HDS なのでここでは名前は sd0.hds とする。
XM6iの制約でイメージサイズ上限は2GBなので2GBで作成。
(XM6i Ver 0.39以降では 2GBを超えるイメージも使用可能です)
NetBSD/x68kインストールで Minimum install を選択すれば 512MBでも大丈夫かも。
KB/MB/GBなどの単位指定はできないのでその場合は電卓でサイズを計算。

C:\XM6i\NetBSD>fsutil file createnew sd0.hds 2147483648

fsutilの実行には administrator 権限が必要なので、難しい場合は dd for Windows を使用する。
dd-0.6beta3.zip のzipアーカイブ中の dd.exe を取り出して c:\XM6i\NetBSD\ に置く。
GNU Utilities のものと名前が同じなので注意。

C:\XM6i\NetBSD>dd if=/dev/zero of=sd0.hds bs=1 seek=2147483647 count=1

として作成。 bs=1 の分だけ seek=N の数字を -1 するのに注意。

MOイメージ作成

HDDイメージと同様にコマンドプロンプト上で fsutils コマンドを使ってMOイメージを作成。
XM6i標準の拡張子は .MOS なのでここでは名前は mo.mos とする。
XM6iの仕様でイメージサイズは実MOと同じにする必要がある。使えるサイズについては xm6i_readme.txt を参照。

C:\XM6i\NetBSD>fsutil file createnew mo.mos 228518400

dd for windows を使う場合は次の通り。

C:\XM6i\NetBSD>dd if=/dev/zero of=mo.mos bs=1 seek=228518399 count=1

sysinst1.fs 名前変更

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

sysinst2.fs 名前変更とサイズ調整

XM6iは2HCフロッピーイメージを使う場合にサイズが 1200KB の正規のサイズである必要があるので、 dd.exe を使って拡張子変更とあわせて sysinst2.fs のサイズを調整。
ここでの dd は GNU Utilities のもの(上記説明では C:\XM6i\ に置いたもの)なので注意。

C:\XM6i\NetBSD>..\dd if=sysinst2.fs of=sysinst2.2hc bs=1200k conv=sync

XM6i設定

XM6i 起動

Windows版の場合は XM6i.exe をダブルクリックして起動。
それ以外の場合は適当にインストール先のパスから起動。

VM設定ファイル新規作成

メインウインドウ(Windowsの場合)とランチャーウインドウ(設定ファイル選択ウインドウ)が開くので「新規」を押す。
開いた「XM6i 新規VM作成」のウインドウで以下を設定。
  • VM名称: NetBSD
  • VMフォルダパス: c:\XM6i\NetBSD
  • 設定ファイルパス: c:\XM6i\NetBSD\NetBSD.xmx ←VMフォルダパスを入れると自動でこうなるはず
OKを押すと「フォルダ C:\XM6i\NetBSD はすでに存在します。」と警告が出るがさっき作成したからなのでそのまま「はい(Y)」を押して設定ファイル選択ウインドウに戻る。

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

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

VM設定ファイル設定

作成した「NetBSD」をクリックして選択した状態で、ボタンの「設定」を押す。
開いた「XM6iの動作設定」のウインドウで以下を設定。記載のない項目はデフォルトのまま。
  • 基本
    • 仮想マシンの場所: 先ほど新規で作成した場所になっているはずなのでそのまま
    • 機種: X68030 を選択
    • ROMイメージフォルダ: c:\XM6i に設定(各仮想マシンで共有)
  • システム
    • MPU: 機種で X68030 を選択していれば 68(EC)030 の選択になっているので「MPU を 68EC030 から 68030 に換装」にチェック
    • 速度: システムクロック 25MHz (X68030) を選択
      「MPUのみノーウェイト動作」「仮想マシン全体をノーウェイト動作」はとりあえずチェックしない(後者は実行時切り替え可)
    • メモリ: メインRAMサイズ 12MB (フル実装) を選択して「メモリスイッチを自動更新する」にチェック
  • マウス
    • 接続ポート: よくわかってませんが Xを使うならとりあえず「本体」を選択
  • SCSI
    • ドライブ数: 深く考えず 7 に設定。数を変えると下のID表示の並びも変わるけれど深く気にしない。ドライブ数=7 の場合 ID=5 が MO、 ID=6 が CD-ROM になるが、どの割り当てもオリジナルのXM6仕様そのままとのこと。
    • MOドライブを優先する: 「俺は大事に取ってあるこのMOイメージから起動したいんだぜ」という場合以外はチェックしない
    • イメージファイルの選択: ID 0 の部分をダブルクリックすると「ファイルを開く」のダイアログが出るので上記で作成した c:\XM6i\NetBSD\sd0.hds を選択して「開く」
    • イメージファイル設定後は当該IDがこんな表示
    • 複数HDDイメージを使用する場合はそれぞれのID部分をダブルクリックして作成したイメージファイルを選択
    • 間違って不要なIDにイメージファイルを設定してしまった場合はID部分を右クリックして「リストから削除」を選択
  • ポート
    • RS-232C シリアルポートの設定。カーネルデバッグでシリアルコンソールを使いたい、ということでもない限りは使用しないのままでOK。
  • Nereid
    • Nereid拡張ボードを使用する: NetBSD/x68kではほぼ必須なのでチェック。
    • ボードの設定
      • バンクメモリを使用する: 特に不都合はないのでチェック
      • バンクメモリアドレス: 標準の $EE0000〜 を選択
      • バンクメモリ容量: あるだけ使うということで 16MB を選択
    • MACアドレス: DHCPサーバー等で設定しない限りはデフォルトのままでOK。別マシンを含め同一ネットワーク上で複数のXM6iを動かすときはそれぞれ重複しないように変更。
    • ホストドライバ: NetBSD/Linuxの場合は「tapを使用する」で、Windowsの場合は「TAP-Win32を使用する」を選択。
      • TAP-Win32については本家XM6iのページの説明を参照
        • 上記XM6iドキュメントにある通り Windows7では「ネットワークと共有センター」の左側の「アダプターの設定の変更」を選ばない限りTAPの表示が出てこないので注意
        • Windows7でのブリッジ設定については Windows 7でネットワーク ブリッジを設定する方法 の説明がおすすめ
        • ブリッジを設定する場合はTAPインターフェースに対するIPアドレスの設定は不要
      • NetBSD/Linuxでの tap設定については XM6i付属の xm6i_readme.txt の「ネットワークの設定」を参照
        • xm6i_readme.txt の説明のうち、tap設定が初めての場合は「(1)静的に設定しておく方法」のほうが無難?
        • 「(1)静的に設定しておく方法」の最後の方の「なおデフォルトが /dev/tap0 になっています」は 0.39以前の記述が残っていると思われる(0.41のデフォルトは空欄でその場合動的割り当てになる)ので、明示的に /dev/tap0 を入力する必要あり
        • 静的設定の場合は動的設定の時に使用する xm6i-ifup のスクリプトは削除しておく必要あり
        • 百聞は一見に如かず、ということで NetBSD/i386 6.1 での設定例の写真はこちら
        • 通信できない場合は XM6iのコンソールメッセージ出力中の tap の状態 を確認
  • 拡張メモリ
    • どどんと XM6i独自モードで1008MB確保したくなるところですが、今のところ NetBSD/x68k 的にはサポートされないのでとりあえず「非実在060turbo互換モード」で容量128MBにしておくのが吉。
  • 改造
    • 電源LEDを青色タイプに交換する: X68060仕様の本体は電源LEDが青色仕様だったそうなので適当に好みで設定。
    • FC2ピンをカットする: Xサーバを使うならチェック。FC2ピンって何だ、という点については実機でも必要な改造なので関連資料を参照。
  • 表示
    • 描画設定の「CRTフレーム表示」のチェックを外すと余白というかボーダー部分を除いた文字描画領域のみの表示になるので1024x600のネットブックなど画面の高さが足りない場合には有効
  • その他
    • フロッピーディスク高速モード: NetBSD/x68k的にはいろいろ問題が生じるようなのでとりあえずチェックしないままに
    • 電源スイッチOFFで起動: XM6iスタート後に自動でSCSI起動してしまう前にフロッピーを挿入したい、というような場合はチェック
    • NetBSD/x68k起動支援モードを有効にする: 非公開ROMの CGROM.DAT および ROM30.DAT なしで NetBSD/x68k を起動する場合はチェック

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

XM6i.ini

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

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

VM起動

  • 作成したVMの「NetBSD」を選択した状態で「実行」を押すとXM6iが起動
  • 「NetBSD/x68k起動支援モード」をチェックせず、オリジナルでない ROM30.DAT がある場合は
    「ROM30.DATの内容が正しくありません。続けますか?」
    のウインドウが出るので 「はい (Y)」
  • 同じくオリジナルでない CGROM.TMP を使用した場合は
    「CGROMの内容がX680x0と異なっています。続けますか?」
    のウインドウが出るので 「はい (Y)」
  • 初回起動時(一度もSRAMファイルを作成していない場合)のみ が出るので 「OK」

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

  • メニューの「FD0」⇒「開く」で sysinst1.2hc を選択して挿入するとそのまま読み込み開始してブートローダーが起動
  • よくわからん状態になったらメニューの「ファイル」⇒「リセット」でリトライ

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

  • 1枚目の読み込みが完了すると
    Please remove disk 1, insert disk 2, and press return...
    
    と出たら再度メニューの「FD0」⇒「開く」で sysinst2.2hc を選択
  • と言いつつ NetBSD/x68k 6.0以降では 2台目のドライブも自動で探しに行くので、 1枚目の読み込み中にメニューの「FD1」⇒「開く」で 2台目に sysinst2.2hc を選択して挿入しておけば 1枚目の読み込みが終了後に自動で 2枚目の読み込みが開始されます
  • メッセージと異なり、自動イジェクトかつ自動挿入検知なのでイジェクトもリターンも不要
  • 2枚目の読み込みが終わるとそのままインストールカーネルが起動してメッセージ表示後に sysinst が起動

sysinst

  • フルインストールが完了するまでには数時間程度待つ必要あり

HDD起動設定

  • sysinstインストール終了後、sysinst終了してshellプロンプト上で以下を実行して内蔵SCSI HDD(ID 0)起動の設定

    # memswitch -w boot.device=INSCSI0

    • "INSCSI" が内蔵SCSIからの起動指定、 "0" が SCSI ID の指定です
    • 標準(フロッピー→SCSIディスク)の起動設定にするには "STD" を指定します
    • "INSCSI0" 等を指定した後 SCSI ID間違い等で起動できなくなった場合はキーボードの ALT (またはソフトウェアキーボードで OPT1) を押しながらリセットすると "STD" 相当の フロッピー→HDD の起動になるので、そこでインストールフロッピーや Human68k のフロッピーから起動して SRAM設定を見なおして下さい
  • 「NetBSD/x68k起動支援モード」を使用せず、かつ正規の ROM30.DAT も使用せずに XM6i の Pluto-X によるHDDの起動を使用する場合は以下のように設定

    # memswitch -w boot.device=ROM; memswitch -w boot.romaddr=0xeac000

    詳細はXM6iマニュアル参照。
  • ちなみに XM6Util の SCSIINROM.DAT から作った ROM30.DAT だと NetBSD/x68k はHDD起動しないものの Human68k はHDD起動するっぽい?
  • xm6i-mkscsirom で作った ROM30.DAT では NetBSD/x68k も起動可能。Human68k もSCSI起動はできるっぽいが詳細動作は未確認。

NetBSD設定

  • NetBSD/x68k の 6.1.* 以前ではインストール直後は自動でマルチユーザーでは起動しないので /etc/rc.conf を編集する必要あり
  • 以下のようにファイルシステムをマウントして編集
    # mount -a
    # vi /etc/rc.conf
    
  • rc_configured=NO の行を rc_configured=YES に修正
  • その他のNetBSD一般の設定については NetBSDガイドの The first steps on NetBSD の章afterboot(8) の man (日本語訳) を参照

Human68kインストール

エミュレータが起動さえすればベースのXM6と同じなので
http://www.mmyh.jp/wp/x68kindex/xm6setup3
あたりを参照。
  • ただし NetBSD/x68k起動支援モードを無効にして、ダミーの CGROM.TMPROM30.DAT を用意する必要あり
  • VM設定はHuman68k用フォルダを作って個別HDDイメージファイルおよびSRAM設定を用意した方がいいかも?

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

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

XM6iでの Neptune-X サポート

  • NetBSD/x68kを動かす場合は tap の設定さえできていればゲストOS上は実機と同じく ifconfig(8)dhcpcd(8) でネットワークすればOK
  • Human68kで Neptune-X を使う場合はドライバをどう設定するか以前にどうやってドライバを Human68k上にインストールするかという鶏卵問題が……

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

  • XM6i上の NetBSD/x68k でフロッピーが使えなかった問題は XM6i Ver 0.36以降では修正されたので 1.2MB以下のファイルであればFDイメージ経由で mtools を使った転送が簡単?
  • それより大きいファイルもMOイメージでOK?
  • Human68kでフォーマットしたフロッピーをNetBSD上で mount_msdosfs(8) でマウントする場合は -G オプションが必要なので注意
  • NetBSD用の mtools のバイナリは pkgsrc にあり
    # pkg_add http://ftp7.jp.netbsd.org/pub/pkgsrc/packages/NetBSD/`uname -p`/6.0/All/mtools