This file is written in UTF-8, new line is LF.

        クロスプラットフォーム X68000/X68030 エミュレータ
          XM6i version 0.36 (based on XM6 version 2.05)

            Copyright (C) 2006-2012 isaki, Y.Sugahara



● はじめに

  XM6i は、言わずとしれた ＰＩ．氏による名作 X68000 エミュレータ
  XM6 を私 isaki が適当に改造したり移植したりしたものです。

  もはや XM6 VM を利用した別物といったほうが近いです。


● XM6i の特徴など

  XM6i の特徴は大きく分けて2つあります。

  まず一つ目は XM6 の移植。XM6 は優れたエミュレーションで定評のある
  Windows 用のアプリケーションです。XM6 のもつ高い志はなるべく損なわずに
  他の環境でも広く動作させたいと思っています。(その実力があるかどうかは
  ともかく)。

  もう一つは好き勝手に改造すること。X68030 にもいくらか対応し、68030 MMU
  も実装することで NetBSD/x68k が動作するようになっています (というかこれ
  が目的です)。

  なお XM6i は、XM6 VM を利用し、XM6 を頭に冠した名前にしてはいますが、
  原作者であるＰＩ．氏とは直接関係はありませんので、XM6i について
  原作者に問い合わせたりはしないようにお願いします。


● ver 0.36 の主なトピック

  o LINK 命令の動作を修正。NetBSD6 の gcc が動作するように。
  o FDC 周りをいろいろ改善。NetBSD/x68k の fdc(4) が動作するように。
  o SCSI コマンド $35 (SynchronizeCache) をダミーで実装。
  o XM6i 独自拡張メモリの 128MB を越える部分の容量を変更。
  o その他いろいろ

  詳細は xm6i_changes.txt を参照してください。


● ver 0.35 から更新する際の注意点

  ver 0.36 では、XM6i 独自拡張メモリの 128MB を越える容量について、容量を
  それぞれ 16MB 少なくする互換性のない変更をしています。

  ver 0.35 以前で、XM6i 独自拡張メモリを 256MB 以上に設定している場合は、
  設定ダイアログを開くとデフォルトの容量 4MB に戻っています。この状態で
  「OK」を押すと 4MB に設定されます。
  ですので、XM6i 独自拡張メモリ 240MB (旧 256MB) 以上を使いたい場合は
  明示的に再設定してください。

  設定を一度も変更しなければ、以前の値のままで仮想マシンを起動することは
  出来ますが、きっと忘れた頃に(他の)設定を変えてハマるので、今変えておく
  ことをお勧めします。

  要するに一度設定ダイアログの「拡張メモリ」ページの設定内容を見直して
  「OK」を押したらいいと思います。


● 動作環境

  以下の環境で動作します。

    Windows
	Windows のことよく知らないんで、動作範囲や要件は知りません。
	Windows XP、Vista、7 で起動することは確認しています。
	DirectX とかはいらないと思います。
	キーボードは日本語キーボードしか考慮していません。

	同梱の mingwm10.dll を xm6i.exe と同じフォルダに置いといて
	ください。

	CPU については MMX 拡張および CMOV 命令をサポートしている
	必要があります。XM6 と同様です。以下 XM6 ver 2.05 付属文書
	より引用します。
	--------------------------------------------------------------
	Intel ...... PentiumII,Celeron以降  (P5, P54C, P55Cなどは不可)
	AMD ........ Athlon,Duron以降       (K6シリーズは不可)
	VIA ........ C3-Nehemiah or C7      (C3-Ezra以前は不可)
	Transmeta .. Crusoe,Efficeon        (全てOK)
	--------------------------------------------------------------

	イーサネットエミュレーションを使ってホストと通信するには
	OpenVPN をインストールして出来る TAP-Win32 デバイスが必要です。

    Mac OS X
	Core2 Duo 以降の Mac OS X 10.6 または 10.7 で動作します。

    NetBSD/i386
	NetBSD/i386 5.1 + pkgsrc-2011Q2 でビルドしていますので、
	共有ライブラリが解決できる環境なら動作すると思います。
	CPU については MMX 拡張および CMOV 命令をサポートしている
	必要があります。Windows 版と同様の制約です。


● インストール方法

  インストールは不要です。XM6i のアーカイブを適当なところに展開して
  実行してください。


● アンインストール方法

  展開したアーカイブ、自分が用意した ROM ファイル、自分が作成した仮想
  マシンフォルダなどを削除してください。

  ランチャ設定ファイルとしてプラットフォームごとに以下のパスにファイル
  を作成しますので、不要なら削除してください。

    Windows
	%UserProfile%\xm6i.ini です。
	%UserProfile% は Vista/7 では C:\Users\ユーザ名\、
	2000/XP だと C:\Documents and Settings\ユーザ名\ だと思います。

	なお、MinGW 環境下で実行すると MinGW の ~/xm6i.ini になります
	ので注意してください。

    Mac OS X
	$HOME/Library/Preferences/
	に、
	xm6i.plist
	xm6i Preferences
	の2つのファイルが作成されます。

    UNIX
	~/.xm6i になります。

  なお、Windows のレジストリは一切使用していません。


● 起動方法

  XM6i.exe を起動すると、まずランチャが起動します。XM6i では設定ファイル
  を複数持てるためランチャを用意しています。仮想マシンの設定は主にこの
  ランチャ上で行います。

	+-----------------------------------------------+
	| 新規  編集  実行 | 終了                       |
	|                                               |
	| +--------------------+                        |
	| | 仮想マシン一覧     |                        |
	| |                    |                        |
	| |                    |                        |
	| +--------------------+                        |
	+-----------------------------------------------+

    新規
	仮想マシンを新規に作成します。

	新規 VM 作成ダイアログが出ますので以下の値を指定します。
	「VM 名称」は仮想マシンの名称で、ランチャ上で仮想マシン同士を
	区別するためのものです。
	「VM フォルダ」は仮想マシンを置くフォルダパスです。
	XM6i ver 0.30 以上では 1フォルダにつき 1つの仮想マシンの構成を
	推奨します。フォルダはなければ作成します。
	「VM 設定」は仮想マシン設定ファイルのパスです。拡張子は .xmx
	を推奨します。
	「OK」ボタンを押すと仮想マシン設定ファイルがデフォルト状態で
	作成されますので、適当に編集してください。
	VM 名称は仮想マシン一覧の欄にてポップアップメニューから変更
	することができます。

    設定
	選択中の仮想マシンを設定します。
	後述の「仮想マシンの設定」の項を参照してください。

    実行
	現在選択中の仮想マシンを起動します。

    終了
	XM6i を終了します。


● ディレクトリ構成

  ここでは XM6i (ver 0.30 以上) の仮想マシン等の設定ファイル、フォルダ
  の構成方法について記します。この通りでなければならないというわけでは
  ありませんので、参考にしてください。

  1) 仮想マシンを1つしか作らない場合

	XM6i.exe を展開したフォルダを仮想マシンフォルダにしてしまうと楽だと
	思います。ただし配布ファイルを展開した状態ではパス名にバージョンが
	含まれてしまうので、これは変更しておいたほうがよいと思います。

	展開したパスが /path/to/XM6i-x.xx である場合
	(Windows の場合 C:\path\to\XM6i-x.xx と読み替えてください)、
	フォルダ名を /path/to/XM6i/ のように変更します。

	必要な ROM ファイルを /path/to/XM6i/ に置き、ランチャの
	「VM フォルダ」にはこのフォルダ /path/to/XM6i/ を指定します。
	また設定ダイアログの「ROM イメージフォルダ」は空のままにします。
	こうすることで、実行ファイル、仮想マシン設定ファイル、ROM ファイル、
	SRAM ファイルなど (ランチャ設定ファイルを除く) すべてのファイルが
	このフォルダに集約できます。

	  + XM6i/
	    - xm6i.exe
	    - 仮想マシン設定ファイル (.xmx)
	    - ROM ファイル (*.DAT)
	    - SRAM.DAT

  2) 仮想マシンを複数作る場合

	XM6i.exe を展開したフォルダに、必要な ROM ファイルを置きます。
	ROM ファイルは名前によって区別されているため、機種の異なる仮想
	マシン同士でも ROM フォルダを共有することが出来ます。

	一方、仮想マシンファイルと SRAM ファイルは仮想マシンごとに持つ
	必要があります。そこで (どこでもよいのですが) ROM フォルダに
	個別の仮想マシンフォルダを作成することにします。以下のような
	感じです。
	この場合、各仮想マシンの「ROM イメージフォルダ」には ".."
	(自分の親フォルダ) を指定します。

	  + XM6i/
	    - xm6i.exe
	    - ROM ファイル (*.DAT)
	    + 仮想マシン1/
	      - 仮想マシン1設定ファイル (.xmx)
	      - SRAM.DAT
	    + 仮想マシン2/
	      - 仮想マシン2設定ファイル (.xmx)
	      - SRAM.DAT


● ROM ファイル

  XM6i を起動するためにはターゲットとなる X68000/X68030 の ROM ファイル
  が必要です。必要な ROM ファイルはエミュレーションする機種によって
  それぞれ異なります。

    EXPERT モード
      IPLROM.DAT    (131072 バイト) … X68000 の $FE0000..$FFFFFF
      CGROM.DAT     (131072 バイト) … X680x0 の $F00000..$FBFFFF

    SUPER モード
      IPLROM.DAT    (131072 バイト) … X68000 の $FE0000..$FFFFFF
      SCSIINROM.DAT (  8192 バイト) … X68000 SUPER の $FC0000..$FC1FFF
      CGROM.DAT     (131072 バイト) … X680x0 の $F00000..$FBFFFF

    X68030 モード
      IPLROM30.DAT  (131072 バイト) … X68030 の $FE0000..$FFFFFF
      ROM30.DAT     (131072 バイト) … X68030 の $FC0000..$FDFFFF
      CGROM.DAT     (131072 バイト) … X680x0 の $F00000..$FBFFFF

  IPLROM.DAT はバージョン 1.00 (87/05/07) が使用可能です。
  X68000 初代 (初期ロット 87/03/18 を除く)、ACE、PRO、EXPERT、SUPER の
  ものが使用できます。XM6 と同様です。

  X68030 モードでは ROM30.DAT  は無くても (その機能が使えないだけで)
  起動できます。ROM30.DAT が X68030 から取得したのものと異なると判断した
  場合は警告メッセージを表示します (将来の動作は未定です)。

  CGROM.DAT は、XM6 と同様、X680x0 から取得したものでないと判断した場合は
  警告メッセージを表示します。
  CGROM.DAT が見つからない場合は CGROM.TMP を使用します。CGROM.TMP について
  も CGROM.DAT と同様のチェックを行いますが、Windows 内蔵フォントなどから
  生成した CGROM ファイルを使う場合はファイル名を CGROM.TMP にして使うこと
  を推奨します。


● SRAM ファイル

  SRAM ファイルは SRAM の内容を保持するために使用します。仮想マシン設定
  ファイルと同じフォルダの SRAM.DAT という名前で自動的に作成されます。
  名前やパスの変更は出来ません。

  SRAM ファイルがなく自動的に作成した場合や、SRAM ファイルがあっても内容が
  破壊されている場合は (実機では SRAM 用の内蔵バッテリが切れて自力で交換
  した直後の状態に近いと言えるかも知れません)、IPL ROM の働きによって
  データが初期化されます。この初期化によって、本来、SRAM スイッチのメイン
  RAM サイズ ($ED0008.L) は 1MB (X68030 なら 4MB) に初期化されますが、
  設定ダイアログの「システム > メモリ > メモリスイッチを自動更新する」に
  チェックが入っている場合 (デフォルト) は XM6i の越権行為により
  「システム > メモリ > メイン RAM サイズ」で設定した容量が再設定されます。
  XM6 と同じ動作です。

  !注意!
  XM6i ver 0.21 以前には SRAM ファイルを読み取り専用で作成してしまう問題が
  あり、XM6i ver 0.22 以降は SRAM ファイルが書き込み出来ない状態ならエラー
  で XM6i が起動できないようになっています。
  お手数ですが XM6i ver 0.21 以前からアップグレードして使う場合には、SRAM
  ファイルの読み取り専用を外してからご使用ください。


● コマンドラインオプション

  xm6i.exe [-c <configfile>] [<floppy1> [<floppy2>]]

  本家 XM6 と同様にファイル名2つまでを引数にとりますが、今のところ
  フロッピーイメージのみ指定可能です。

  -c オプションで起動する仮想マシンを直接指定することも出来ます。
  これ以外にもオプションはありますが、デバッグ用とかです。

  起動後はカレントフォルダを仮想マシンフォルダに移して実行します。
  ただし引数に指定する <floppy1>、<floppy2> は起動直後フォルダ変更前に
  処理するため、プロセス起動時点のカレントフォルダからのパスで指定して
  ください。


● 仮想マシンの設定

  ランチャの設定ダイアログ、およびメニューの「オプション」ダイアログ (以下
  まとめて「設定ダイアログ」と呼びます) は、XM6 のオプション設定ダイアログ
  を一部踏襲しています。

  XM6 のオプション設定ダイアログと異なる部分だけ説明します。

    基本 > 仮想マシンの場所
	仮想マシンフォルダと設定ファイルのパスを表示しています。
	読みにくいとかいろいろ問題があることは分かっています。_o_

    基本 > 機種
	機種を選択します。EXPERT、SUPER、X68030 が選択できます。
	今のところ EXPERT と SUPER の違いは SCSI 内蔵かどうかであって
	正確ではありませんが、つっこまないでください。
	今のところ XM6 にある SCSI 外付は選択できません。

    基本 > ROM イメージフォルダ
	XM6i では ROM ファイルの存在するフォルダを指定することが
	できます。デフォルトは空 (設定ファイルと同じフォルダ) です。
	なお ROM イメージファイルのファイル名は機種などによって
	自動的に決定します。ここで選ぶのはフォルダだけです。 

	フォルダパスは、相対パスを入力するとこの仮想マシンフォルダからの
	相対パスになります。

    システム > MPU > MPU を 68EC030 から 68030 に換装
	機種が X68030 の場合に MPU を標準の 68EC030 から MMU 付きの
	68030 に換装します。NetBSD/x68k を動作させる場合はチェックを
	入れてください。Human68k で使用する場合は不要です。

    システム > 速度 > システムクロック
	システムクロック (というか MPU クロック) を 10.0MHz から 50.0MHz
	の範囲で 0.1MHz 単位で指定することが出来ます。
	68000/50MHz など現実的でない値を指定することも出来ますが、その
	場合の挙動については検証していませんし、するつもりもありません。
	現実的な組み合わせにおいて、実機と異なる点があれば報告頂けると
	助かります。

    システム > 速度 > MPUのみノーウェイト動作
	未実装です。

    ジョイスティック > キーボードによるエミュレーション
	キーボードの十字キー入力をジョイスティックポート1 からの入力
	にも見せかけます。将来どうなるかは保証しません。

    SASI、SxSI、SCSI
	ver 0.31 以降、XM6 とほぼ同等の UI を復元しています。
	このため ver 0.31 未満の XM6i にて、本来は編集できないはずの組み
	合わせや値を設定していた場合の動作は保証しませんので、設定ファイル
	を直接編集するなどしてなんとかしてください。_o_

    Nereid
	Nereid 拡張ボードについての設定です。

    Nereid > Nereid 拡張ボードを使用する
	チェックをすると Nereid 拡張ボードエミュレーションを使用します。
	ただし後述するようにとてもエミュレーションできているとは言い難い
	レベルですので、そこは理解した上で使用してください。

    Nereid > ボードの設定
	Nereid 拡張ボード上の DIP SW 5、6、8 の状態をエミュレーション
	できます。ロットによって何か違いがあればごめんなさい。

    Nereid > MACアドレス
	Nereid イーサネットデバイスの MAC アドレスを指定します。
	MAC アドレスは 12:34:56:78:9A:BC のようにコロン区切り16進数形式で
	指定してください。今のところエラー処理が緩く、入力文字列が MAC
	アドレスとして認識できない場合はデフォルト値の 02:00:00:11:22:33
	になります。

	MAC アドレスは衝突などが起きないように適切に設定してください。
	XM6i は指定された MAC アドレスの妥当性を判断しません。
	なお、MAC アドレスの第一オクテットの bit0、bit1 にはそれぞれ
	ユニキャスト/マルチキャスト、グローバル/ローカルの意味があります
	ので正しく設定してください。具体的にはユニキャストにしなければ
	ならず(bit0 = %0)、ローカルアドレスを使うほうがいいと思うので
	(bit1 = %1)、第一オクテットは $02 とかにしてくのがいいと思います。

    Nereid > ホストアダプタ
	Nereid イーサネットのホストアダプタを指定します。
	NetBSD 版では tap(4) デバイスを使用して、Windows 版では TAP-Win32
	デバイスを使用して、パケットの送受信が行えます。
	Mac OS X 版は未対応です。

    拡張メモリ
	拡張メモリのエミュレーションを行うか指定します。いずれも X68030
	モードでのみ使用できます。デフォルトは「使用しない」です。
	詳しくは後述の相違点の項目も参照してください。

    改造 > FC2 ピンをカットする
	MPU の FC2 ピンをカットする改造をエミュレーションします。
	主に NetBSD/x68k で X Window System を起動するために使用します。

    デバッガ
	XM6i デバッガに関する設定を行います。XM6i デバッガは開発途中の
	ものであり、使用は推奨しませんし、使用方法は解説しません。

  設定ダイアログは、仮想マシン実行中にメニュー「ツール > オプション」
  でも開くことが出来ます。ただし、仮想マシン実行中 (電源オフの時も含み
  ます) に行える変更は機器構成に影響を与えないものに限ります。ここは
  オリジナル XM6 とは動作思想が異なります。
  具体的には以下の項目のみ変更できます。

    マウス > 移動速度
    マウス > 左右ボタンを入れ替える
    ジョイスティック > キーボードによるエミュレーション
    Nereid > ホストアダプタ
    改造 > 電源 LED を青色タイプに交換する
    デバッガ > デバッガ(開発途中)を使用する
    デバッガ > EXG.L SP,SP 命令をブレークポイントにする

  これ以外の項目はランチャの設定ダイアログから変更してください。


● キーボード

  wxWidgets のキー入力機構によって動作します。おそらく日本語キーボード
  しか考慮できていないと思います。以下の特殊キーは直接入力できます。

	X68000 [HOME]       → ホスト [Home]
	X68000 [INS]        → ホスト [Insert]
	X68000 [DEL]        → ホスト [Delete]
	X68000 [ROLL DOWN]  → ホスト [Page Up]   ?
	X68000 [ROLL UP]    → ホスト [Page Down] ?
	X68000 [UNDO]       → ホスト [End]
	X68000 [CAPS]       → ホスト [Caps Lock]
	X68000 [CTRL]       → ホスト [Ctrl]
	X68000 [BREAK]      → ホスト [Pause]
	X68000 [OPT.1]      → ホスト [ALT]

  これ以外のキーはメニュー「ツール > ソフトウェアキーボード」で入力する
  ことが出来ます。


● マウス

  「ツール > マウスモード」あるいは F12 キーによりマウスモードになります。
  マウスモードでは、ホストのマウスカーソルは仮想マシンのマウスカーソルに
  なります。マウスモードから抜けるには F12 キーを押してください。
  XM6i がフォーカスから外れた場合も自動的にマウスモードから抜け出します。

  XM6 にある中ボタンでのマウスモードの切り替え、およびホイールによる
  アスペクト比の切り替えはまだ実装していません。


● ジョイスティック

  Mac OS X 版のみサポートしています。
  XM6i ではまだ ATARI 標準タイプのジョイスティックしかサポートしていません。


● SASI ハードディスク

  機種が EXPERT の場合、XM6 同様の SASI ハードディスクイメージファイルに
  よるエミュレーションを行います。以下のファイル形式をサポートしています。

  ・HDFファイル形式 (拡張子 .HDF)
	ファイルサイズは 10441728バイト、20748288バイト、41496576バイトの
	いずれかです。(それぞれ 10MB、20MB、40MB ドライブに対応)


● SCSI ハードディスク/光磁気ディスク/CD-ROM (SCSI 経由)

  機種が SUPER/X68030 で SCSI ROM ファイルがある場合、標準 SCSI インタ
  フェース経由での SCSI ディスクエミュレーションが行えます。
  なお、XM6i では、オリジナル XM6 でサポートしている外付 SCSI ボードの
  エミュレーションはサポートしていません。

  SCSI ハードディスクは以下のファイル形式をサポートしています。

  ・HDS ファイル形式 (拡張子 .HDS)
	ファイルサイズは 10MB 以上 2048MB 未満の範囲で、512バイト単位の
	任意のサイズです。

  光磁気(MO) ディスクは以下のファイル形式をサポートしています。

  ・MOS ファイル形式 (拡張子 .MOS)
	ファイルサイズは以下の4種類のいずれかです。
	  128MB タイプ (127398912 バイト)
	  230MB タイプ (228518400 バイト)
	  540MB タイプ (533248000 バイト)
	  640MB タイプ (635600896 バイト)

	128MB、230MB、540MB タイプは 512バイト/セクタ、640MB タイプは
	2048バイト/セクタになります。640MB タイプはセクタサイズが異なる
	ため、SUSIE などの対応ドライバを必要とします。

	読み込み専用属性のついたイメージファイルをマウントすると
	書き込み禁止 (Write Protected) として扱います。

  CD-ROM ディスクは以下のファイル形式をサポートしています。

  ・ISO ファイル形式 (拡張子 .ISO、ISO9660 ベタイメージ)
	モード1 (2048バイト/セクタ) で、データのみ格納されたファイルと
	RAW 形式で記録されたファイルの両方に対応しています。

  詳しくは XM6 の付属文書を参照してください。


● ネットワークの設定 (NetBSD版)

  NetBSD 版では Nereid イーサネットエミュレーションのホスト側に tap(4) を
  使用しており、ホストマシンやホストマシンを介してのネットワーク接続が可能
  です。ただし当然ですが多少のネットワークの知識は必要です。

  まず、カーネルに tap(4) デバイスのサポートが必要です。GENERIC カーネル
  であればサポートしています。

  次に root になって、tap インタフェースを作成します。

	# ifconfig tap0 create

  出来た tap0 インタフェースのホスト OS 側に IP アドレスを設定します。
  物理インタフェースやその他のインタフェースのアドレスやネットワーク空間
  と衝突しないように設定してください。ここで例えば、ホスト OS 側の IPv4
  アドレスを 10.0.0.1/8 にするには以下のように設定します。

	# ifconfig tap0 inet 10.0.0.1/8 up

  XM6i を root で実行する場合はこれだけで構いませんが (ただし一般的に
  root での実行はお勧めしません)、一般ユーザで実行する場合は /dev/tap0 を
  そのユーザから読み書き (rw-) 可能でオープンできるようにパーミッションを
  変更します。どのように変更すべきかは各自の環境によりますので適切に変更
  してください。このホストを自分でしか使っておらず設定方法が分からないと
  いう人は (そんな人は UNIX ホスト使ってないと思いますが…)、とりあえず

	# chmod 666 /dev/tap0

  とすればよいはずです。

  ホスト OS を介して外部のネットワークと通信を行うには、外部の物理インタ
  フェースと tap0 インタフェースとをブリッジにする必要があります。以下に
  外部インタフェースが wm0 の場合の設定例だけ書いておきます。詳しくは
  マニュアルなどを参照してください。

	# ifconfig bridge0 create
	# ifconfig bridge0 up
	# brconfig bridge0 add wm0 add tap0

  これでホスト側の準備完了です。

  続いて XM6i 側の設定です。設定ダイアログの「Nereid」ページを開き、
  「Nereid 拡張ボードを使用する」にチェックを入れてください。
  「ホストアダプタ」は「tap(4)を使用する」を選択し、「tapデバイス名」に
  先ほど設定したデバイス (この例では /dev/tap0) を指定してください。
  なおデフォルトが /dev/tap0 になっています。


● ネットワークの設定 (Windows版)

  Windows 版では Nereid イーサネットエミュレーションのホスト側に TAP-Win32
  を使用しており、ホストマシンやホストマシンを介してのネットワーク接続が
  可能です。ただし、サードパーティのデバイスをインストールが必要なことと、
  当然ですが多少のネットワークの知識は必要です。

  TAP-Win32 は Windows XP 以降で動作するネットワークデバイスドライバで、
  OpenVPN の中に含まれています。TAP-Win32 のインストールと設定については
  http://xm6i.org/ > ドキュメント > TAP-Win32 のインストールと設定方法、
  を参照してください。

  TAP-Win32 のインストールと設定が終わったら、続いて XM6i 側の設定です。
  設定ダイアログの「Nereid」ページを開き、「Nereid 拡張ボードを使用する」
  にチェックを入れてください。「ホストアダプタ」は「TAP-Win32を使用する」
  を選択し、「TAP-Win32デバイス名」に先ほど設定したデバイス (xm6i.org
  サイトの例では TAP01) を指定してください。


● メニュー

  ファイル
    ステートを開く              ステートファイルをロードします。
    ステートを名前を付けて保存  ステートファイルをセーブします。
    クイックロード              ステートを state1.x6s からロードします。
    クイックセーブ              ステートを state1.x6s にセーブします。
    リセット                    仮想マシンをリセットします。
    CTRL+OPT.1+DEL              CTRL + OPT.1 + DEL を仮想マシンに送ります。
    インタラプト                仮想マシンに NMI 割り込みをかけます。
    電源スイッチ                仮想マシンの電源スイッチを ON/OFF します。
    電源を切って終了            (未実装です)
    終了                        XM6i を終了します。

  FD0, FD1
    開く                        フロッピーの挿入に相当します。
    イジェクト                  フロッピーのイジェクトに相当します。
    書き込み保護                ライトプロテクトシールに相当します。
    強制イジェクト              イジェクト禁止の場合に強制イジェクトします。
    誤挿入                      誤挿入をシミュレーションします。

  MO ディスク
    開く                        MO ディスクイメージを設定します。
    イジェクト                  MO ディスクイメージを取り外します。
    書き込み保護                ライトプロテクトタブに相当します。
    強制イジェクト              イジェクト禁止の場合に強制イジェクトします。

  CD-ROM
    開く                        CD イメージを設定します。CD 挿入相当です。
    イジェクト                  CD のイジェクトに相当します。
    強制イジェクト              イジェクト禁止の場合に強制イジェクトします。

  表示
    システム                    システム情報を表示します。
    プロセッサ                  MPU まわりの情報を表示します。
    デバイス                    各種デバイスの情報を表示します。
    仮想ホスト                  仮想ホストの情報を表示します。
    アスペクト比にあわせて拡大  アスペクト比が X68000 と同一になるよう拡大
                                表示します。

  デバッグ                      デバッグモードです。

  ツール
    仮想マシン全体をノーウェイト動作
                                仮想マシン全体をフルスピードモードで実行
                                します。設定ダイアログの「仮想マシン全体
                                をノーウェイト動作」にチェックをしたのと
                                同じ状態です。
    マウスモード                マウスエミュレーションを行います。
    ソフトウェアキーボード      ソフトウェアキーボードウィンドウを表示します。
    Nereid バンクメモリをファイルに保存(仮)
                                Nereid バンクメモリの内容 16MB を指定した
                                ファイルに出力します。主に NetBSD/x68k 救済
                                目的です。将来については保証しません。
    オプション                  設定ダイアログを開きます。仮想マシン実行中
                                (電源オフ時も含みます) は機器構成の変更は
                                行えません。

  ヘルプ
    バージョン情報              XM6i のバージョン情報を表示します。
    ビルドオプション            XM6i のビルドオプションを表示します。


● 実機およびオリジナル XM6 との相違点について

  オリジナル XM6 と XM6i との相違点や、XM6i の実機との相違点について
  述べます。オリジナル XM6 のドキュメントも併せて参照してください。

  MPU (全般)
	オリジナル XM6 は MPU コアに Starscream を採用していましたが、
	XM6i では MUSASHI コアを採用しています。
	Starscream は IA32 フルアセンブラの 68000 (〜68020?) エミュレータ、
	MUSASHI は C 言語で書かれた 68000 〜 68EC040 エミュレータです。
	XM6i ではこのうち 68000、68EC030 (68030) のみをサポートしています。

	オリジナル XM6 の MPU コア Starscream が IA32 フルアセンブラなのに
	対し、MUSASHI は C言語 (XM6i 拡張部分では C++ も) で記述されている
	ため、Windows などの IA32 環境に限ればパフォーマンスでは当然
	勝てません。必然的に最低動作環境や快適に動作するためのホスト要件は
	XM6 のそれよりも上がることになります。どのくらいかは不明です。

	MPU クロックは 10.0MHz から 50.0MHz まで指定することができますが
	現実的でない指定についてはネタとして扱ってください。

  MPU (68030)
	68EC030 の命令はたぶんすべてサポートしていると思います。
	命令クロック数については未考察です (MUSASHI コアそのままでもなんか
	それなりの値になっているので)。
	命令キャッシュ/データキャッシュは未実装です。以下の ROM の項目も
	参照してください。
	例外フレームの内容は適当です。

	メモリに対するビットフィールド命令は、おそらく実機ではアライン
	メントを考慮した最適なアクセスを行うのではないかと想像し、その
	ように実装していますが、正しいかどうか分かりません。たぶん動作
	には影響ないはずです。

  68030 MMU
	68030 MMU をサポートしています。ここは独自実装です。
	透過変換(TT)を除いてたぶんすべてのアドレス変換機能が実装してあると
	思います。透過変換はその仕様上 X68030 では使い道がないので実装予定
	はありません。
	ロングディスクリプタ、リミット、間接ディスクリプタなどのマニアック
	機能も全て実装してあると思いますが面倒なので動作確認はしていません。

	ATC (アドレス変換キャッシュ) もたぶんすべて実装してあり、
	NetBSD/x68k で MMU をイネーブルにする前に PFLUSHA を実行していな
	かったバグも (わざと起こせば) 実機同様の動作をします。

	ATC の22個あるエントリの交換アルゴリズムは、68030 のマニュアルに
	よると擬似 LRU ですが、それ以上は記載はないため、XM6i では独自に
	最適化を施した擬似 LRU で実装しています。

  メインメモリ
	メインメモリの DRAM リフレッシュウェイトをエミュレーションして
	います。オリジナル XM6 はこのリフレッシュウェイト分を CPU クロック
	を一律に下げることでエミュレーションしていますが、XM6i では DRAM
	リフレッシュウェイトを独立してエミュレートしているため CPU クロック
	は XM6 より正確になると思います。
	DRAM リフレッシュウェイト成分の実測に使用したのは PRO-II ですので
	他の機種とは異なるかも知れません。XVI 以降の機種については未考察
	です。

  ROM
	ROM のアクセスウェイトも実装しています。

	ただし、X68030 の IPLROM 内でクロックスピードを測定する箇所について
	だけハックを入れてあります。これは、この測定ルーチンが 68030 命令
	キャッシュ ON の状態でクロックスピードを測定するため、実際には
	リードサイクルは発生しないのですが、XM6i の 68030 CPU はキャッシュを
	実装していないため、そのままだとアクセスウェイトが入ってしまい、
	期待通りのクロックスピードが求まらないためです。
	それ以外では必ず正規の 2 ウェイトが入ります。

  SRAM
	SRAM へのプログラムアクセスウェイトおよび書き込みウェイトも正しく
	実装しています。これにより SRAM 上でクロックスピードを測定する
	プログラムなども XM6 より正確な値を出すと思います。

  システムポート
	システムポート0 ($E8E001) のコントラスト値を変更した時にコントラスト
	がふわっと変化するあの見え方を擬似的に生成しています。
	実際に Human68k の電源オフ時はコントラストを ($E から) $0 に1回変更
	しているだけなので、XM6 でかくんと暗くなるのはそれはそれで正しい
	動作です。ふわっと暗くなるのは本体内のアナログ回路のようです。
	M.Kamada 氏の日記参照。
	  http://homepage2.nifty.com/m_kamada/di200608.htm#06

	システムポート7 ($E8E00D) に XM6 判定機能と同様の XM6i 判定機能を
	実装してあります。詳しくは後述します。

  ジョイスティックエミュレーション
	キーボードによるジョイスティックエミュレーション機能を実装して
	います。キーボードの十字キーでジョイスティック入力も発生させる
	ものです。ジョイスティックがなくてもオトコダマが遊べるための措置
	かも知れません…。
	メニュー「ツール > オプション」の「ジョイスティック」ページ、
	「キーボードによるエミュレーション」で ON/OFF の切り替えが出来ます。
	デフォルトは OFF です。

  FDC (uPD72065)
	NetBSD/x68k の fdc(4) ドライバが動作する程度に実装を追加しています。
	具体的には FDD からの READY 信号変化による割り込みと、それに伴う
	内部ステートの変化、SENSE INTERRUPT STATUS コマンドの受付条件の
	見直しなどなどです。

  フロッピーイメージ
	オリジナル XM6 がサポートしている形式に加えて、NetBSD/x68k 方面
	で使用される 2HC フォーマットもサポートしています。イメージサイズ
	が 1228800 バイトの場合、拡張子に関係なく 2HC として認識します。
	ファイルオープンダイアログは .2HC (.2hc) という拡張子を認識する
	ように対応していますので、特に問題がなければ .2HC という拡張子を
	使用することをお勧めします。

  SCSI (MB89352)
	MB89352 (SCSI プロトコルコントローラ) のエミュレーションを改善し、
	NetBSD/x68k カーネルの spc(4) が動作するようになっています。
	Human68k など IOCS コールを使用している分には影響はないと思います。
	NetBSD/x68k もブートローダは IOCS コールを使用しています。

	SCSI デバイスは各 SCSI ID の LUN = 0 として動作します。

	オリジナル XM6 で実装されていない内部の 8バイトキューは XM6i でも
	実装していません。従って、これを前提に動作しているものがあると
	動かないかも知れません。ただ NetBSD/x68k が動作する程度には
	誤魔化してあります。実装は容易ではないので問題が起きるまではあまり
	対応する予定はありません。

  Nereid
	同人サークル X-PowerStation 様による Nereid (イーサネット/USB/拡張
	メモリ/バンクメモリ複合ボード) を一部サポートしようとしています。
	ver 0.31 までは無条件で有効になっていましたが、ver 0.32 以降は設定
	ダイアログで使用するかどうか選択できるようになっており、デフォルト
	は「OFF」になっています。

	各デバイスのサポート状況は次の通りです。
	o イーサネット部分は後述。
	o バンクメモリはおそらく動作すると思いますが、タイミングは未考慮
	  です。DIP-SW 5(バンクメモリ容量)、DIP-SW 6(バンクメモリアドレス)、
	  DIP-SW 8(バンクメモリ有効/無効) の切り替えをエミュレーション
	  できます。
	o USB 部分 (SL811HS/T) はサポート予定はなく、仮想マシンに I/O も
	  実装されていません。
	o 制御ポートはおそらくエミュレーションできていると思います。
	つまり、Nereid の一部のポートが存在して一部のポートが存在しないと
	いう実機では考えにくい状況になっており、デバイスドライバの一部は
	誤動作する可能性があります。問題が起きる場合は OFF にして使って
	ください。

	メニューの「ツール > Nereid バンクメモリをファイルに保存(仮)」で
	バンクメモリ 16MB の内容をそのままファイルに保存することができます。
	NetBSD/x68k にて (現状フロッピーが動作しないので) 仮想マシンから
	データを取り出すのが目的です。それ以外の用途については考慮していま
	せん。NetBSD/x68k では bmd0 をスワップに使用せず、/dev/bmd0c に
	tar なり何なりを書き込んでおけばホストとの間でファイルの受け渡しが
	出来ます。この機能が将来に渡ってどうなるかは保証しません。

  Nereid イーサネット
	実機のコントローラは RTL8019AS ですが、まだ NE2000 相当として
	エミュレーションしています。そのうちなんとかしたいと思っています。
	Human68k の ether_ne.sys で MAC アドレスが表示できないなど、まだ
	かなり問題があるレベルであってあくまで人柱向け機能です。

	ホストと実際に通信できるのは NetBSD 版と Windows 版ですが、
	Mac OS X 版もイーサネットエミュレーションは機能します。
	ハブの先に誰もつながってないような感じに振る舞います。

  拡張メモリ
	X68030 モードでのみ拡張メモリエミュレーションをサポートしています。
	ただし、実在の構成、あるいは現実的な構成とはかけ離れたものもあり、
	それらについて特に Human68k での動作がどうなっても知りません。

	「TS-6BE16 互換モード」は TS-6BE16 の拡張メモリ 16MB を
	エミュレーションしているつもりです。エミュレーションしているのは
	あくまで拡張メモリの番地と容量だけです。実物についての知見に乏しい
	ため、誰か詳しい人がいたら教えてください…。

	「060turbo 互換モード」は 060turbo の 128MB までのローカルメモリの
	番地と容量だけをエミュレーションしているつもりです。こちらも
	エミュレーションしているのはローカルメモリの番地と容量だけであり、
	MPU が 68060 になるわけではありませんし、ローカルメモリの番地と容量
	以外の一切はエミュレーションしていません。このような構成は現実には
	存在しないはず(?)なので「非実在」と表記しています。

	「XM6i 独自モード」は、もはやエミュレーションでも何でもないですが
	68030 + メモリ 1GB という、夢の頂へ、です。

	なお、ver 0.35 まで XM6i 独自モードの容量は、256MB、512MB、768MB、
	1008MB でしたが、末尾をきりのいい番地に揃えるため、拡張メモリの
	容量自体は 240MB、496MB、752MB、1008MB に変更しました。この部分の
	後方互換についての配慮はありません。なお、128MB 以下の選択肢に
	ついては変更ありません。

  Pluto-X 仮想デバイス
	$EAC000〜$EADFFF に XM6i 独自の仮想デバイスがあります。とりあえず
	名前がないのもあれなので Pluto-X と名前を付けました。拡張ボードが
	ささってるようなイメージです。今のところ後述する SCSI IPL モドキで
	使用しています。既存実在の何かと名前やアドレスが干渉しているよう
	でしたら、すみません。

  X68030 について
	まだ NetBSD/x68k を動作させるために必要なところしか考察していません。
	また実装してあるのは拡張エリアセットといくつかのデバイスでのウェイト
	程度です。

  ソフトウェアキーボード
	XM6 と同様のソフトウェアキーボードウィンドウを実装してありますが、
	ステータスバーに表示される刻印はひらがなに変更してあります。

  表示メニューについて
	メニュー「表示」の中には XM6 のそれを変更拡張したものや、XM6i 独自
	のものがあります。

	表示 > プロセッサ > MPU レジスタ
		68030 に対応しています。そのため書式も一部変更しています。
		68000 モードでも 68030 と同じだけのレジスタセットが見えて
		いますが、そのうちなんとかするかも知れません。

	表示 > プロセッサ > 68030 ATC
		68030 MMU の ATC の内容を表示します。ATC の値は実機では
		窺い知ることは出来ませんので、エミュレータならではと言える
		かも知れません。ヒット率はその時その行にあるエントリの
		ヒット率ではなく、先頭から何番目のエントリの通算ヒット率と
		いうような意味です。
		ヒット率は起動時からの通算で、動作中にリセットする方法は
		今のところありません。

	表示 > プロセッサ > MUSASHI
		開発用です。

	表示 > プロセッサ > メモリ
		XM6 にあるものと近いものですが、インタフェースを若干変更して
		います。また、MPU レジスタによるアドレス選択、スタックに
		よるアドレス選択、メモリへの値の書き込みの各機能は、現状では
		あまり意味を持たないため未実装です。
		また現在のところメモリウィンドウは1つしか表示できません。
		今後の実装は検討中です。拡張メモリについても検討段階です。

	表示 > プロセッサ > メモリマップ
		XM6i では X680x0 の外部メモリ空間 ($000000 .. $FFFFFF) を
		内部で 8KB ごとに区切って処理しており、どのアドレスをどの
		内部デバイスが担当しているか表示します。反転は、ユーザ
		モードでアクセスできない空間 (スーパバイザ保護またはバス
		エラー空間) を示しています。

	表示 > プロセッサ > メモリアクセス
		XM6i の全メモリ空間(最大 1GB)について、アクセス状況を
		リアルタイムに表示します。1文字が 1MB に相当し、その 1MB
		の中のどこかが一度以上アクセスされたことを意味します。

		  . … アクセスなし
		  R … リードアクセス
		  W … ライトアクセス
		  D … リードおよびライトアクセス
		  I … 命令フェッチアクセス
		  A … 命令およびデータの両方のアクセス

		バンクメモリについては命令フェッチかどうかは表示されません
		ので、R/W/D のみです。

	表示 > デバイス > マウス
		仮想マシンのマウスのステータスを表示します。

	表示 > デバイス > レンダラ仮想デバイス
		仮想マシン内のレンダラ関連の情報を表示します。

	表示 > デバイス > エリアセット
		エリアセットおよび X68030 の拡張エリアセットレジスタの
		内容を表示します。

	表示 > デバイス > ROM
		使用中の各種 ROM 種別を表示します。
		IPLROM1 は $FF0000 .. $FFFFFF を示しています。
		IPLROM2 は $FE0000 .. $FEFFFF を示しています。

	表示 > デバイス > I/O コントローラ
		仮想マシンの I/O コントローラ (IOSC-2) のステータスを
		表示します。

	表示 > デバイス > Nereid イーサネット
		Nereid の RTL8019AS のステータスを表示します。

	表示 > デバイス > システムポート
		システムポートのステータスを表示します。
		ポートのナンバリングは X68030 のもので表記していますので、
		X68000 当時の資料とは異なると思います。

	表示 > 仮想ホスト > スケジューラ
		ホストスケジューラのステータスを表示します。
		オリジナル由来の「表示 > システム > スケジューラ」ウィンドウ
		にある Frame Rate は、ホスト側実装の違いにより XM6i では
		表示できません。こちらにある Frame Rate を参照してください。

	表示 > 仮想ホスト > ネットワーク
		ホストネットワークドライバのステータスを表示します。
		NetBSD 版、Windows 版でのみ意味を持ちます。


● ステートセーブ/ロードについて

  XM6i のステートセーブ/ロード機能は本家 XM6 のそれとは互換性がない
  独自のものです。拡張子は .x6s です。
  クイックセーブ/ロードはカレントディレクトリの state1.x6s という
  ファイルをアクセスします。
  おそらくまだちゃんと動いていません。


● XM6i SCSI IPL モドキ

  X68030 で SCSI HD から起動するには無償公開されていない ROM30.DAT を
  実機から吸い出して用意し、SRAM の起動アドレスを $FC00?? にする必要が
  あります。
  XM6i では ROM30.DAT の SCSI 起動機能に代わる独自の機能を組み込み、
  ROM30.DAT なしで SCSI HD からの起動を可能にしています [注]。
    注: ここで実現しているのは SCSI HD からの起動のみで、ROM デバッガ
    など本来の ROM30.DAT で提供される機能すべてについて補完するものでは
    ありません。
  イメージとしては外付 SCSI ボードをさしているような感じで、ただし
  内蔵 SCSI デバイスから起動するというものです。

  使用方法は、SRAM の起動方法を ROM に、ROM 起動アドレスを $EAC0?? に
  設定するだけです。??/4 の SCSI ID ですが、今のところ XM6i (XM6) では
  SCSI HD に対する SCSI ID の扱いが曖昧なため SCSI ID = 0 で使用する
  (起動アドレスを $EAC000 にする) ことをお勧めします。
  独自 ROM は VM 内部の越権行為により SCSI HD の IPL セクタを $2000
  番地にロードし、そこへ実行を移します。

  主に NetBSD/x68k 起動用ですので、それ以外の用途についての動作可否は
  知りません。
  またこれだけでは NetBSD/x68k カーネルが spc デバイスをプローブできない
  という別の問題はあります。


● XM6i バージョン判定方法

  仮想マシン内から XM6i を識別し、バージョンを取得することが出来ます。
  システムポート7 ($E8E00D) に $58('X') を書き込むと、同じポートから
  $36('6')、XM6 VM のメジャーバージョン、XM6 VM のマイナーバージョンが
  取得できます。続けて $ff が読み出せた場合はオリジナル XM6 であり、
  $69('i') が読み出せた場合には XM6i です。XM6i であれば更に続けて
  XM6i メジャーバージョン、XM6i マイナーバージョンを読み出すことが
  できます。以降の読み出しは $ff です。
  つまり例えば XM6i version 0.12 (based on XM6 version 2.05) であれば、
  $36, $02, $05, $69, $00, $0c の順で読み出せます。

  なお、この判定方法では本家 XM6 の判定方法に変更を加えることになります
  が、この点について原作者のＰＩ．氏には許可を頂いております。


● 不具合など

  まだまだ作りかけなので色々不具合があります。

  o ここに記載のない機能はおそらくサポートしていません。

  o ステータスバーには本家 XM6 とは異なり、デバッグ目的にパフォーマンス
    カウンタを表示しています。ある程度これの意味するところが分からない
    と使いものにならないレベルかも知れません。

  o 特に MMU が動いてる場合 (NetBSD/x68k を動作させている場合など) は
    かなりの CPU パワーが必要です。CoreDuo 2GHz 程度でなんとか遅れが
    蓄積し続けない程度には動作させることが出来ます。
    CPU パワーが足りず、処理が実時間より遅れ続けてしまうと、CPU に余裕が
    出来た途端に遅れを取り戻そうとして猛スピードで実行します。この状態
    では画面更新もままならずキー入力はリピートしがちになります。
    そっとしておきましょう。:-)

  o コンソールウィンドウが必ず開きます。そのうち本家と同じログウィンドウ
    を実装したいとは思っています。

  o キー割り当ては適当です。また変更することは出来ません。

  o ノーウェイト動作は安定していないと思います。

  o Mac OS X 版はメニューの挙動がおかしかったりします。

  o Mac OS X 版のコマンドキーによるショートカットは動かなかったりします。


● 著作権表示等

  XM6i 固有部分については isaki および Y.Sugahara に著作権があります。

  XM6i が使用している原作およびその他のコンポーネントの著作権については
  各著作物の主張に準じます。

	XM6
	Copyright (C) 2001-2006 ＰＩ．

	Starscream 680x0 emulation library
	by Neill Corlett (neill@neillcorlett.com)

	FM Sound Generator with OPM interface
	Copyright (C) by cisc 1998, 2003.

	MUSASHI Version 4.70 (2010-11-06)
	A portable Motorola M680x0 processor emulation engine.
	Copyright Karl Stenerud.

	Copyright (C) 2010-2012 GIMONS


● 配布等

  無断の転載および二次配布は禁止します。


● 連絡先

(EOF)
