最終更新:2023/8/3
Version1.03cをリリースしました(2023/8/3)。 1.02b以降のモジュールはBoothのおまけファイルとして提供(転売対策のため)しますので、 ダウンロードはBOOTHの購入履歴からお願いします。
PhantomXはオーバークロックおよびXVIの16MHzモードでは動作しません。
MPUクロック、システムクロック含めて10MHz機は無改造でXVIは無改造かつ10MHzモードをご利用ください。
またRaspberryPi自体のオーバーおよびアンダークロックも推奨しません。
Version1.03b->1.03c
- 独自キャッシュのライトバックモードオプションの有効化(デフォルトはオフ)
- 独自キャッシュとDMACの不整合回避ロジックを強化(アレイチェイン、リンクアレイチェイン対応含む)
- 内部メモリハンドラのチューニング(スパーバイザー切替え時のファンクションコード生成等)
- エリアセット及び拡張エリアセットのロジックを内部メモリハンドラに統合
- POLYPHONのIOポートに強制ウェイトを追加 *試験実装
- その他小修正
Version1.03a->1.03b
- リセット処理前に本体が安定するまでのウェイトを追加(リセットボタン押下時の障害回避)
- IPLROM1.6のSASI判定に誤ったデータを返却する障害を修正(SASI機でSCSIINROMを設定した時)
- バス制御サイクル短縮化のウェイト調整(ウェイト調整パラメータ追加しデフォルトを10nsから15nsに変更) *試験実装
- その他小修正
Version1.02c->1.03a
- バス制御方式の改善によるサイクル短縮化(1サイクル相当のためメインメモリでは2割改善)
- ハイメモリの上限値を拡張(ラズパイの搭載メモリが1GB以上のモデル:最大768MB、512MBのモデル:最大384MB)
- ハイメモリを000モードでも設定可能に変更(制限解除)
- VDISKの非同期IOに対応(ラズパイがZeroを除くマルチコアのモデルの場合)
- VDISKのドライバの改良(非同期IO対応、IOサイズの拡張、チェックメディア結果のキャッシュ)
- OPMウェイト方式の変更
Version1.02b->1.02c
- SDカードドライバを新バージョンに変更
- プリフェッチバッファの自己書き変え対策を実装
- その他小修正
Version1.02->1.02b
- ハイメモリ(ローカルメモリ)のデフォルト設定をオフに変更
- ハイメモリ(ローカルメモリ)を16MB単位で設定できるように変更(最大384MB)
- 疑似内蔵SCSIのデグレ修正(NetBSD対応に伴う方式変更のデグレ修正)
- SCSI(内蔵、外付け)のウェイト変更
Version1.01->1.02
- メモリハンドラのリファクタリング(再実装に近い)
- 全モードで8ワードプリフェッチ方式に変更
- MMU関連のバグ修正(NetBSD/x68kの起動を確認)
- メインメモリ実装量の判定方式変更
- 060turbo互換のハイメモリ(ローカルメモリ)を増量して384MBに変更
- FC2ピンカット相当のオプション追加(NetBSD/x68k上のX Window起動を確認)
- MFP USARTへのウェイト追加(キーボードフリーズ対策)
- PhantomX存在チェック追加(PXVDISK.SYS/PXCTL.X)
- その他修正多数
Version1.00b->1.01
- FatFsのクラスタリンクテーブルを使用(高速シーク対応)
- 外部メモリハンドラのバグ修正(アドレス範囲の判定)
- VDISKアクセスパフォーマンスチューニング(ランダムアクセスの高速化)
- エミュレーションのウェイトレベルをより自然に増加するように変更
- ハイメモリ(ローカルメモリ)を060turbo互換とTS-6BE16互換から選択可
- 動作していなかったトレース割り込みを修正
- SASI機にSCSIINROMを設定した時にSASIポートを隠蔽
- OPMアクセスウェイトの実装方法変更
- 内部メモリハンドラのチューニング
- SCSI SELECT後のウェイト処理変更
- SCSI DREQのウェイト対象除外
- MIDI TSRレジスタのウェイト処理変更
PhantomXは簡潔にいえばX68000用のMPUアクセラレータです。他のアクセラレータと同様に本体のMC68000を交換して使用します。 X68000のハードウェア仕様に最適化して設計されたX68000専用のアクセラレータです。 MC68000を採用した他のレトロPCやゲーム機等でも使えるような汎用的なアクセラレータではありません。
サポートする機種はACE/EXPERT/PRO/SUPER/XVIです。 初代及びXVI Compactは物理的な制約により使用できません(無理やり使えるようにした猛者はいらっしゃいます)。
PhantomXの実体はRaspberryPi(Zero/Zero WH/Zero2/2B/3A+/3B/3B+/4Bをサポート)とMPUのソフトウェアエミュレータです。 RaspberryPiをX68000に接続するための専用のベースボードとリロケータを使用します。
アクセラレータとしての速度はRaspberryPiの性能に依存します。
![]()
![]()
![]()
リロケータ
X68000のMPUであるMC68000は出荷時からソケット化されており取り外しが可能です。 ソケットはSDIP(シュリンクDIP)という1.778mmピッチのものです(最近ではあまり一般的なものではありません)。 ソケットの位置はモデル毎に異なりますがACE/EXPERT/SUPER、XVI、PROの3種に大別されます。
リロケータの役割は二つあります。一つ目はSDIPを一般的な2.54mmピッチのDIPに変換すること。 二つ目はモデル毎に異なるソケット位置を調整することです。 一つのリロケータで全モデルのソケット位置変換に対応するように設計されています。
![]()
![]()
ベースボード
PhantomXのハードウェアで中心となるベースボードです。 MC68000のDIP版と同一のピン配置を持つコネクタを持っています。 これをリロケータに取り付けたものをMPUのソケットに接続します。
ベースボードのロゴの左右にある4つのワイドバスD-FFはRaspberryPiのGPIOとのレベル変換とバス信号の保持を行うためのロジックICです。 RaspberryPiの限られたGPIOを切り替えながら処理を行います。
ベースボードの下4つはルネサスエレクトロニクス株式会社のSLG46826Gです(Dialog Semiconductorはルネサスに吸収されました)。 これは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に供給するためのジャンパが実装してあります。
![]()
![]()
機能構造
PhantomXのソフトウェア内の機能構成を次に示します。 可能な限りレイヤ構成を取っておりRaspberryPiに依存する部分を分離するように設計しました。 またベアメタルで動作するためRaspberryPi OSは必要ありません。
![]()
MC680X0エミュレーション
XM6で実績のあるStarScreamというMPUコアを参考に自作したコアを使用します。 このMPUコアはC++で実装しておりコードネームは"Xero"です。 MC68000,68030,68040,68060のエミュレーションが可能です(一部簡易実装含む)。 元々はMC68030以降のキャッシュ機構を実装していましたが現在は削除しています。 代わりに内部メモリハンドラ内に独自のキャッシュ機構を実装しました。
内部メモリハンドラ
XeroにはMC680X0の殆どの命令を実装しています。 命令のフェッチやメモリの読み込み、書き込みが必要な場合は内部メモリハンドラを経由して処理を行います。 外部メモリハンドラへのアクセスを極力削減するために独自のキャッシュ機構を持っています。 キャッシュの容量はX68000の実装メモリと同じものだけ確保するようになっています。 したがってキャッシュヒットし続ける限りはX68000のメインメモリにアクセスすることはありません。 但し書き込み処理はライトスルーですのでメインメモリに書き込みを行います。
Version1.03cから試験的にライトバックモードをサポートしました。 ライトバックモードでは明示的にフラッシュしない限りメインメモリへの書き込みは行われません。外部メモリハンドラ
X68000へのバスアクセスを経由するための中継層です。 内部メモリハンドラからのリクエストをフックして前後処理を行います。 最も重要な処理は独自キャッシュの整合性保証です。 X68000にはDMACがあるためMPUが関与しない形でDMACがメインメモリに書き込みを行います。 この時内部メモリハンドラ内のキャッシュ情報と不整合が発生します。 一方でDMACへの動作指示はMPUが行いますから、 DMACへの指示内容を監視することでキャッシュ不整合が発生する領域を予測できます。 つまりDMACの動作直前で内部メモリハンドラ内のキャッシュを無効化することで不整合を回避します。 その他にMPUエミュレーションが速すぎるために発生する各種不具合(オーバークロック時に発生する不具合と同等のもの)を 軽減するための強制ウェイト挿入や、X68030に偽装するためのフェイクデバイスを実装しています。
Version1.03cで試験的に導入されたライトバックモードに対応するためキャッシュの無効化だけでなく、 一部の領域を動的にライトスルー化する等の不整合回避が強化されました。GPIO制御
外部メモリハンドラ内で最終的にX68000へのバスアクセスが必要になった場合にはGPIO制御で処理を行います。 実際のバスアクセス制御はベースボード上のSLG46826Gのファームウェアで行いますのでアドレスバスや データバスの設定とバスアクセス完了後のステータスチェックとデータ取得だけを行います。
既知の問題
- IO拡張ボードの浮動小数点演算プロセッサ(FPU)が動作しません
XVIの専用スロットに増設するものは動作します。原因不明です。- 厳密なチューニングが施されたアプリケーションはタイミングが合いません
S44PLAY/FMPPLAYでは音割れ等の不具合が発生します。- IOアクセスが主体のアプリケーションでは実機より遅くなります
ひたすらGRAMやTRAMを更新する場合にIOアクセス速度の制限が表面化するかもしれません(しないかもしれない)。
先にも書いたとおり4つのSLG46826Gはそれぞれ大きく役割が与えられており、個別のファームウェアを書き込んであります。 ファームウェアはGreenPAK Designerで開発しています。 GreenPAK DesignerからファームウェをHEX形式でエクスポートしてSLG46826GのI2Cインターフェースを使って書き込みます。 書き込みにはRaspberryPiを使用しています。 書き込みに必要なアプリケーションも開発していますので厳重に手順を守れば後からファームウェアの更新も可能となっています。
GreenPak Designerで開発したバスアクセス制御
![]()
ベースボードのジャンパ設定
ベースボードにはいくつかジャンパがあります。 設定が必要なジャンパはMPUソケットのVCC(5V)をRaspberryPiの電源に供給するためのジャンパのみです。 別途RaspberryPiに電源を供給する必要はありません(むしろ絶対に外部電源を接続しないでください)。 X68000の電力不足等を理由にRaspberryPiに外部電源を供給せざるを得ない場合はこのジャンパを必ず外してください。
![]()
X68000 PRO(PRO2)
横置きモデルのPROは最も導入が簡単なモデルです。 ケースを外して支柱を外せばMPUソケットに直ぐにアクセスが可能です。 MPUの外し方は詳しくは説明しませんがIC引き抜き工具を利用した方がよいでしょう (ドライバー等で徐々に引き抜くことは可能ですが不慮の事故が発生する可能性があります)。 写真では既にMPUを外した状態です(下がフロント、上が拡張IOです)。 バネ式のMPUソケットが取り付けてありますが横のコンデンサとの干渉を防ぐため MPUソケットの上に丸ピン用のソケットを載せて嵩上げしています。 ソケット上のコンデンサが干渉する可能性がありますので横向きに付け替えるか、斜めに倒す必要があるかもしれません。
![]()
リロケータはその他のモデルと共用しておりXVIに接続する時と方向が違います。 写真の方向で重ね合わせるようにリロケータ、ベースボード、RaspberryPiを実装する必要があります。
![]()
![]()
MPUソケットに実装した状態です(メインボードへの電源コネクタがギリギリです)。
![]()
X68000 ACE/EXPERT(EXPERT2)/SUPER
縦型モデルの10MHz機です。 MPUのソケットにアクセスするためにはメインボードを取り外してシールドを除去する必要があります。 またメインボードの左下の隅にソケットがあるためMPUの引き抜きもメインボードを外した状態で行う必要があるでしょう (IC引き抜き工具推奨)。 写真はACEのメインボードで既にMPUを外した状態です。バネ式のMPUソケットが取り付けてありますが 横のコンデンサとの干渉を防ぐためMPUソケットの上に丸ピン用のソケットを載せて嵩上げしています。
![]()
リロケータはPROと同じ方向で重ね合わせてください。
![]()
![]()
MPUソケットに実装した状態です。 ソケットがケースの下に重なっているうえ、PhantomXのコネクタが見えにくいので注意が必要です。 上からペンライト等でピンの位置を確認しながら実装してください。
![]()
X68000 XVI
MPUのソケットにアクセスするためにはメインボードを取り外してシールドを除去する必要があります。 メインボードの中央よりの左下にソケットがあるためアクセスは比較的容易です。 MPUの引き抜きは念のためメインボードを外した状態で行ってください(IC引き抜き工具推奨)。 写真はメインボードのMPUを外した状態です。バネ式のMPUソケットが取り付けてありますが 横のコンデンサとの干渉を防ぐためMPUソケットの上に丸ピン用のソケットを載せて嵩上げしています。
10MHzモードでご利用下さい、16MHzモードではバスアクセスに失敗してエラーが多発します。
![]()
リロケータとベースボード、RaspberryPiを次の方向で重ね合わせてください(PROやその他縦型モデルとは逆方向になります)。
![]()
![]()
MPUソケットに実装した状態です。ソケットの上端部分が見える位置にありますので目視でピンの位置合わせが可能です。
![]()
SDカードの初期化
32GB以下のSDHCカードをPCに挿入しSDアソシエーションが提供している"SDメモリカードフォーマッター"で初期化してください。
SDメモリカードフォーマッターは容量が64GB以上のSDXCカードをFAT32にフォーマットできませんのでご注意ください。SDXCカードを強制的にFAT32でフォーマットする方法(Raspberry Pi ImagerのOS削除等)もありますが推奨しておりません。
下の様にFAT32で全領域がフォーマットされれば成功です。
![]()
![]()
SDカードが空の状態でPCから見えるか確認してください。
![]()
ソフトウェアのダウンロード
暫くの間はBoothのおまけファイルから提供しています(商品購入履歴からアクセス可能です)。
VDISKドライバ(PXVDISK.SYS)とPhantomX制御コマンド(PXCTL.X)も中に入っています。phantomx_103c.zip
ソフトウェアの展開と転送
ダウンロードしたZipファイルを展開すると下記のファイルが入っているはずです。
RaspberryPiのファームウェア等が含まれているので初回は全て転送の必要があります。
config.txtに省電力用の設定がありますので必ず展開されたファイルのものを使用してください。
![]()
全ファイルを初期化したSDカードにコピーします。
![]()
SDカードをRaspberryPiに挿入して完了です。
ソフトウェアの更新
バージョンアップ時に更新が必要なモジュールは下記の通りです。
モジュール 説明 kernel.img PhantomX本体(Raspberry Pi Zero/W用) kernel7.img PhantomX本体(Raspberry Pi Zero2/2B/3A+/3B/3B+/4B用)
その他ドライバやユーティリティの更新がある場合はdriverとvdiskbootフォルダも必要に応じて最新化してください。
GreenPAKのファームウェアの更新版は提供されていませんので作業は不要です。
今後、いくつかの制約事項を解除する改良版ファームウェアの提供を予定しています。
最初は何も設定せずにデフォルトで使用してください。以下の設定は応用編で詳しく解説します。
設定ファイル
"phantomx.ini"が設定ファイルです。ダウンロードしたモジュールには以下のように記述されています。
1行で1設定の定義ファイルで"キー"と"値"のペアで設定します。 "キー"と"値"の間は空白またはタブで区切ってください。 また先頭に"#"を付けるとその行は無視されます。空白行があっても構いません。
上記の例では全て#でコメントアウトされていますので何も設定していない状態と同じになります。
設定項目
キー 値 EMUMODEL エミュレーションするMPUを指定します。
指定できる値と意味は以下の通り(ハイメモリはオプション設定が必要です)。000 : MC68000(ハイメモリ設定可) *デフォルト
030 : MC68030(MMU、ハイメモリ設定可)
040 : MC68040(MMU、内蔵FPU、ハイメモリ設定可)
060 : MC68060(MMU、内蔵FPU、ハイメモリ設定可)EMUWAIT エミュレーションに強制的にウェイトを入れるレベルを指定します。
0:ウェイト無し *デフォルト
1..7:数値が大きくなるにしたがって徐々にウェイトが増えますHIMEM ハイメモリ(ローカルメモリ)のモードを指定します。
060turbo互換($10000000 ~ )モード
0~768の任意の数字でメモリ量(MB)を指定します(但し16MB単位で切り捨て)。
256MB以内を推奨します。
実際に有効になるメモリ量はラズパイの搭載メモリ量に依存します。
1GB以上のモデル:768MBまで
512MBのモデル:384MBまで
TS-6BE16互換($01000000 ~ 16MB)モードTS-6BE16を指定します(最初の1文字しかチェックしていないのでTおよびtでもOK)。
容量は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の指定に従います。HIMEM{000|030|040|060} EMUMODELに応じてハイメモリ(ローカルメモリ)を指定します。
指定がなければHIMEMの指定に従います。設定項目(不揮発性仮想ディスク)
専用ドライバで使用可能な不揮発性の仮想的なディスクの設定です。
通称ですがVDISKと呼んでいますので以下VDISKと表現します。
最大で8個のディスクイメージの設定が可能です(最大容量4294966272バイト=4095MB)。
ディスクイメージのファイルは事前に用意する必要があります。
キー 値 例 VDISK{0|1|2|3|4|5|6|7} VDISKのイメージデータファイルのパス。
右の例のように複数並べて定義してください。
VDISKをHumanから使用するにはドライバ(PXVDISK.SYS)が必要です。
例にあるようにphantomx.iniにVDISK0,VDISK1,VDISK2の3つVDISKを設定している場合に、
全てのVDISKを使用する場合はCONFIG.SYSに次を加えてください(SYSディレクトリにドライバがある場合)。DEVICE = \SYS\PXVDISK.SYS #0
DEVICE = \SYS\PXVDISK.SYS #1
DEVICE = \SYS\PXVDISK.SYS #2phantomx.iniで設定していないIDに対しては常駐エラーになりますのでご注意ください。
また、TimerLEDをアクセスランプ代わりに使う"A"オプションが使えます。
DEVICE = \SYS\PXVDISK.SYS #0A
参考までにWindowsのDOS窓から指定した容量のファイルを作成する例です。
128MBの空ファイルを作成する
fsutil file createnew VDISK0.DAT 134217728 VDISK0 VDISK0.DAT VDISK1 VDISK1.DAT VDISK2 VDISK2.DAT設定項目(特殊用途)
キー 値 説明 FDDSWAP 0:内蔵FDD(0,1)と拡張FDD(2,3)をスワップしない *デフォルト
1:内蔵FDD(0,1)と拡張FDD(2,3)をスワップする内蔵FDD0,1と拡張FDD2,3へのアクセスを相互変換します。
これは拙作のFDX68を活用するために個人的に用意したオプションです。
FC2CUT 0:FC2ピンカット互換機能を使用しない *デフォルト
1:FC2ピンカット互換機能を使用するNetBSD/x68kでX Windowを使いたい人だけのための特殊オプション。
WRITEBACK 0:独自キャッシュはライトスルー(常時) *デフォルト
1:独自キャッシュはライトバック(一部領域のライトスルー化が可能)リスク承知の上でスピードを追究したい人向けの特殊オプション。
ライトバックモードではDMAC動作時に一部のエリアをライトスルーに動的変更します。
ライトスルーに変更された領域はリセットされるまで維持されます。
外部メモリハンドラ内で独自のIOアドレスに対してPhantomX独自の拡張デバイスが存在します。
IOアドレス仕様
PhantomXやRaspberryPiの情報取得や動作設定を行うためのレジスタです。
アドレス サイズ 項目 リード ライト 内容 $EA8000 w レジスタポート 現在のレジスタ番号 設定するレジスタ番号 データポートから読み/書きするレジスタの指定です。 0x0000:バージョン番号
0x0001:エミュレーション中のMPU
0x0002:ウェイトレベル
0x0010:VDISKのID
0x0011:VDISKの機能
0x00f0:RaspberryPiのSOC温度$EA8002 w データポート 現在のデータ値 設定するデータ値 レジスタポートで指定したレジスタのデータを読み/書きします。 レジスタ番号が0x0000(バージョン番号)の場合
リードするとバージョン番号をBCDで返します(例えばVersion1.02は$0102)。
ライトは無視されます。
特殊用途としてライト時に内部の独自キャッシュを全て無効化する効果があります。レジスタ番号が0x0001(エミュレーション中のMPU)の場合
0:MC68000,3:MC68030,4:MC68040,6:MC68060 となります。
リセットすると新たなMPU種で再開可能です。
設定ファイルは更新しません。レジスタ番号が0x0002(ウェイトレベル)の場合
1命令実行する度にウェイトを入れて実行速度を低下させます。
0で無効、1~7の7段階で数字が大きくなるほどウェイトが大きくなります。
設定ファイルは更新しません。レジスタ番号が0x0010(VDISK ID)の場合
アクセスするVDISKのIDを0~7で指定します。
設定ファイルにVDISKを複数設定している場合に
ディスク選択することが可能です。レジスタ番号が0x0011(VDISK 機能)の場合
VDISKがサポートする機能を取得します。
現在は非同期転送のサポート状態のみをレポートします。
$0000 : 非同期無効 $0001:非同期有効
ライトは無視されます。0x00f0(RaspberryPiのSOC温度)の場合
リードするとSOCの温度をBCDで返します(例えば60.05℃は$6005)。
ライトは無視されます。
IOアドレス仕様
拡張デバイスのレジスタポートに0x0010(VDISK ID)を設定した後にデータポートで指定したIDのVDISKに対する操作を行うIOポートです。
アドレス サイズ 項目 リード ライト 内容 $EA8010 l ディスク容量 総セクタ数 不可 VDISKの総セクタ数です。
セクターサイズは1024Byte固定です。$EA8014 l 現在セクタ番号 現在のセクタ番号 設定するセクタ番号 リード(現在のセクタ番号)
設定されたセクタ番号を返します。
ライト(設定するセクタ番号)
データを読み/書きするセクタ番号(0以上)を設定します。
現在セクタ番号に対して次の操作コマンドが有効になります。$EA8019 b 操作コマンド コマンド実行状態 操作コマンド リード(コマンド実行状態)
VDISKの読み込みまたは書き込み操作が実行中かどうかを返却します。
$00:アイドル(コマンド指示待ち)
$01:ビジー(コマンド実行中)
Version1.02以前では常に$00が読みだされます。
Version1.03以降で非同期タイプのコマンドを発行した場合には
アイドル状態になるまでドライバ側で監視が必要です。ライト(コマンド実行指示)
現在セクタ番号に対してデータウィンドウにデータを読み込むか、
データウィンドウからデータを書き込むかを指示します。
$00:読み込み
$01:書き込み
$10:読み込み(非同期)
$11:書き込み(非同期)
非同期のコマンドはVersion1.03以降で使用することが出来ます。
RaspberryPi Zero(1コアモデル)では非同期指定でも同期実行になります。$EA8400...$EA87FF b,w,l データウィンドウ セクタデータ セクタデータ 現在セクタから読み込んだデータ、もしくは
現在セクタに書き込むデータ。$EA9000...$EA9FFF b,w,l ブートROM ROMデータ - VDISKから起動するためのブート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上から VDISKイメージファイル内のファイルにアクセスが可能になります。
項目 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コマンドを使って設定されたVDISKのIDに対するフォーマット情報を出力できます。 ID0に設定されたVDISKのフォーマット情報を出力する例。
通常の通りX68000の電源を入れてください。MPUソケットに電源が供給されるとRaspberryPiも起動を開始します。
PhantomXのカーネルモジュールが起動を開始するまでに数秒かかる場合があります。
RaspberryPi 4B(新版)を使った時のSystem Informationです。040Turbo以上のスピードが出るようです。
![]()
RaspberryPi Zero WHを使った時のSystem Informationです。X68000 XVI以上の性能が出るようです。
![]()
新しいバージョンのIPLROMを使う
ACE/EXPERT/PRO/SUPERのIPLROMはXVIのIPLROMで拡張されたSRAM初期化(CLRキーを押しながらリセット)機能等が使用できないため不便です。 そのような悩みも設定ファイルでXVIのIPLROMに差し替えれば解決です。
SDカードに差し替えるIPLROMのデータファイルを準備して設定ファイルに指定してください。
無償公開されたXVIのIPLROMを使用する例
これがACEでも使えると本当に助かります
![]()
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を利用する例
MC68030モード
![]()
X68030だと認識されています(試験機はXVIです)
![]()
060turboの雰囲気を味わう
EMUMODELに040もしくは060が指定された場合はそれぞれMC68040、MC68060をエミュレーションします。 この時X68030で拡張されたいくつかのIOポートを内部的に偽のデバイスとして再現します。
@kamadoxさんのXEiJで生成できるROMを使用する方法を書いておきます(ありがたや~)。
1.XEiJを起動して機種を060turboに変更します
![]()
2.XEIJIPLROM30.DATを生成します
![]()
3.XEIJROM30.DATを生成します
![]()
4.XEIJIPLROM30.DATとXEIJROM30.DATをSDカードに保存します
5.phantomx.iniでROMファイルを指定します
XEiJのROMで起動したMC68060モード
![]()
いつものマンデルブロ
![]()
X68000からPhantomXを制御する
慣れてくるとphantomx.iniに複数の定義を書いてEMUMODELを動的に切り替えたり速すぎるのでウェイトを入れたいといった操作を行いたいと思います。
そのような場合はアーカイブで提供するPXCTL.Xコマンドをご利用下さい。
何もオプションを付けずに実行すると簡単なHELPが出てきます。
見ての通りなのですが
-eはphantomx.iniで指定しているEMUMODELを一時的に切り替えますものです。
一度リセットしていただくとMPUコアの種別が変更されてブートします。-wは一時的にウェイトを入れて速度を落とします
1にすると速度が大幅に落ち、その後2,3,4と増える度に徐々に遅くなります。-fは内蔵FDD(0,1)と拡張FDD(2,3)のアクセスをスワップします。
-vはVDISKのディスク情報を表示します。
-iは現在の設定情報を表示します。
VDISKから起動する
VDISKはSASIやSCSIのディスクと同様に起動が可能です。 しかもSASIよりも大容量ですのでSCSIディスクと同様の運用が可能です。もはやSCSIディスクすら必要としません。
起動用のサンプルとして提供するSDカード内に"vdiskboot"フォルダを用意しました。 このフォルダ内のphantomx.ini,SRAM.DAT,VDBOOT.DATをSDカード直下にコピーすれば、仮想ディスクから起動します。
サンプルのphantomx.iniは次のとおり記述されています。
つまりVDISKからの起動設定がなされたSRAMとVDISKであるVDBOOT.DATを定義しています。
VDISKのROMブート設定は"SWITCH.X BOOT=ROM$EA9000"で行いました。つまりVDISKのID0から起動になります。
その他IDから起動する場合はアドレスを$EA9000 + ID x 4で指定してください。 例えばID2から起動するなら"SWITCH.X BOOT=ROM$EA9008"となります。
サンプルで提供するVDISKのイメージは一般公開されているHUMAN302.XDFと同一になっています。追加で各種ドライバも保存しています。
起動可能なVDISKイメージの作成方法は通常のディスクとほぼ変わりません。 イメージファイルを作成しphantomx.iniに定義した後CONFIG.SYSにPXVDISK.SYSを組み込んで認識させます。
ドライブとして認識されればFORMAT ドライブ名で初期化した後、SYS ドライブ名でHUMAN.SYSを転送してください。 その後必要なモジュールを複写してください。
VDISKから起動した様子
![]()
VDISKイメージをWindows上で操作する
様々なエミュレータ用のディスクイメージをWindows上で操作することができるDiskExplorerを利用することで VDISKイメージからファイルを取り出したり、書き込んだりすることができます。 当然ながらDiskExplorerはPhantomXのVDISKイメージを正式にはサポートしていませんのでマニュアル設定で認識させる必要があります。
DiskExplorerでイメージファイルを選択した後(ManualFD)を選択してください。
![]()
次にプロファイルを手動設定します。VDISKのフォーマット情報を参考に設定してください。 代表的なサイズの情報は記載してありますのでサイズを合わせたイメージファイルで運用するとよいでしょう(スクリーンショットは1GBの例)。
![]()
正しく認識されると次の様にVDISK内のファイルが表示されます。
![]()
BOOTHのGIMONS DEVELOPPER WORKSで随時頒布を行っています(随時在庫追加しています)。
2023/7/23 Version1.03bリリース
2023/7/16 Version1.03aリリース
2023/3/12 Version1.02cリリース
2022/12/4 Version1.02bリリース
2022/11/25 Version1.02リリース
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リリース