バージョン : 0.17.06.17

作者 : Makoto Kamada

ウェブページ : http://stdkmd.com/xeij/

目次

  1. はじめに
  2. 最近の更新
  3. 機能と特徴
  4. 実行環境
  5. 実行サンプル
  6. メニューの説明
  7. 設定ファイル
  8. パラメータ
  9. 使用許諾条件 / 著作権 / 免責事項
  10. ソースコード
  11. ダウンロード
    1. 最新版
    2. 旧版
  12. コンパイル手順
  13. 起動方法
  14. NetBSD/x68k を動かしてみる
  15. misc/* の説明
  16. 文字コード表
  17. 参考資料
  18. リンク集
  19. 謝辞
  20. 連絡先

1. はじめに

XEiJ (X68000 Emulator in Java) は Java 言語で記述された X68000 エミュレータです。エミュレータといっても周辺回路の隅々まで実機とまったく同じものを作ろうとしているわけではなく、どちらかと言えば X68000 の新しい形を考えることを楽しんでいます。実装方法のアイデアや新しい機能を思い付いたら全体像など見えなくてもとりあえずプログラムを書き始め、詰まったらまた何か湧いてくるまで脇に置いておく、そんなことを繰り返しているのでソースコードは作りかけのところばかりですが、注釈のどれか 1 つでも誰かの役に立つことがあれば公開する意味があるかも知れないと思っています。

2. 最近の更新

0.17.06.17

実行環境

要求する Java SE のバージョンを 8u131 (1.8.0_131) 以上に更新しました。

*.DIM

*.DIM は GUN さんの DIFC.X で変換されたフロッピーディスクのイメージファイルです。XEiJ では読み込みだけ対応していましたが、書き出しと新規作成もできるようにしました。対応しているメディアタイプは 2HD、2HS、2HC、2HDE、2HQ の 5 種類です。オーバートラックには対応していません。読み込むときは保存されていないトラックを 0xe5 で充填し、書き出すときと新規作成するときは FAT に関係なく 0xe5 以外のデータを含むトラックをすべて保存します。*.DIM から読み込んだディスクを FORMAT.X などでフォーマットするとメディアタイプを変更できますが、対応していないメディアタイプに変更すると書き出せなくなるので注意してください。

マウス

入力メニューの Ctrl キー+左ボタン=右ボタン とパラメータの ctrlright を追加しました。ON にすると Ctrl (control) キーが押されている間マウスの左ボタンの操作を右ボタンの操作とみなします。

ありふれた 3 ボタンマウスが接続されていることを想定して右ボタンをボタン 3 に割り当てていましたが、2 ボタンマウスのときは右ボタンをボタン 2 に割り当てるようにしました。

2 ボタンマウスのときは Alt (option) + 右クリック でシームレス / エクスクルーシブを切り替えられるようにしました。3 ボタンマウスのときは従来通り中ボタンで切り替わります。

マウスのボタンをクリックしたときにどのようなイベントが発生しているか確認するために、メニューの「設定」→「その他」に「マウスのボタンの状態を出力する」を追加しました。ON にすると、マウスのボタンを操作する度に「設定」→「ターミナル」に「mouse button 1/5 was pressed. (0x00000010, 0x00000400)」のようなメッセージが表示されます。

CGROM

ホストマシンのフォントを使って CGROM を自動生成するとき、使われていない空白のコードに Shift_JIS-2004 (JIS X 0213) で定義されている文字を展開します。MS ゴシックや MS 明朝は「か゚き゚く゚け゚こ゚」が綺麗に書けないようです。

文字コード表 を作りました。

RTC

RTC の操作で ArrayIndexOutOfBoundsException が発生することがありました。

RTC の TEST レジスタを実装しました。じんそんさんの winner2.x が動きます。

参考

RTC メニュー を追加しました。X68000 の時計とホストの時計がずれてしまったとき「時計をホストに合わせる」で元に戻せます。

0.17.01.30

FPU、MC68882

FDIV、FMUL、FSCALE で拡張精度の結果が切り上げられて非正規化数から正規化数になったとき、UNFL がセットされていませんでした。

FMOVE.P FPn,<ea> で FPn が ±0 または ±Inf または NaN で k-factor が 18 以上のとき OPERR がセットされていました。

参考

fputest.x

fputest.x を更新しました。

0.17.01.28

FPU、MC68882

FSGLDIV、FSGLMUL の変則的な動作が他の命令の動作に影響を与えていました。

FCOSH、FSINH で FPCR の丸めモードがゼロへの丸めまたは負の無限大への丸めでオーバーフローしたとき、結果が正規化数の最大値ではなく無限大になってしまうことがありました。

FTENTOX で ArrayIndexOutOfBoundsException が発生することがありました。

fputest.x

fputest.x を更新しました。およそ 29MB のデータを 7MB 弱に圧縮して抱えており、テスト毎に展開して比較する仕組みになっています。実行するにはフリーエリアが 10MB くらい必要です。

── 続きを読む ──── 続きを隠す ──

0.17.01.24

実行環境

要求する Java SE のバージョンを 8u121 (1.8.0_121) 以上に更新しました。

CRTC

垂直映像期間のすべてのラスタについて、水平映像期間の開始時から終了時までの間に、全画面再描画に相当する画面およびプレーンの表示の有無、重ね合わせの順序、半透明または特殊プライオリティ、パレット、スクロール位置などの変更があったとき、水平映像期間の終了時にデータの後半 (右半分) を再描画します。グラフィックス画面で 768×512 ドット 256 色表示 (テキスト画面と混ぜて 4096 色表示) を行う画像ローダー (Arimac さんの BMPL.X/LPICL.X、CUL. さんの COPIX.r など) の画面を再現できます。

参考

FPU、MC68882

FATAN の引数が大きすぎて ±π /2 を返すとき、丸め処理が行われていませんでした。

FCOSH で FPCR の丸めモードがゼロへの丸めまたは負の無限大への丸めでオーバーフローしたとき、結果が正規化数の最大値ではなく無限大になっていました。

FDBcc、FScc、FTRAPcc で FPSR の BSUN をセットするとき、IOP をセットしていませんでした。

MC68060 の FDBcc で未実装浮動小数点命令例外が発生したとき、スタックに積まれた PC が次の命令ではなくディスプレースメントを指していました。

FMOVE.B FPn,<ea>、FMOVE.W FPn,<ea>、FMOVE.L FPn,<ea> が NaN を -1 ではなく 0 に変換していました。

FMOVE.L FPn,<ea> で FPCR の丸め桁数がシングルのとき、シングルで表現できないがロングで表現できる値の変換に失敗していました。ロングに変換する前に誤ってシングルに丸めていました。

FMOVE.S FPn,<ea> と FMOVE.D FPn,<ea> で FPCR の丸めモードがゼロへの丸めでオーバーフローしたとき、結果が正規化数の最大値ではなく無限大になっていました。

FSGLDIV、FSGLMUL の動作を実機に近付けました。MC68882 のバグは再現していません。

FSUB で 2127 から 264-1 を引いたとき、FPSR の INEX2 と INEX がセットされていませんでした。指数をずらした組み合わせや FADD で符号が異なる場合も同様でした。

演算結果の仮数部に誤差がない状態で指数部がオーバーフローして無限大または正規化数の最大値を返すとき、FPSR の INEX2 と INEX がセットされていませんでした。

演算結果が丸め処理で切り上げられて非正規化数から正規化数になったとき、FPSR の UNFL がセットされていました。

平方根と超越関数の誤差を減らしました。

実験的に FLGAMMA と FTGAMMA を追加しました。

実験的に追加された浮動小数点命令
OPMODE文法機能
1110000FLGAMMA.[BWLSDXP] <ea>,FPnログガンマ関数
1110001FTGAMMA.[BWLSDXP] <ea>,FPnガンマ関数

MC68EC030

CHK2、CMP2 の未定義のビットを含むコンディションコードの作り方を U - D、L - D、D - L のいずれかに帰着させる方法に変更しました。引数をすべて 32 ビットに符号拡張してから符号なし比較で以下のように分岐させます。

if (L < D && L ≤ U || D == U) {
  U - D
} else if (D < U && U < L) {
  L - D
} else {
  D - L
}

参考

DIVS、DIVSL、DIVU、DIVUL でゼロ除算が発生したときコンディションコードの未定義のビットで引数以外の要因で変化する Z と V のうち、V を作るコードを加えました。

参考

SRAM

SRAM メニューsramsize パラメータ で SRAM の容量を 16KB/32KB/64KB から選べるようにしました。メモリマップはリセットしたときに変更されます。なお、XEiJ は SRAM の内容を設定ファイルに保存するので通常は SRAM.DAT ファイルを使いません。他のエミュレータで作成した SRAM.DAT ファイルをインポートするときは SRAM メニュー で SRAM の容量を指定してから読み込ませてください。

プリンタ

24 ドットビットイメージの改行ピッチを修正しました。

ホストファイルシステム

ホストファイルシステム でファイルをオープンした直後に先頭から 16KB 未満の位置をシークしてすぐに書き込むと先頭からシークした位置までのデータが消えてしまうバグを修正しました。また、シークコマンドで負のオフセットを指定するとエラーになるバグを修正しました。

fputest.x

fputest.x を作り直しました。

instructiontest.x

instructiontest.x を更新しました。easy モードで CHK 命令のコンディションコードの未定義の Z、V、C がテストされていました。また、兼用になっていたコンディションコードの X と例外発生フラグを分けました。

0.16.11.17

実行環境

要求する Java SE のバージョンを 8u111 (1.8.0_111) 以上に、推奨する Java SE のバージョンを 8u112 (1.8.0_112) 以上に更新しました。

プリンタ

プリンタ を追加しました。

CRTC

CRTC の未公開のメモリモード 2 の処理を追加しました。060turbo と 060turbo 以外で動作が少し違います。

crtcmmtest.x

crtcmmtest.x を追加しました。

デバッガ

逆アセンブルリスト などにボタンを追加しました。

instructiontest.x

instructiontest.x を更新しました。コマンドラインに空白で区切って複数の命令を書けるようにしました。また、デフォルトでコンディションコードの未定義のビットを無視するようにしました。コンディションコードの未定義のビットもテストするときは hard と書いてから命令を書きます。

B:\>instructiontest easy all hard all

と書くとすべてのテストが実行されます。所要時間は 060turbo (実機) で 15 分、X68030 (実機) で 102 分でした。テストデータを増やしたので時間が長くなりましたが、以前は見逃されていたエラーが見つかることがあります。なお、ほとんどの命令は未定義のビットがないので、all を 2 回書いても 1 回しかテストされません。

MC68030

DIVS.L <ea>,Dh:Dl でオーバーフローしたときのコンディションコードの未定義の N の変化を実機に近付けました。

ゼロ除算、CHK 命令、TRAPV 命令の例外スタックフレームのフォーマットを修正しました。

MC68060

CAS.W Dc,Du,<ea> (misaligned <ea>)、CAS.L Dc,Du,<ea> (misaligned <ea>)、DIVS.L Dr,Dh:Dl、DIVU.L Dr,Dh:Dl、MULS.L Dr,Dh:Dl、MULU.L Dr,Dh:Dl で未実装整数命令例外が発生するようにしました。

アクセスフォルトの例外スタックフレームのフォルトステータスロングワードのサイズを修正しました。

MC68882

MC68882 の restore CIR にはフォーマットワード書き込んだらそれを必ず (must) 読み出さなければならないという決まりがありますが、この決まりを守らなくてもコプロセッサプロトコル違反にならないようにしました。libc の __fpuinit がこの決まりを守っていませんでした。

拡張グラフィックス画面

拡張グラフィックス画面 をメニューとパラメータで ON/OFF できるようにしました。デフォルトは OFF です。変更はリセットしたとき反映されます。

フロッピーディスク

FDC は工事中です。NetBSD/x68k でフロッピーディスクをマウントしようとしないでください。ハングアップしてしまいます。

vcntest.x

vcntest.x で 512 X 65536 X 1 を選択したとき CRTC とビデオコントローラに設定されるメモリモードを修正しました。

0.16.08.17

重要

FDC は工事中です。NetBSD/x68k でフロッピーディスクをマウントしようとしないでください。ハングアップしてしまいます。

実行環境

要求する Java SE のバージョンを 8u101 (1.8.0_101) 以上に、推奨する Java SE のバージョンを 8u102 (1.8.0_102) 以上に更新しました。

アドレス変換キャッシュモニタ

アドレス変換キャッシュモニタ を追加しました。MMU のアドレス変換キャッシュの内容を表示します。

MPU

ABCD と NBCD と SBCD で引数が BCD の範囲外のときの演算結果と未定義の N と V の変化を実機に近付けました。

ABCD と NBCD と SBCD のコンディションコード
コンディションコードMC68030MC68060
Xキャリーまたはボローがあるときセット、さもなくばクリア
N未定義 (結果の最上位ビット)未定義 (変化しない)
Z結果が 0 でないときクリア、さもなくば変化しない
V未定義 (クリア)未定義 (変化しない)
Cキャリーまたはボローがあるときセット、さもなくばクリア

ASR.W <mem> と ROXR.W <mem> で X をクリアしなければならないときにクリアしていませんでした。

BFxxx のビットフィールドのオフセットがデータレジスタで指定されたとき、オフセットが 0 未満または 32 以上のときの動作が間違っていました。

CAS.B と CAS.W と CAS2.W でオーバーフローしたときの動作が間違っていました。

CHK.W と CHK.L で例外が発生しなかったときコンディションコードが設定されていませんでした。また、未定義の Z と V と C の変化を実機に近付けました。

CHK.* <ea>,Dq のコンディションコード
コンディションコードMC68030MC68060
X変化しない
NDq の最上位ビット
Z未定義 (Dq が 0 のときセット、さもなくばクリア)未定義 (変化しない)
V未定義 (<ea>-Dq がオーバーフローしたときセット、さもなくばクリア)
C未定義 (<ea>-Dq でキャリーがあるときセット、さもなくばクリア)

CHK2 と CMP2 の未定義の N と V の変化を実機に近付けました。

DIVS/DIVSL/DIVU/DIVUL でゼロ除算のとき未定義の N と Z と V およびオーバーフローしたとき未定義の N と Z の変化を実機に近付けました。

DIVU.L Dr,Dh:Dl で $8000000000000000/$FFFFFFFE などの計算が間違っていました。

NEG.B <mem> と NEG.W <mem> でオーバーフローしたとき (引数が $80 と $8000 のとき) のコンディションコードが間違っていました。

SCSI ROM

IOCS _SCSIDRV で D5 レジスタに 3 以上が指定されたとき 2048 バイト / ブロックとみなすパッチを追加しました。

その他

misc/* の説明 を書きました。

instructiontest.x を追加しました。MPU のユーザモードで使用できる整数命令の動作をテストするプログラムです。

vcntest2.x を追加しました。ビデオコントローラの注釈に書いた例を実際に試すプログラムです。

旧版 をダウンロードできるようにしました。

0.16.07.17

重要

FDC は工事中です。NetBSD/x68k でフロッピーディスクをマウントしようとしないでください。ハングアップしてしまいます。

ビデオコントローラ

ビデオコントローラのスプライト画面とテキスト画面とグラフィックス画面を重ね合わせるコードを大幅に増やしました (手作業 2.3 万行 → 自動生成 48 万行)。

グラフィックス画面

実画面サイズが 1024×1024 ドットのグラフィックス画面に実機にない 256 色モードと 65536 色モードを追加しました。

メモリモード実画面サイズ色数ページ数GVRAM サイズ
0512×512 ドット16 色4 ページ512KB
1256 色2 ページ
365536 色1 ページ
41024×1024 ドット16 色
5256 色1MB
765536 色2MB

実画面サイズが 1024×1024 ドットのグラフィックス画面を 512×512 ドットずつ 4 分割して組み換えられるようにしました。

表示モードテスト

表示モードテスト に画面の解像度、ラスタ 2 度読みとインターレースの有無、オシレータと水平同期信号と垂直同期信号の周波数などの表示を追加しました。

PCM8A.X のパッチ

PCM8A.X v1.02 がローカルメモリを 256MB 積んだ 060turbo で動かない問題を回避するパッチを追加しました。I/O ポートのアドレスの上位 8 ビットが $FF になっているところを $00 に修正します。なお、LZX 圧縮されたデバイスドライバや実行ファイルには対応していません。

音声出力速度制御

音声出力速度制御 を廃止しました。代わりに音声出力が ON のとき負荷率 90% を上限としてそれ以上動作周波数が上がらないようにしました。

データブレークポイント

バイトサイズまたはワードサイズの データブレークポイント が仕掛けられたアドレスをそれより大きいワードサイズまたはロングワードサイズでアクセスしたときも停止するようにしました。

スプライト画面

スプライトプレーンとバックグラウンドプレーンのパレットの下位 4 ビットがすべて 0 でバックグラウンドプレーン 1 のパレットブロックが 0 のときバックグラウンドプレーン 0 のパレットブロックが出力されなくなっていたバグを修正しました。

CRTC

インターレースのとき画面に縞模様ができるようになっていたバグを修正しました。

フォントエディタ

フォントエディタ でズームアウトすると表示が乱れるようになっていたバグを修正しました。

その他

動作確認環境を Windows 7 Professional (64 ビット) から Windows 10 Pro (64 ビット) に更新しました。

0.16.05.12

フロッピーディスク、SASI ハードディスク、SCSI ハードディスク / CD-ROM

レスポンスの遅い FD メディアを挿入するとメディアの判別が終わる前に FDC が READ DATA コマンドを受け付けてしまい NullPointerException が発生することがあるバグを修正しました (Thanks: 星型ピノ @delikea さん)。メディアの判別が終わるまでメディアが挿入されていないように見えるようにしました。SASI ハードディスク と SCSI ハードディスク / CD-ROM も同様の調整を行いました。

0.16.05.07

スプライト画面

スプライト画面を作り直しました。スプライトは表示ラスタの 2 ラスタ手前で、バックグラウンドは 1 ラスタ手前で並べて、表示ラスタで重ね合わせます。変化していないラスタの描画を省く処理は行わず、スプライトを表示できる画面モードのときは常にすべてのラスタを描画します。そのため、768×512 ドット以外の画面モードのときの動作が重くなっています。

スプライトパターンビュア

スプライトパターンビュア を追加しました。

IOCS _DEFCHR

IPLROM 1.3 のとき IOCS _DEFCHR が X68030 の ハイメモリ や 060turbo の ローカルメモリ を ROM と誤認してフォントパターンの設定に失敗する問題を修正するパッチを追加しました。

0.16.04.30

シームレスマウスモード

IOCS だけでなく SX-WINDOW (FSX.X version 3.10) も シームレスマウスモード で操作できるようにしました。縁部加速 を ON にすると実画面モードもシームレスのまま操作できます。

エクスクルーシブマウスモード

エクスクルーシブマウスモード に入るときと出るときに X68000 のマウスカーソルが動かないようにしました。

スプライト画面

XEiJ は画面の描画処理を水平映像期間の先頭で 1 ラスタ分まとめて行いますが、このときスプライトを並べる処理も同時に行っていました。スプライトを並べる処理だけ 1 ラスタ手前にずらしました。スプライトダブラ (画面を上下に分割するラスタに走査線が差し掛かったとき上で使われたスプライトを定義し直して下で再び使うことで 1 画面あたりのスプライトの表示可能枚数を増やす技術) を用いているゲームなどで横線ノイズが表示される症状が改善される場合があります。

SCSI ROM

X68000 EXPERT/SUPER/XVI/Compact モードのとき IPLROM30.DAT から自動生成した SCSI ROM がうまく動かないバグを修正しました。060turbo モード用に追加した IPLROM 1.3 のパッチと衝突していました。

逆アセンブルリスト

CPUSHL/CPUSHP/CPUSHA 命令を逆アセンブルすると CINVL/CINVP/CINVA 命令が表示されるバグを修正しました。

0.16.04.26

グラフィックス画面

65536 色モードのときパレットコードの上位バイトをバイトサイズでリードすると 0 に見えるバグを修正しました。

データブレークポイント

X68000 モードのとき MOVEM 命令でメインメモリを読み書きすると データブレークポイント で検出されないバグを修正しました。

0.16.04.22

MC68060

060turbo モードのとき CTRL+OPT.1+DEL や kt reset などでソフトウェアリセットをかけようとすると「バスエラーが発生しました」という白帯が表示されて結局リセットボタンを押さなければならなくなるバグを修正しました。MC68060 の MOVES 命令でファンクションコードに 3 が指定されたときユーザモードのメモリマップが選択されてスーパーバイザ領域のアクセスに失敗していました。

メインメモリ

設定メニューでメインメモリのサイズを変更したとき直後のリセットで反映されない不具合を修正しました。

0.16.04.21

実行環境

要求する Java SE のバージョンを 8u91 (1.8.0_91) 以上に、推奨する Java SE のバージョンを 8u92 (1.8.0_92) 以上に更新しました。

ホストファイルシステム

ホストファイルシステム でホストマシンのファイルを操作するスレッドをコアから分離しました。また、先読み・遅延書き込みバッファを介してファイルにアクセスするようにしました。ファイルアクセスが軽くなり、バッファの充填や排出を待っている間も割り込み処理を続けることができます。例 : CD-ROM 版の電脳倶楽部を起動する に書いたように XEiJ は DVD スーパーマルチドライブ (以下は E: の場合) などに CD-ROM 版の電脳倶楽部 (月刊電脳倶楽部 140 号以降や激光電脳倶楽部など) を入れて

>java -jar XEiJ.jar -boot=E:

とするだけで電脳倶楽部を起動できますが、このとき「◎」をクリックして新しいページに移る度にオープニング曲の演奏が途切れる症状が改善されました。

SCSI ハードディスク

XEiJ は SCSI ハードディスクイメージの新規作成で必ず装置初期化を行い、正しく装置初期化されていないファイルを SCSI ハードディスクイメージと認識しない仕様になっています。この条件が厳しすぎて、装置初期化を行わない他のエミュレータで FORMAT.X を使って装置初期化されたファイルは FORMAT.X のバグでファイルサイズと容量が一致していないため XEiJ で使用することができませんでした (Thanks: TANE さん)。ファイルサイズに対して容量が 1 セクタ少ないファイルも SCSI ハードディスクイメージと見なすようにしました。

FORMAT.X の動作に合わせて SCSI ハードディスクの Read Capacity コマンドが最終論理ブロックアドレスの代わりに論理ブロック数を返していました。これを常に最終論理ブロックアドレスを返すように変更してしまうと XEiJ でも FORMAT.X で正しく装置初期化することができなくなってしまうので、Read Capacity コマンドが FORMAT.X から呼び出されたときだけ従来通り論理ブロック数を返し、それ以外は最終論理ブロックアドレスを返すようにしました。

060turbo.sys の SCSI コールでバスエラーが出ることがあるバグを修正するパッチを追加しました。

MC68882

MC68882 の浮動小数点コンディションコード OR、NE、GLE、SNE の動作を修正しました。

ccMC68882MC68060
OR / GLEZ|~NAN~NAN
NE / SNENAN|~Z~Z

ハイメモリ

ハイメモリが存在するだけで正常に動作しなくなるプログラムがあるので X68030 のハイメモリのデフォルトを OFF にしました。

0.16.04.12

実行環境

要求する Java SE のバージョンを 8u77 (1.8.0_77) 以上に、推奨する Java SE のバージョンを 8u77 (1.8.0_77) 以上に更新しました。

Google Chrome はバージョン 45 から Java アプレットに対応しなくなりました。実行サンプルJava Web Start で起動できます。

060turbo

機種に 060turbo を追加しました。

MPU は MC68060 と命令互換のプロセッサです。命令キャッシュ、データキャッシュ、分岐キャッシュ、ストアバッファおよびスーパースカラはありません。CACR や PCR の該当ビットを 1 にしても何も変わりません。0 サイクルの命令はありません。

FPU は未実装浮動小数点命令を FPSP に任せる通常版と MC68882 と MC68060 のすべての浮動小数点命令を実行できるフルスペック版を選択できます。

MMU のアドレス変換キャッシュは独自仕様です。1-way にする代わりにハッシュ関数を工夫してアドレス変換のオーバーヘッドを減らしています。

FC2 ピンをカットできます。NetBSD/x68k で X Window System が動きます。NetBSD/x68k を動かしてみる を書きました。

ローカルメモリ $10000000-$1FFFFFFF (16MB~256MB) を利用できます。設定ファイルにローカルメモリの内容を保存することができます。

リソースから読み込んだ IPLROM30.DAT に新しく作ったパッチを当てて使います。060turbo の実機の ROM は不要です。

ハイメモリ

X68030 モードのとき九十九電気 (ツクモ) の TS-6BE16 相当のハイメモリ $01000000-$01FFFFFF (16MB) を利用できます。設定ファイルにハイメモリの内容を保存することができます。

浮動小数点プロセッサボード

浮動小数点プロセッサボード CZ-6BP1 を 2 枚挿してあります。FPCP は MC68882 と命令互換のコプロセッサです。FLOAT3.X を利用できます。GCC(真里子版) または GCC2 でコンパイルして libc をリンクしたプログラムは FLOAT3.X を経由せずコプロセッサを直接操作します。

マザーボードコプロセッサ

ドーターボードにある MC68060 から見てマザーボードにある MC68882 をマザーボードコプロセッサと呼んでいます。実機と同様に MC68060 から MC68882 にアクセスできます。起動メッセージなどでマザーボードコプロセッサの有無と種類が表示されます。

SCSI CD-ROM

SCSI 機器の種類に CD-ROM を追加しました。*.ISO ファイルを SCSI CD-ROM と見なします。ブートセクタがあるときは「ここから再起動」で CD-ROM から直接起動できます。Human68k からは susie.x でアクセスできます。

IPLROM

IPLROM 1.3 を 1.5 に更新するパッチを追加しました。MC68000、MC68EC030 および MC68060 のいずれでも起動できます。SCSI CD-ROM から起動できます。起動メッセージにマザーボードコプロセッサや浮動小数点プロセッサボードの有無と種類を表示します。

IOCS _CRTMOD が指定された画面モードと異なる色数でグラフィックパレットを初期化するバグを修正するパッチを追加しました。

デバッグコンソール

コマンド入力で停止、実行、逆アセンブル、ダンプなどの処理を行います。

論理空間モニタ

論理アドレスに割り当てられている物理アドレスを表示します。

物理空間モニタ

物理アドレスに割り当てられているデバイスを表示します。

ルートポインタリスト

マルチタスク環境で停止させるタスクを選択できます。

レジスタウインドウ

レジスタウインドウ に浮動小数点レジスタを追加しました。

逆アセンブルリスト

逆アセンブルリスト でスーパーバイザモードとユーザモードを切り替えられるようにしました。

メモリダンプリスト

メモリダンプリスト でスーパーバイザモードとユーザモードを切り替えられるようにしました。

周波数固定モード

周波数固定モード のときも負荷率が 100% を超えると動作周波数を抑えて負荷率を 100% まで下げます。

音声出力速度制御

音声出力速度制御 のデフォルトを ON にしました。

ホストファイルシステム

LHA.x の誤動作を避けるため、DOS _DSKFRE が返す HFS の空き容量の上限を 2GB にしました。

DOS _FILES が属性の条件にボリューム名が含まれているときファイル名の条件を無視してボリューム名を返していました。これが原因で FORMAT.X が領域確保後のシステム転送に失敗していました。HFS の DOS _FILES がボリューム名を返すのはファイル名の条件が *.* のときだけにしました。

ディスクイメージファイルの新規作成

フロッピーディスク、SASI ハードディスク、SCSI ハードディスクのイメージファイルを新規作成するとき、適切な拡張子が指定されていなければ拡張子を追加するようにしました。

ラスタコピー

ラスタコピーを実機と同様に水平フロントポーチで行います。

FPU

「80 ビット拡張精度」と「96 ビット拡張精度」の呼び方を「拡張精度」と「三倍精度」に変更しました。

例外発生時に FPIAR またはスタックフレームの実効アドレスが正しく設定されていない場合がありました。

FTST がソースオペランドではなくデスティネーションオペランドをテストしていました。これが原因で xeyes の目玉が崩れていました。

FBGE と FBLE で FPSR の Z と NAN が同時にセットされていた場合 (通常は起こらない) の動作が実機と違いました。

MC68EC030

BFINS Dn,<mem>{offset:width} で 5 バイトに跨るとき 1 バイト目の範囲外のビットが破壊されていました。

BFFFO <mem>{offset:width},Dn で オフセットが 8 以上のときの計算が間違っていました。

ソースコード

ソースコード を分割しました。

0.15.08.31

推奨する Java SE のバージョンを 8u60 (1.8.0_60) 以上に更新しました。

0.15.08.12

MOVEM.wl <list>,-(Ar) で <list> に Ar が含まれているときの動作を再修正しました。

0.15.08.09

MOVEM.wl <list>,-(Ar) で <list> に Ar が含まれているときの動作を修正しました。

0.15.07.19

ビデオコントローラの 0x00e82500 の上位バイト (スプライト画面・テキスト画面・グラフィックス画面間の優先順位) に不正な値が設定されたときの動作を X68030 の実機に合わせました。参考 : GIMONS さん

0.15.07.15

逆アセンブラ を更新しました。

要求する Java SE のバージョンを 8u51 (1.8.0_51) 以上に更新しました。

0.15.07.01

機能と特徴 の文章を更新しました。また、メニューパラメータ設定ファイル の説明を書きました。

コマンドラインから起動したとき「メインメモリの内容を保存する」が ON になっていると終了時にメインメモリの内容が 設定ファイル に保存されます。RAM ディスクで作業中にうっかりエミュレータを終了してしまっても大丈夫です。

メモリ上の Human68k にもパッチを当てます。といっても大したものは入っていません。

FE ファンクション命令 を更新しました。「FLOATn.X を組み込まない」を ON にすると CONFIG.SYS に FLOATn.X が書かれていても組み込まれなくなります。

FPCR (Floating Point Control Register) と FPSR (Floating Point Status Register) の処理を更新しました。

コアの負荷が大きいときキーを押した途端に何文字も入力されてしまうことがある問題を修正しました。

MPU が MC68EC030 のとき DIVS.L <ea>,Dq 命令で -231/-1 の計算を間違えるバグを修正しました。

MPU が MC68EC030 のとき上位 8 ビットが 0 でない奇数アドレスにワードサイズでアクセスしようとするとコアが止まるバグを修正しました。

0.15.06.08

推奨ブラウザ から Google Chrome を外し、代わりに Mozilla Firefox と Waterfox を復活させました。

9SCDRV.X を組み込むと Human68k と FDDEVICE.X の 2HD/2HC/2DD8/2DD9/2HQ に加えて 2DD10/2HDE/2HS のフロッピーディスクイメージにアクセスできます。2HD/2HC/2HDE/2HS のイメージから起動できます。

DIFC.X で変換された 2HD/2HC/2HQ/2HDE/2HS の DIM ファイル (オーバートラックなし) にリードオンリーでアクセスできます。2HD/2HC/2HDE/2HS の DIM ファイルから起動できます。

0.15.04.22

ROM デバッガの実効アドレスの計算に関係する不具合を修正するパッチを追加しました。

キーボードをマウスで操作したときマウス受信データのボタンの状態が変化しないようにしました。

ファンクションキーの表示がなくてカーソルが最下行にあるとき OPT.1+OPT.2 を押すと電卓が画面の外に表示されて見えない問題を修正するパッチを加えました。060turbo と同様にカーソルが最下行にあるときは電卓がカーソルの上の行に表示されます。

LEA.L 4.W,A0;MOVEM.L D0-D1,-(A0) を実行すると ArrayIndexOutOfBoundsException が出てコアが止まるバグを修正しました。

0.15.04.15

音声出力速度制御 をデフォルトで OFF にしました。

ROM デバッガ 2.32 で FSINCOS.X FPm,FPc:FPs をアセンブルしようとすると bus error in debugger が発生するバグを修正するパッチを加えました。

要求する Java SE のバージョンを 8u45 (1.8.0_45) 以上に更新しました。Java™ SE Development Kit 8, Update 45 Release Notes

0.15.03.30

スタイルシートをサイトに合わせました。

FFT を更新しました。

推奨する Java SE のバージョンを 8u40 (1.8.0_40) 以上に更新しました。Java™ SE Development Kit 8, Update 40 Release Notes

0.15.01.29

http://stdkmd.com/xeij/ に引っ越しました。Java コントロールパネルのセキュリティタブの例外サイトリストに http://mada.la.coocan.jp/ を登録されている場合は http://stdkmd.com/ への変更をお願いします。

0.15.01.25

ウインドウの位置、ディスクイメージファイル名、SRAM の内容などを終了時に設定ファイルに保存して次回の起動時に復元します。コマンドラインから起動したときの設定ファイルは、Windows のとき %APPDATA%/XEiJ/XEiJ.ini、それ以外は ~/XEiJ.ini または ./XEiJ.ini です。Java アプレットのときは Web Storage を、Java Web Start のときは PersistenceService を使用して設定をローカルファイルに保存します。

表示モードテスト のパターンテストを更新しました。背景に敷き詰められると邪魔な 0 番の番号を省き、反転を示す印は小さく、手前のスプライトを明るく、奥のスプライトとバックグラウンドを暗く表示します。

デバッガ db.x とソースコードデバッガ scd.x にある「リモートコンソールモードのとき受信バッファに溜まった入力が 1 文字置きに欠落する」というバグを回避して、入力を 1 行ずつ転送するターミナルとの相性を改善しました。

音声出力速度制御 を OFF にできるようにしました。音程が不安定になるのは音が途切れるよりも気持ち悪いという人は OFF にしてください。

要求する Java SE のバージョンを 8u31 (1.8.0_31) 以上に更新しました。Java™ SE Development Kit 8, Update 31 Release Notes

0.14.12.26

CRTC のステージを再構築しました。CRTC IRQ と V-DISP は水平フロントポーチで遷移します。ラスタブレークも一緒で H-SYNC はブレーク後数命令ないし数十命令後に遷移します。

ビデオコントローラの重ね合わせの処理を変更しました。スプライト画面とテキスト画面のどちらか代表する画面を選んでからグラフィックス画面と重ね合わせます。

表示モードテスト を追加しました。CRTC やビデオコントローラなどの表示モードの確認と、任意のテストデータで動作テストを行えます。

音声モニタ の出力波形は左クリックと右クリックで時間方向、Shift キーを押しながらだと振幅方向に拡大縮小します。

0.14.11.23

OPM モニタ改め 音声モニタ に、出力波形、周波数分布、キーオンとリリースを示す鍵盤、音色定義データおよび ADPCM の状態を表示します。

ADPCM の出力が ON または OFF されたとき、-1 または 0 のマスクの代わりに滑らかな曲線を掛けることでプチノイズを除去します。

ADPCM で 0x00 または 0x88 が出力されたとき、変位の符号によって 0x08 または 0x80 に読み替えることで変位の偏りを抑制します。

ADPCM の原発振周波数を通常の 8MHz/4MHz と改造された 8MHz/16MHz から選べます。8MHz/16MHz のとき PCM8A.X -M1 -F2 とすると ADPCM のサンプリング周波数が 31.3kHz になります。

ADPCM の予測指標が 45 以上のとき波形が乱れる不具合を修正しました。

0.14.11.11

IPLROM 1.3 を使用していて ROM デバッガがないのに ROM デバッガを組み込もうとしたとき、エラーが出ないようにダミーのコードを走らせてそのまま起動できるようにしました。

0.14.11.07

コアのバグを修正しました。また、ゼロプライオリティといくつかの特殊プライオリティ/半透明モードを追加・修正しました。

0.14.11.03

DMA を更新しました。

データブレークポイント を追加しました。指定されたアドレスとサイズで指定された範囲のデータの読み書きがあると停止します。

0.14.10.29

HFS の _CREATE の不具合を修正しました。また、MFP の割り込み要求が 1 命令遅れて受け付けられるようにしてみました。

0.14.10.21

SASI ハードディスクイメージの書き出しと SCSI ハードディスクイメージの新規作成の不具合を修正しました。

0.14.10.20

マウスモード (エクスクルーシブ) のときマウスカーソルの移動速度を調節できるようにしました。

0.14.10.18

ラスタブレークポイント を追加しました。垂直帰線割り込み、水平帰線割り込み、ラスタ割り込みをトレースしたいときに使います。

0.14.10.15

要求する Java SE 実行環境のバージョンを Java SE 8 Update 25 (8u25, 1.8.0_25) 以上に更新しました。

0.14.10.14

パラメータ -model=(EXPERT|SUPER|XVI|Compact|Hybrid|X68030) またはメニューで機種を選択できます。IPLROM*.DAT は機種に対応するものがリソースから読み込まれるので別途用意する必要はありません。

SCSI ハードディスクイメージ (*.HDS) に対応しました。SCSIINROM.DAT と SCSIEXROM.DAT はリソースにある IPLROM30.DAT を使って内部で生成されるので別途用意する必要はありません。

0.14.09.23

FMOVE.D FPn,(Ar)+/-(Ar) を修正しました。

0.14.09.22

ieeerem/rem のアルゴリズムを変更しました。sin(210000) を計算できるようにしました。

0.14.09.08

atanh のアルゴリズムを変更しました。また、JRE 7 への対応を廃止しました。

0.14.09.04

atan/exp2/tan のアルゴリズムを変更しました。

0.14.08.29

浮動小数点命令の処理を更新しました。

0.14.08.22

デバッガで浮動小数点命令を逆アセンブルできるようにしました。

0.14.08.21

拡張精度浮動小数点数 (19 桁) または三倍精度浮動小数点数 (24 桁) のどちらかを選択できるようにしました。

0.14.08.20

FETOXM1 の誤差を減らしました。

0.14.08.19

X68030 モードのとき浮動小数点命令の一部 (演算命令と分岐命令) を実行できるようにしました。例外処理は未実装です。

0.14.07.17

要求する Java SE のバージョンを更新しました。

0.14.05.06

割り込み禁止の状態で暴走したときもインタラプトスイッチが効くようにしました。

0.14.05.05

分岐ログ を更新して プログラムフロービジュアライザ を追加しました。プログラムカウンタが通った跡をリアルタイムに可視化します。

0.14.05.01

デバッグウインドウが開いているときは F11 キーが全画面表示ではなく停止ボタンとして機能します。

0.14.04.30

コアのバグを修正しました。

0.14.04.29

キー入力の処理を TimerTask を使わない方法に変更しました。

0.14.04.28

FDC を更新しました。FDDEVICE.X を組み込むと 2DD (640KB)、2DD (720KB)、2HQ のイメージファイルを操作できます。

0.14.04.27

描画するフレームの間隔を空けることで描画の負荷を軽くすることができます。

0.14.04.26

FDC を動かしてみるテスト。FORMAT /5 B: で 2HC モードでフォーマットできます。

0.14.04.23

HUMAN.SYS が入っていないディレクトリでも起動できるようにしました。COMMAND.X は入れておいてください。

0.14.04.21

実行サンプルの Human68k version 3.02 のシステムディスクの設定を 10MHz、最近傍補間、音声なしに変更しました。

0.14.04.19

Firefox と Opera でも全画面表示が使えるようになりました。

3. 機能と特徴

4. 実行環境

5. 実行サンプル

6. メニューの説明

7. 設定ファイル

8. パラメータ

9. 使用許諾条件 / 著作権 / 免責事項

10. ソースコード

11. ダウンロード

11.1. 最新版

11.2. 旧版

12. コンパイル手順

13. 起動方法

14. NetBSD/x68k を動かしてみる

15. misc/* の説明

16. 文字コード表

17. 参考資料

18. リンク集

19. 謝辞

X68000 の基本的なソフトウェアの無償公開に尽力された権利各社およびシャープ・プロダクツ・ユーザーズ・フォーラムの方々、美しいフォントを公開されている平木敬太郎さん、門真なむさん、実行サンプルとして使わせていただいたフリーソフトウェアの作者の方々、動作報告と応援のメッセージを寄せてくださった皆さん、ありがとうございます。

20. 連絡先

Makoto Kamada

ツイッター

@kamadox

フェイスブック

鎌田 誠

メール

E-mail