GIMONS DEVELOPER WORKS/PhantomX

最終更新:2022/5/29

X68000 MPUアクセラレータ PhantomX
-Phantom of mc680x0 for X68000-
LOGO

告知

Version1.01をリリースしました。

最近の変更

Version1.00b->1.01

はじめに

PhantomXは簡潔にいえばX68000用のMPUアクセラレータです。他のアクセラレータと同様に本体のMC68000を取り外して代わりに取り付けて使用します。 サポートする機種はACE/EXPERT/PRO/SUPER/XVI(Compact除く)です(初代はMPUの実装位置の制約があるため対象外)。

PhantomXの実体はRaspberryPiとMC680x0のソフトウェアエミュレータです。専用のソフトウェアを導入したRaspberryPiをベースボードとリロケータを使用して取り付けます。RaspberryPiはZero/Zero WH/Zero2/2B/3A+/3B/3B+/4Bをサポートしています。

PhantomXはX68000専用に設計されました。X68000のハードウェア構造に最適化することで性能を向上させています。したがって他機種で使用できるような汎用的なアクセラレータではありません。

アクセラレータとしての速度はRaspberryPiの性能に依存します。
PHANTOMX XVI ACE


ハードウェア

リロケータ

X68000のMPUであるMC68000は出荷時からソケット化されており取り外しが可能です。ソケットはSDIP(シュリンクDIP)という1.778mmピッチのものです(最近ではあまり一般的なものではありません)。ソケットの位置はモデル毎に異なりますがACE/EXPERT/SUPER、XVI、PROの3種に大別されます。

リロケータの役割は二つあります。一つ目はSDIPを一般的な2.54mmピッチのDIPに変換すること。二つ目はモデル毎に異なるソケット位置を調整することです。一つのリロケータで全モデルのソケット位置変換に対応するように設計されています。
RELOCATOR1 RELOCATOR2

ベースボード

PhantomXのハードウェアで中心となるベースボードです。MC68000のDIP版と同一のピン配置を持つコネクタを持っています。これをリロケータに取り付けたものをMPUのソケットに接続します。

ベースボードのロゴの左右にある4つのワイドバスD-FFはRaspberryPiのGPIOとのレベル変換とバス信号の保持を行うためのロジックICです。RaspberryPiの限られたGPIOを切り替えながら処理を行います。

ベースボードの下4つはDialog SemiconductorのSLG46826Gです。これはGreenPAK Programmable Mixed-Signal Matrix In-System Programmabilityという製品の一種です。FPGAの簡易版とも言える優れたものでロジックICで構成すれば数十個必要な回路がこれ一つで構成できます。

4つのSLG46826Gにはそれぞれ独自に開発したファームウェアが書き込まれています。GP#1がバスシーケンス制御、GP#2がDMACとのバス調停、GP#3がバスシーケンス監視、GP#4がIPL信号線制御となります。

その他にGPIOコネクタ(20x2ハウジング)、SLG646826Gのファームウェアを書き換えるためのI2C用ジャンパ、MPUソケットのVCC(5V)をRaspberryPiに供給するためのジャンパが実装してあります。
BASEBOARD1 BASEBOARD2


ソフトウェア

機能構造

PhantomXのソフトウェア内の機能構成を次に示します。可能な限りレイヤ構成を取っておりRaspberryPiに依存する部分を分離するように設計しました。またベアメタルで動作するためRaspberryPi OSは必要ありません。
STRUCTURE

MC680X0エミュレーション

XM6で実績のあるStarScreamというMPUコアを参考に自作したコアを使用します。このMPUコアはC++で実装しておりコードネームは"Xero"です。MC68000,68030,68040,68060のエミュレーションが可能です(一部簡易実装含む)。元々はMC68030以降のキャッシュ機構を実装していましたが現在は削除しています。代わりに内部メモリハンドラ内に独自のキャッシュ機構を実装しました。

内部メモリハンドラ

XeroにはMC680X0の殆どの命令を実装しています。命令のフェッチやメモリの読み込み、書き込みが必要な場合は内部メモリハンドラを経由して処理を行います。外部メモリハンドラへのアクセスを極力削減するために独自のキャッシュ機構を持っています。キャッシュの容量はX68000の実装メモリと同じものだけ確保するようになっています。したがってキャッシュヒットし続ける限りはX68000のメインメモリにアクセスすることはありません。但し書き込み処理はライトスルーですのでメインメモリに書き込みを行います。

外部メモリハンドラ

X68000へのバスアクセスを経由するための中継層です。内部メモリハンドラからのリクエストをフックして前後処理を行います。最も重要な処理は独自キャッシュの整合性保証です。X68000にはDMACがあるためMPUが関与しない形でDMACがメインメモリに書き込みを行います。この時内部メモリハンドラ内のキャッシュ情報と不整合が発生します。一方でDMACへの動作指示はMPUが行いますから、DMACへの指示内容を監視することでキャッシュ不整合が発生する領域を予測できます。つまりDMACの動作直前で内部メモリハンドラ内のキャッシュを無効化することで不整合を回避します。その他にMPUエミュレーションが速すぎるために発生する各種不具合(オーバークロック時に発生する不具合と同等のもの)を軽減するための強制ウェイト挿入や、X68030に偽装するためのフェイクデバイスを実装しています。

GPIO制御

外部メモリハンドラ内で最終的にX68000へのバスアクセスが必要になった場合にはGPIO制御で処理を行います。実際のバスアクセス制御はベースボード上のSLG46826Gのファームウェアで行いますのでアドレスバスやデータバスの設定とバスアクセス完了後のステータスチェックとデータ取得だけを行います。

既知の問題


ファームウェア

先にも書いたとおり4つのSLG46826Gはそれぞれ大きく役割が与えられており、個別のファームウェアを書き込んであります。ファームウェアはGreenPAK Designerで開発しています。GreenPAK DesignerからファームウェをHEX形式でエクスポートしてSLG46826GのI2Cインターフェースを使って書き込みます。書き込みにはRaspberryPiを使用しています。書き込みに必要なアプリケーションも開発していますので厳重に手順を守れば後からファームウェアの更新も可能となっています。

GreenPak Designerで開発したバスアクセス制御
FIRMWARE


導入(ハードウェア)

ベースボードのジャンパ設定

ベースボードにはいくつかジャンパがあります。設定が必要なジャンパはMPUソケットのVCC(5V)をRaspberryPiの電源に供給するためのジャンパのみです。別途RaspberryPiに電源を供給する必要はありません(むしろ絶対に外部電源を接続しないでください)。X68000の電力不足等を理由にRaspberryPiに外部電源を供給せざるを得ない場合はこのジャンパを必ず外してください。


BASEBOARD JUMPER



X68000 PRO(PRO2)

横置きモデルのPROは最も導入が簡単なモデルです。ケースを外して支柱を外せばMPUソケットに直ぐにアクセスが可能です。MPUの外し方は詳しくは説明しませんがIC引き抜き工具を利用した方がよいでしょう(ドライバー等で徐々に引き抜くことは可能ですが不慮の事故が発生する可能性があります)。写真では既にMPUを外した状態です(下がフロント、上が拡張IOです)。バネ式のMPUソケットが取り付けてありますが横のコンデンサとの干渉を防ぐためMPUソケットの上に丸ピン用のソケットを載せて嵩上げしています。ソケット上のコンデンサが干渉する可能性がありますので横向きに付け替えるか、斜めに倒す必要があるかもしれません。


PRO SOCKET

リロケータはその他のモデルと共用しておりXVIに接続する時と方向が違います。写真の方向で重ね合わせるようにリロケータ、ベースボード、RaspberryPiを実装する必要があります。


PRO BOARD PRO BOARD2

MPUソケットに実装した状態です(メインボードへの電源コネクタがギリギリです)。


PRO INSTALL



X68000 ACE/EXPERT(EXPERT2)/SUPER

縦型モデルの10MHz機です。MPUのソケットにアクセスするためにはメインボードを取り外してシールドを除去する必要があります。またメインボードの左下の隅にソケットがあるためMPUの引き抜きもメインボードを外した状態で行う必要があるでしょう(IC引き抜き工具推奨)。写真はACEのメインボードで既にMPUを外した状態です。バネ式のMPUソケットが取り付けてありますが横のコンデンサとの干渉を防ぐためMPUソケットの上に丸ピン用のソケットを載せて嵩上げしています。


ACE SOCKET

リロケータはPROと同じ方向で重ね合わせてください。


ACE BOARD ACE BOARD2

MPUソケットに実装した状態です。ソケットがケースの下に重なっているうえ、PhantomXのコネクタが見えにくいので注意が必要です。上からペンライト等でピンの位置を確認しながら実装してください。


ACE INSTALL



X68000 XVI

縦型モデルの16MHz機です。MPUのソケットにアクセスするためにはメインボードを取り外してシールドを除去する必要があります。メインボードの中央よりの左下にソケットがあるためアクセスは比較的容易です。MPUの引き抜きは念のためメインボードを外した状態で行ってください(IC引き抜き工具推奨)。写真はメインボードのMPUを外した状態です。バネ式のMPUソケットが取り付けてありますが横のコンデンサとの干渉を防ぐためMPUソケットの上に丸ピン用のソケットを載せて嵩上げしています。


XVI SOCKET

リロケータとベースボード、RaspberryPiを次の方向で重ね合わせてください(PROやその他縦型モデルとは逆方向になります)。


XVI BOARD XVI BOARD2

MPUソケットに実装した状態です。ソケットの上端部分が見える位置にありますので目視でピンの位置合わせが可能です。


XVI INSTALL


導入(ソフトウェア)

SDカードの初期化

32GB以下のSDHCカードをPCに挿入しSDアソシエーションが提供している"SDメモリカードフォーマッター"で初期化してください。
SDメモリカードフォーマッターは容量が64GB以上のSDXCカードをFAT32にフォーマットできませんのでご注意ください。

SDXCカードを強制的にFAT32でフォーマットする方法(Raspberry Pi ImagerのOS削除等)もありますが推奨しておりません。

下の様にFAT32で全領域がフォーマットされれば成功です。
SDFORMAT SDCOMPLETE

SDカードが空の状態でPCから見えるか確認してください。

SDEMPTY


ソフトウェアのダウンロード

次のリンクからPhantomXのモジュールをダウンロードしてください。
VDISKドライバ(PXVDISK.SYS)とPhantomX制御コマンド(PXCTL.X)も中に入っています。

phantomx_101.zip

過去バージョン

phantomx_100b.zip

ソフトウェアの展開と転送

ダウンロードしたZipファイルを展開すると下記のファイルが入っているはずです。
RaspberryPiのファームウェア等が含まれているので初回は全て転送の必要があります。
config.txtに省電力用の設定がありますので必ず展開されたファイルのものを使用してください。

EXPANDFILES

全ファイルを初期化したSDカードにコピーします。

COPYFILES

SDカードをRaspberryPiに挿入して完了です。

ソフトウェアの更新

バージョンアップ時に更新が必要なモジュールは下記の通りです。
モジュール 説明
kernel.img PhantomX本体(Raspberry Pi Zero/W用)
kernel7.img PhantomX本体(Raspberry Pi Zero2/2B/3A+/3B/3B+/4B用)

その他ドライバやユーティリティの更新がある場合はdriverとvdiskbootフォルダも必要に応じて最新化してください。

設定方法

最初は何も設定せずにデフォルトで使用してください。以下の設定は応用編で詳しく解説します。

設定ファイル

"phantomx.ini"が設定ファイルです。ダウンロードしたモジュールには以下のように記述されています。

#EMUMODEL	000
#IPLROM		IPLROM.DAT
#CGROM		CGROM.DAT
#SCSIINROM	SCSIINROM.DAT
#SRAM		SRAM.DAT

1行で1設定の定義ファイルで"キー"と"値"のペアで設定します。"キー"と"値"の間は空白またはタブで区切ってください。また先頭に"#"を付けるとその行は無視されます。空白行があっても構いません。

上記の例では全て#でコメントアウトされていますので何も設定していない状態と同じになります。


設定項目

キー
EMUMODEL

エミュレーションするMPUを指定します。
指定できる値と意味は以下の通り。

000 : MC68000 *デフォルト
030 : MC68030(MMU、ハイメモリ)
040 : MC68040(MMU、内蔵FPU、ハイメモリ)
060 : MC68060(MMU、内蔵FPU、ハイメモリ)

EMUWAIT

エミュレーションに強制的にウェイトを入れるレベルを指定します。

0:ウェイト無し *デフォルト
1..7:数値が大きくなるにしたがって徐々にウェイトが増えます

HIMEM

030/040/060モードで有効となるハイメモリ(ローカルメモリ)のモードを指定します。

060turbo : 060turbo互換($10000000 ~ 128MB) *デフォルト
TS-6BE16 : TS-6BE16互換($01000000 ~ 16MB)

IPLROM

IPLROM($fe0000-$ffffff)のROMデータファイルのパスを指定します。

指定がなければX68000本体のIPLROMを使用します。
IPLROMを差し替える必要がある時に指定してください。

CGROM

CGROM($f00000-$fbffff)のROMデータファイルのパスを指定します。

指定がなければX68000本体のCGROMを使用します。
CGROMを差し替える必要がある時に指定してください。

SCSIINROM

内蔵SCSIROM($fc0000-$fc1fff)のROMデータファイルのパスを指定します。

指定がなければX68000本体の内蔵SCSIROMを使用します。
内蔵SCSIROMを差し替える必要がある時に指定してください。

SUPER/XVI以外の内蔵SCSIを持たないSASI機モデルで指定した場合は
偽の内蔵SCSI I/Fをエミュレーションします (何もSCSI機器が接続されていない様に見えます)。

SRAM

SRAM($ed0000-$edffff)のデータファイルのパスを指定します。

本体のSRAMは使用されなくなり同時に64KBに拡張されます。
指定されたファイルが存在しない場合には自動で作成されます。

SRAMに書き込みを行うとこのファイルも更新されますのでバッテリバックアップの代わりとしても利用可能です。

設定項目(エミュレーションするMPU種毎の設定)

以下の設定項目はEMUMODELに指定したMPU種別に応じて有効になります。
キー名の後ろにある"{000|030|040|060}"はEMUMODELに相当します。

キー
IPLROM{000|030|040|060}

EMUMODELに応じてIPLROM($fe0000-$ffffff)のROMデータファイルのパスを指定します。
指定がなければIPLROMの指定に従います。

CGROM{000|030|040|060}

EMUMODELに応じてCGROM($f00000-$fbffff)のROMデータファイルのパスを指定します。
指定がなければCGROMの指定に従います。

SCSIINROM{000|030|040|060}

EMUMODELに応じて内蔵SCSIROM($fc0000-$fc1fff)のROMデータファイルのパスを指定します。
指定がなければSCSIINROMの指定に従います。

SRAM{000|030|040|060}

EMUMODELに応じてSRAM($ed0000-$edffff)のデータファイルのパスを指定します。
指定がなければSRAMの指定に従います。

設定項目(バーチャルディスク)

専用ドライバで使用可能な不揮発性の仮想的なディスクの設定です。
最大で8個のディスクイメージを設定できます(最大容量4294966272バイト=4095MB)

ディスクイメージファイルは事前に用意する必要があります。
キー
VDISK{0|1|2|3|4|5|6|7}

不揮発性仮想ディスクのイメージデータファイルのパス。

参考までにWindowsのDOS窓から指定した容量のファイルを作成する例です。
128MBの空ファイルを作成する
fsutil file createnew VDISK0.DAT 134217728

VDISKを使用するにはダウンロードから得られるドライバが必要です。
例えばVDISK0とVDISK1を使用する場合はCONFIG.SYSに次を加えてください。
SYSディレクトリにドライバがある場合

DEVICE = \SYS\PXVDISK.SYS #0
DEVICE = \SYS\PXVDISK.SYS #1
DEVICE = \SYS\PXVDISK.SYS #2

phantomx.iniで設定していないIDに対しては常駐エラーになりますのでご注意ください。

また、TimerLEDをアクセスランプ代わりに使う"A"オプションが使えます。
DEVICE = \SYS\PXVDISK.SYS #0A

VDISK0	VDISK0.DAT
VDISK1	VDISK1.DAT
VDISK2	VDISK2.DAT
		

設定項目(特殊用途)

これは拙作のFDX68を活用するために個人的に用意したオプションです。
キー 説明
FDDSWAP

0:内蔵FDD(0,1)と拡張FDD(2,3)をスワップしない
1:内蔵FDD(0,1)と拡張FDD(2,3)をスワップする

内蔵FDD0,1と拡張FDD2,3へのアクセスを相互変換します。


拡張デバイス

外部メモリハンドラ内で独自のIOアドレスに対してPhantomX独自の拡張デバイスが存在します。

IOアドレス仕様

PhantomXやRaspberryPiの情報取得や動作設定を行うためのレジスタです。
アドレス サイズ 項目 リード ライト 内容
$EA8000 w レジスタポート 現在のレジスタ番号 設定するレジスタ番号 データポートから読み/書きするレジスタの指定です。

0x0000:バージョン番号
0x0001:エミュレーション中のMPU
0x0002:ウェイトレベル
0x0010:仮想ディスクID
0x00f0:RaspberryPiのSOC温度

$EA8002 w データポート 現在のデータ値 設定するデータ値 レジスタポートで指定したレジスタのデータを読み/書きします。

但しレジスタ番号が0x0000(バージョン番号)および
0x00f0(RaspberryPiのSOC温度)の場合は書き込みが無視されます。

レジスタ番号が0x0001(エミュレーション中のMPU)の場合、
0:MC68000,3:MC68030,4:MC68040,6:MC68060 となります。
リセットすると新たなMPU種で再開可能です。
設定ファイルは更新しません。

レジスタ番号が0x0002(ウェイトレベル)の場合、
1命令実行する度にウェイトを入れて実行速度を低下させます。
0で無効、1~7の7段階で数字が大きくなるほどウェイトが大きくなります。
この項目は設定ファイルに存在しません。

レジスタ番号が0x0010(仮想ディスクID)の場合、
0~7の指定となります。
設定ファイルに仮想ディスクを複数設定している場合に
ディスク選択することが可能です。

仮想ディスク

IOアドレス仕様

拡張デバイスのレジスタポートに0x0010(仮想ディスクID)を設定した後にデータポートで指定したIDの仮想ディスクに対する操作を行うIOポートです。
アドレス サイズ 項目 リード ライト 内容
$EA8010 l ディスク容量 総セクタ数 不可 仮想ディスクの総セクタ数です。
セクターサイズは1024KB固定です。
$EA8014 l 現在セクタ番号 現在のセクタ番号 設定するセクタ番号 データを読み/書きするセクタ番号(0以上)
現在セクタ番号を設定した後に次のコマンドを設定してください。
$EA8019 b 操作コマンド 不可 操作コマンド 現在セクタ番号のデータをデータウィンドウに読み込むか、
データウィンドウのデータを現在セクタに書き込む。
0:読み込み、1:書き込み
$EA8400...$EA87FF b,w,l データウィンドウ セクタデータ セクタデータ 現在セクタから読み込んだデータ、もしくは
現在セクタに書き込むデータ。
$EA9000...$EA9FFF b,w,l ブートROM ROMデータ -

仮想ディスクから起動するためのブートROM。
ROMの先頭に8個の起動ハンドルが設定されています。
起動ハンドルはそれぞれID0から7までに対応しています。

SWITCH.Xでブートするドライブを指定できます。

ID0から起動:SWITCH.X BOOT=ROM$EA9000
ID1から起動:SWITCH.X BOOT=ROM$EA9004
ID2から起動:SWITCH.X BOOT=ROM$EA9008
ID3から起動:SWITCH.X BOOT=ROM$EA900C
ID4から起動:SWITCH.X BOOT=ROM$EA9010
ID5から起動:SWITCH.X BOOT=ROM$EA9014
ID6から起動:SWITCH.X BOOT=ROM$EA9018
ID7から起動:SWITCH.X BOOT=ROM$EA901C

フォーマット情報

イメージファイルはヘッダ無しのFAT16ファイルシステムそのものです (ディスクのBPBはイメージファイルのサイズからドライバが自動で算出します)。 以下に代表的なサイズのイメージファイルに対してフォーマット情報を記載します。

この情報をフリーソフトのDiskExplorerに設定することでWindows上から 仮想ディスク内のファイルにアクセスが可能になります。

項目 64MB
(67108864Byte)
128MB
(134217728byte)
256MB
(268435456byte)
512MB
(536870912byte)
1GB
(1073741824byte)
FAT種別 FAT16 FAT16 FAT16 FAT16 FAT16
FATの位置 0 0 0 0 0
FATの数 1 1 1 1 1
FATサイズ 131072 65536 65536 66560 66560
ルートの位置 131072 65536 65536 66560 66560
データ領域の位置 147456 81920 81920 82944 82944
クラスタサイズ 1024 4096 8192 16384 32768
総クラスタ数 65536 32768 32768 32768 32768

上記以外のサイズに関してはPXCTL.Xコマンドを使って設定された仮想ディスクのIDに他するフォーマット情報を出力できます。ID0に設定された仮想ディスクのフォーマット情報を出力する例。

PXCTL.X -V 0

使用方法

通常の通りX68000の電源を入れてください。MPUソケットに電源が供給されるとRaspberryPiも起動を開始します。

PhantomXのカーネルモジュールが起動を開始するまでに数秒かかる場合があります。

RaspberryPi 4B(新版)を使った時のSystem Informationです。040Turbo以上のスピードが出るようです。

RPI4

RaspberryPi Zero WHを使った時のSystem Informationです。X68000 XVI以上の性能が出るようです。

ZEROWH


応用編

新しいバージョンのIPLROMを使う

ACE/EXPERT/PRO/SUPERのIPLROMはXVIのIPLROMで拡張されたSRAM初期化(CLRキーを押しながらリセット)機能等が使用できないため不便です。そのような悩みも設定ファイルでXVIのIPLROMに差し替えれば解決です。

SDカードに差し替えるIPLROMのデータファイルを準備して設定ファイルに指定してください。

無償公開されたXVIのIPLROMを使用する例

IPLROM		IPLROMXV.DAT

これがACEでも使えると本当に助かります
SRAM_CLEAR

X68030の雰囲気を味わう

MC68030をエミュレーションさせて上位機種であるX68030に似た環境を再現できます。PhantomXはEMUMODELに030以上が指定された場合X68030で拡張されたいくつかのIOポートを内部的に偽のデバイスとして再現します。

X68030のIPLROMは無償公開されたもの(IPLROM30.DAT)が利用できます。

内蔵SCSIROMに相当するROM30.DATは無償公開されていませんのでご自身で用意する必要があります(内蔵SCSI用のROMで代替するなどいくつかやり方はあります)。

CGROMもX68030の物を使用しないとSX-Window等の12ドットフォントが表示されない場合があります。

下で説明するXEiJで生成できるROMを使用することもできます。

X68030のROMを利用する例

EMUMODEL	030
IPLROM		IPLROM30.DAT
CGROM		CGROM30.DAT
SCSIINROM	ROM30.DAT

MC68030モード
030_1

X68030だと認識されています(試験機はXVIです)
030_2

060turboの雰囲気を味わう

EMUMODELに040もしくは060が指定された場合はそれぞれMC68040、MC68060をエミュレーションします。この時X68030で拡張されたいくつかのIOポートを内部的に偽のデバイスとして再現します。

@kamadoxさんのXEiJで生成できるROMを使用する方法を書いておきます(ありがたや~)。

1.XEiJを起動して機種を060turboに変更します
XEIJ1

2.XEIJIPLROM30.DATを生成します
XEIJ2

3.XEIJROM30.DATを生成します
XEIJ3

4.XEIJIPLROM30.DATとXEIJROM30.DATをSDカードに保存します

5.phantomx.iniでROMファイルを指定します

EMUMODEL	060
IPLROM		XEIJIPLROM30.DAT
CGROM		CGROM30.DAT
SCSIINROM	XEIJROM30.DAT

XEiJのROMで起動したMC68060モード
060turbo_1

いつものマンデルブロ
060turbo_2


X68000からPhantomXを制御する

慣れてくるとphantomx.iniに複数の定義を書いてEMUMODELを動的に切り替えたり速すぎるのでウェイトを入れたいといった操作を行いたいと思います。

そのような場合はアーカイブで提供するPXCTL.Xコマンドをご利用下さい。

何もオプションを付けずに実行すると簡単なHELPが出てきます。

PhantomX Controller
Usage: PXCTL.X [-i] [-e EMUMODEL] [-w WAIT]
 -i print curent information and settings
 -e change emulation model, EMUMODEL is {0|3|4|6}
    0:MC68000 3:MC68030 4:MC68040 6:MC68060
 -w change emulation wait, WAIT is {0...7}
 -f swap fdd id 0/1 <-> 2/3, SWAP is {0|1}
    0:SWAP OFF 1:SWAP ON
 -v print virtual disk information, ID is {0...7}

見ての通りなのですが

-eはphantomx.iniで指定しているEMUMODELを一時的に切り替えますものです。
一度リセットしていただくとMPUコアの種別が変更されてブートします。

-wは一時的にウェイトを入れて速度を落とします
1にすると速度が大幅に落ち、その後2,3,4と増える度に徐々に遅くなります。

-fは内蔵FDD(0,1)と拡張FDD(2,3)のアクセスをスワップします。

-vは仮想ディスクのディスク情報を表示します。

-iは現在の設定情報を表示します。

仮想ディスクから起動する

仮想ディスクはSASIやSCSIのディスクと同様に起動が可能です。しかもSASIよりも大容量ですのでSCSIディスクと同様の運用が可能です。もはやSCSIディスクすら必要としません。

起動用のサンプルとして提供するSDカード内に"vdiskboot"フォルダを用意しました。このフォルダ内のphantomx.ini,SRAM.DAT,VDBOOT.DATをSDカード直下にコピーすれば、仮想ディスクから起動します。

サンプルのphantomx.iniは次のとおり記述されています。

EMUMODEL	000
SRAM		SRAM.DAT
VDISK0		VDBOOT.DAT

つまり仮想ディスクからの起動設定がなされたSRAMと仮想ディスクであるVDBOOT.DATを定義しています。

仮想ディスクのROMブート設定は"SWITCH.X BOOT=ROM$EA9000"で行いました。つまり仮想ディスクのID0から起動になります。

その他IDから起動する場合はアドレスを$EA9000 + ID x 4で指定してください。 例えばID2から起動するなら"SWITCH.X BOOT=ROM$EA9008"となります。

サンプルで提供する仮想ディスクのイメージは一般公開されているHUMAN302.XDFと同一になっています。追加で各種ドライバも保存しています。

起動可能な仮想ディスクイメージの作成方法は通常のディスクとほぼ変わりません。イメージファイルを作成しphantomx.iniに定義した後CONFIG.SYSにPXVDISK.SYSを組み込んで認識させます。

ドライブとして認識されればFORMAT ドライブ名で初期化した後、SYS ドライブ名でHUMAN.SYSを転送してください。その後必要なモジュールを複写してください。

仮想ディスクから起動した様子
VDISKBOOT


仮想ディスクイメージをWindows上で操作する

様々なエミュレータ用のディスクイメージをWindows上で操作することができるDiskExplorerを利用することで仮想ディスクイメージからファイルを取り出したり、書き込んだりすることができます。当然ながらDiskExplorerはPhantomXの仮想ディスクイメージを正式にはサポートしていませんのでマニュアル設定で認識させる必要があります。

DiskExplorerでイメージファイルを選択した後(ManualFD)を選択してください。

MANUALSELECT

次にプロファイルを手動設定します。仮想ディスクのフォーマット情報を参考に設定してください。代表的なサイズの情報は記載してありますのでサイズを合わせたイメージファイルで運用するとよいでしょう(スクリーンショットは1GBの例)。

MANUALSETTING

正しく認識されると次の様に仮想ディスク内のファイルが表示されます。

MANUALOPEN

リロケータとベースボードの頒布について

BOOTHのGIMONS DEVELOPPER WORKSで随時頒布を行っています(随時在庫追加しています)。

履歴

2022/5/29 Version1.01リリース

2022/5/22 Version1.01rc5リリース(人柱版)

2022/5/19 Version1.01rc4リリース(人柱版)

2022/5/16 Version1.01rc3リリース(人柱版)

2022/5/12 Version1.01rc2リリース(人柱版)

2022/5/8 Version1.01rcリリース(人柱版)

2022/4/18 Version1.00bリリース(バグ修正)

2022/4/17 Version1.00リリース



[EOF]