歓迎光臨
"eX1" - SHARP X1 emulator for Win32
"eX1twin" - SHARP X1twin emulator for Win32
"eX1turbo" - SHARP X1turbo emulator for Win32
"eX1turboZ" - SHARP X1turboZ emulator for Win32
"ePCEngine" - NEC-HE PC Engine emulator for Win32

"eX1" is SHARP X1 emulator for Win32.
"eX1twin" is SHARP X1twin emulator for Win32.
"eX1turbo" is SHARP X1turbo emulator for Win32.
"ePCEngine" is NEC-HE PC Engine emulator for Win32.
These softwares are under GNU GENERAL PUBLIC LICENSE.

This software requires Windows 2000/XP/Vista/7.

Download: Jump to Common Source Code Project



eX1 謎WIPページ
eX1twin 謎WIPページ
eX1turbo 謎WIPページ
eX1turboZ 謎WIPページ
ePCEngine 謎WIPページ

X1誕生27年目の解答です(マテ
参考にさせて頂いた、X milleniumおよびT-tune, Ootake, xpceの各開発者様に感謝。



2017/5/20
ハイレゾ80桁のとき、多色モードでなくても多色パレットで画面を描画するよう修正しました。



2017/5/17

4096色モードや、64色モード2画面の重ね合わせなどを修正しました。
X1turboZの画面周りは複雑怪奇です(苦笑)

X1センターの佐藤様に検証用プログラムを作成いただきました。
いつもありがとうございます。



2017/5/15



X1turboZの多色モード周りをサポートしてみました。
モザイク関係などは未実装です。
X1turboZ対応のソフトが少なくて、正しく実装できているか十分確認できておりません。
スクリーンショットの琥珀色の遺言は、4096色中8色モードです。
よろしければ、64色/4096色モードの確認をしていただけますと、大変助かります。

X1turboZの多色モード周りの情報は、X1センターの佐藤様に教えて頂きました。
まことにありがとうございます。



2017/3/1
取り急ぎ、X1センターの佐藤様より頂いたパッチを取り込みました。
(まことにありがとうございます、何時もお世話になっております。>佐藤様)
通常、I/Oポートの1ExxHをwriteすることで、0000H-7FFFHにあるROMを切り離しますが、
readでも切り離せるようにするというものです。
ブレインブレーカーが動作するようになっているかと思います。

全機種共通で、デバッガに<コマンドを追加しました。
ファイルから複数のコマンドを読み込んで実行することができます。



2016/3/17
ePCEngineについて、イースIIIのADPCMの再生の問題を修正しました。
CD-ROMからADPCMバッファにDMA転送しながら再生することで、長い音声を再生しています。
DMA転送が、ADPCMの再生位置を追い抜かしてバッファを破壊しないようにするのと、
転送されたデータが全て再生されるまで、バッファをループするように修正しました。

また、サウンドのサンプルレートに44100/22050/11025Hzを指定した場合に特化して、
CD-DAの再生の処理の負荷を軽減しました。
ePCEngineに限定して、デフォルトのサンプルレートを44100Hzにするようにしています。



2016/3/16
eFMR-30eFMR-50でSCSIバスを実装しましたので、折角だからePCEngineにCD-ROM^2を実装してみました。
基本的には、MAME/MESSのTG16ドライバをベースに、一部Ootakeの実装を参照させて頂いています。


CD-ROMイメージとしては、BIN/IMG+CUE形式か、CloneCDのIMG+CCD形式に対応しています。
実CD-ROMの直接起動は今のところサポートしていません。

大体動いている感じですが、イースIIIの長いADPCMの再生に問題が残っています。
ePCEngineについては余り作業のプライオリティを上げるつもりはありませんが、この問題は修正する予定です。


個人的には、the Manholeが動くようになったので大満足です。
中学生の頃、ほぼこれの為にPCエンジンを購入した口です。

ePC-8801MAにも追加しようと思えば出来るんですが、如何せんソフトがね(苦笑)



2016/1/10
漢字サーマルプリンタ MZ-1P17をサポートしました。



2015/12/9
X1turboのキーボードのモードBにおいて、かなキーが50音配列になっていなかったのを修正しました。
ただし、ペースト機能を使う場合は、モードAを選択してください。



2015/9/17
1行のラスターが8または16より大きいとき、行間にゴミが表示される不具合を修正しました。
ご指摘ありがとうございます>Oh!石様



2015/8/13
HuC6280のデバッガをサポートしました。 eX1twinとePC-Engineで、PC-Engineのデバッグが可能になっています。



2015/8/8
MB8877の再現性が向上したため、アルファ実行時の例外処理を削除しました。
オープニングデモの、クリスが銃を撃つシーンで、SEが2重に再生する問題が再発していますが、
少なくとも画面が化けるなどの問題は発生しなくなっています。



2015/3/12
データレコーダの早送り、巻き戻し、APSSの頭出しをメニューから実行できるようにしました。
また、各機種共通で、データレコーダのセーブ・ロード中に、テープの音を再生できるようにしました。
ただし、テープの音を再生する場合は、フレームスキップが無効になります。



2015/1/24-2
1/19版から、D88形式のイメージに対して、変更内容が保存できない不具合のみ修正したバイナリを、
こちらにアップしました。
ステートセーブの互換性が維持されていますので、以前の版のステートセーブがありましたら、
こちらでステートを読み込んで、ディスクイメージに保存してください。



2015/1/24
ディスク周りの不具合を色々修正しました。
X1シリーズのみ、ステートセーブの互換性が無くなってしますのでご注意ください。

ブート時のドライブのタイプを、2D/2HDから選択するディップスイッチをサポートしました。

MB8877について、アンフォーマット時にREC NOT FOUNDが返らない問題を修正しました。
2013/8/24の、ばってんタヌキの大冒険のための修正が誤爆していたようです。
ばってんタヌキのディスクが刺さっているときのみ、上記修正が有効になるよう変更しています。

全機種共通で、D88形式のイメージに対して、変更内容が保存できない場合がある不具合を修正しました。
2015/1/14からこの問題が発生していたようです、ご迷惑おかけして申し訳ございません。

根本的な原因は、複数のディスクイメージを接続したD88形式のファイルから一覧を取得する際に、
読み込みモードでファイルを開いたまま、閉じ忘れていたことです。
ただ、従来はファイルを開くのにfopen()を使っていましたので、読み込みモードで開いたままでも
読み書きモードでファイルを開くことができたため、問題が顕在化していませんでした。
2015/1/14の修正で、fopen_s()を使うようにしたところ、読み込みモードでロックされてしまい、
書き込みモードでファイルを開くのに失敗する場合があったようです。

ファイルを閉じ忘れていたのを修正した上で、fopen_s()をfopen()に戻しました。
また、読み書きモードで既存のファイルを開くのに失敗した場合、変更内容が失われないように、
テンポラリなファイル名で変更内容を保存するようにしました。



2015/1/19
EmuZ-2500と同様に、Z80SIO周りを修正しました。
Z80CTCの出力を、Z80SIOの送受信クロックとして供給するようにしています。



2014/12/25
eX1/eX1twin/eX1turboについても、ステートセーブに対応しました。
また、サウンドデバイスの種類を変更した後、リセットすることですぐ反映するようにしました。



2014/12/18
ePC-Engineにおいて、ステートセーブに対応しました。
デバイス数が少ないため、ステートセーブの実装テストに丁度良かったので(を
今後、他の機種にも横展開していきます。

ステートセーブのファイルですが、イメージを含んでいるため、配布は絶対にしないでください。
また、今後頻繁にフォーマットが変わる可能性があります。
あくまで、今その時のビルドに対してのみ有効なファイルであるとお考えください。



2014/11/28

ハイレゾで32ラスタ/CHR時のテキスト画面の表示の不具合を修正しました。



2013/12/31
プリンタポートへの出力を、ファイルに保存するようにしました。
要領は、PC-8801/9801と同じです。



2013/8/24

ばってんタヌキの大冒険が起動しない不具合を修正しました。

EMMが存在する場合、起動時にディスクを丸ごとEMMに読み込むようになっています。
このとき、セクタ番号1から順に読んでいくのですが、このソフトのトラック0が、
セクタ番号2〜14が存在しないという変則的なフォーマットになっていまして。
当然、セクタ番号2のセクタが見つからず、ステータスにREC NOT FOUNDが返るのですが、
それだと次のセクタを読みに行かず、延々セクタ番号2のセクタを探し続けてしまい、
最終的にエラーを表示して止まってしまっていました。

セクタ番号2のセクタを探しに行く直前に、ドライブレジスタを叩いていたので、
取り敢えず、ドライブレジスタを弄った後、最初にセクタが見つかるまでは、
REC NOT FOUNDを返さないように修正しましたが、こんな修正でいいのかなあ。


ZENONで、スペースキーを押してもゲームがスタートしない不具合を修正しました。
キーを押してサブCPUからZ80に割り込み要求があったときに、このソフトの場合、
Z80で割り込みを発生させずに、ベクタとキー情報を読みに来るようになっています。
このとき、従来の擬似サブCPUの実装では、次の割込みが発生しなくなってしまっていました。
割り込みへの応答でなくても、サブCPUからデータを受信したら、割り込み状態を解除するように
修正することで解決しています。

その他、X1turboのハイレゾ設定で、X1のソフトを起動した場合に、水平周波数24KHzのまま、
CRTCの設定だけ変更してしまい、画面のFPSがおかしな値になってしまう問題を修正したのと、
Direct3D9使用時に、アクセスランプの描画がうまくいっていなかった問題を修正しています。



2013/8/21
先日の修正の副作用で、Yaksaのメーカロゴが崩れて表示される不具合を修正しました。

ディスクアクセスの速度調整、なかなか収束しないなあ。
結局志の低い実装に逆戻りしちゃったけど、色々なデバイスのタイミング調整を進めれば、
最終的には理論的に正しい実装でちゃんと動いてくれる筈…だといいんですが(苦笑)



2013/8/16
最近の修正の副作用で動かなくなったソフトの対策を行いました。

スキューファクターが1である(セクタの並びがセクタ番号順である)場合のみ、
目的のセクターが見つかるまでの時間を固定値にするようにしました。
ただしアークスについては、ディスクの回転数に応じた時間が掛かるようになっています。

D'のため、Z80DMAの転送停止条件を変更した結果、影の伝説が動かなくなったのを修正しました。



2013/8/10

テープ版のWorryが動作しない問題を解決しました。

Worryは多段ロードになっていますが、1段目をロードした後、ちょっと巻き戻して、
それから2段目以降をロードするようになっています。
従来は、TAP形式のイメージでは、いきなり先頭まで戻ってしまう仕様だったため、
2段目以降のロードがうまくいってなかったようです。

また、APSSをサポートしました。
サポートしたと思います。
すみません、明日から帰省のためテストできてないです、多分動きます(苦笑)



2013/8/9

X1turboでローグアライアンスが起動しない不具合を修正しました。
従来の実装では、Z80DMAのリセットコマンドで、全レジスタをクリアしてしまっていたため、
転送元・先の設定が失われて、FDC→メモリでなくメモリ→メモリに転送をしていたのが原因でした。

ローグアライアンスが動くようになったついでに、マウスのサポートを追加しました。
X1/X1twinについても、CZ-8BM2を実装してマウスをつなげています。
…というか、何で実装してなかったんだっけ?(苦笑)



2013/8/8

アルファのオープニングデモの、クリスが銃を撃つシーンにおいて、ディスクの読み込みが遅いため、
SEが2重に再生されるというご報告をいただきました。

先日の修正で、トラック上のセクタの位置から、セクタを発見するのに掛かる時間を算出するようにしましたが、
これは、トラック上のセクタの並び順が正しく得られることが前提となります。
D88形式では問題ありませんが、2D形式などのベタイメージでは、セクタの並び順の情報が失われているため、
IDのRの順番に従ってセクタを配置するようになっています。

あるセクタを読んで、次のセクタを読むようにFDC/DMAを操作している間も、ディスクは回転し続けていて、
次のセクタを通り過ぎてしまう場合があります。
この場合、次のセクタを発見するまで、ディスクが1回転するまで待機することになります。

このように、セクタの並び順が正しくないと、アクセス速度を正しく再現できません。
そのため、べたイメージを読み込んだ場合は、セクタを発見する時間に固定値を使うようデグレしました。
2D形式をD88形式に変換したイメージだと、結局タイミングが合わないままとなりますのでご注意ください。


同じくアルファのゲーム画面で、右上のCGが化ける不具合を修正しました。
詳細に調査していませんが、どうもディスクの読み込み中も、平行して何かしらの作業をやっていて、
そちらが終わると、まだディスクの読み込みが終わって無くても、DMAをリセットして転送を打ち切るようです。
従来は、ディスクの読み書きがノーウェイトだったため、それでも特に問題ありませんでした。

例えばMB8877のコマンドの応答時間など、他のタイミングの問題だとは思いますが、現時点での仮対応として、
アルファ限定で、ディスクの転送速度を速くすることで誤魔化すようにしました。


X1turboでD'の起動に失敗する不具合を修正しました。
Z80DMAの転送終了の判定の問題で、最後の1バイトを転送しないまま、FDCでLOST DATAになっていました。


DOMEでOPMを認識しない不具合を修正しました。
DOMEのOPMの存在チェックは、何かデータを書き込んで、BUSYフラグが立つかで判定しています。
しかし、従来の実装では常にBUSYフラグが立たないため、OPMの存在チェックに失敗していたようです。


16ラスタ/CHR時のテキスト画面の表示の不具合を修正しました。
CZ-8FB02/CZ-8FB03の12行表示時に画面が化ける問題が解決しています。


ローレゾ時の漢字の表示の不具合を修正しました。
ルナシティーで、漢字のメッセージが化ける問題が解決しています。



2013/8/1
X1センターの佐藤様にご協力いただきまして、VRAMのウェイト処理を実装しました。
VRAMのウェイトは、CPUのクロックとビデオ回路のクロックの位相差から決定されるとのことで、
15KHz/24KHz, 200ライン/400ラインごとにテーブルを用意することで対応しました。

また、今回はMB8877のタイミングを徹底的に修正しました。
ディスクの回転速度とデータ密度から、現在ヘッドがディスクのどこにいるのかを管理することで、
対象のセクタを発見するまでの時間、データ転送、インデックスホールの検出など、
フロッピードライブの物理的な動作に起因するタイミングを、高精度で再現できているかと思います。

Z80DMAについても、バスのリクエストと開放、データ転送に掛かるクロック数を再現したり、
Z80側でも、バスを開放しているクロック数だけ、CPUを空転させる処理を追加したりしています。

その他、フロッピードライブのモータをオン・オフする処理を実装しました。
モータが始動して回転が安定するまで、また実際にモータが停止するまでの待ち時間も考慮しています。


この結果、アークスのオープニングの途中で暴走する不具合が修正されました。
従来はパッチで誤魔化してましたが、素でちゃんと動作するようになっています。


テキストアトリビュートの色反転の処理を修正しました。

#ご指摘多謝です。>Enriさん
#細かいところまで見ていただいて、色々助かっております。

今回、おまけでX1の単体バイナリを用意しました。
#ifdefで、ちゃんと機種ごとの処理の区分けが出来てるかの確認の副産物とも言います(苦笑)



2013/7/25
X1センターの第1章CRTC(暫定稿)を参考に、テキストの縦倍・横倍表示の実装を修正しました。
- 横倍角の文字は、偶数桁から書き始めなければならない。
- 縦倍角の文字は、水平方向には縦倍角ではない文字と混在できない。
という制約を破った場合の表示の乱れも、それなりに再現できるようになったかと思います。

内部的に、VRAMアクセス時のウェイトの実装の準備を進めています。
X1turboのARCUSのタイミング問題があるので、実際の導入はまだまだ時間が必要になりそうです。



2013/7/23
実機から吸い出したサブCPUの内蔵ROMを使用したときの問題の修正を行いました。
非X1turboなサブCPUを使用している場合にカセットの検出に失敗する件や、
X1turboにX1仕様のキーボードが繋がったときに入力できない問題を修正しました。
また、80C48のクロック管理の問題から、キーリピートが速くなっていた件を修正しました。

擬似サブCPUを使用する場合も、キーリピートの速さが内蔵ROM使用時にあわせて調整しています。



2013/5/11
X1センターの佐藤様にご協力いただきまして、サブCPU周りの改良を行いました。

従来のX1エミュレータでは、Z80から見たサブCPUの挙動のみを再現する実装になっていましたが、
サブCPUや周辺回路のハードウェア構成を、出来る限り忠実に表現するような実装をしてみました。
ちゃんとサブCPUやキーボードを、CPUレベルからガチンコでエミュレーションしています。
このために、コモンソースコードプロジェクト側で、8255のモード1,2の実装を大幅に修正しました。
他機種に悪影響が出ているかもしれませんので、不具合を発見されましたらご連絡お願いいたします。

これで、何か今まで動かなかったソフトが動くようになったかというと、それはまだ未検証ですが(苦笑)
こういった拘りも、また浪漫ですよね。

サブCPU、キーボードの内蔵ROMが無い場合は、従来通りのサブCPUの実装で動作するようになっています。
ついでに、キーボードのリピート入力のタイミングを、実際のものにあわせて修正しています。

その他、テキスト画面の文字縦2倍表示の不具合を修正しました。
X1のデモディスクで、文字が分裂してしまっていたのが解決しているかと思います。
また、X1turboの24KHzモニタモードで、古いソフトのPCG定義に失敗する問題を修正しました。



2013/2/7
MZ-2500用にコモンソースコードプロジェクト側でデータレコーダを修正したのにあわせて、
X1のサブCPUの各種コマンドのうち、カセット関係のコマンドを修正しました。
カセットの早送りや巻き戻しをサポートしています。
APSS(頭出し)コマンドについては、現在対応を検討中です。

また、時間変更後に、タイマを更新するためのイベントを再起動するように修正しました。
時間変更後、正確に1秒後からタイマがインクリメントされるようになっています。
(他機種のRTCについても、同様の修正を行っています)



2013/1/23
X1turboのアークスの不具合の件は、モード2の割込みの消費クロック数が原因でした。
MAME 0.145ベースのZ80コアに戻した上で、上記クロック数だけ調整しています。
他のデバイスのタイミングにも絡む問題で、必ずしもCPUだけの問題ではありませんので、
余り筋のいい修正ではないのですが…

PCエンジンで、SuperGrafx機能は、対応ソフトを実行時のみ有効となるように修正しました。
SuperGrafxでは正常動作しないソフトがあるかもしれないので、念のため。

以下、主にコモンソースコードプロジェクト側の修正です。

X1に限らず、RTCを搭載している全機種について、カレンダの扱いを変更しました。
従来は、常にホスト側の日時を返すようになっていましたが、
起動時にホスト側の日時に同期して、以後仮想マシン側で更新するように変更しています。

この結果、仮想マシンが一時停止したときに、ホスト側の日時とずれてしまいますが、
仮想マシン内の時間の流れから見て、突然カレンダが飛んでしまったりしなくなりました。
また、仮想マシン内でカレンダの値を変更することが出来るようになっています。

ついでに他機種ですが、PC-100でカレンダが機能していなかったのを修正したり、
初期のPC-9801で、起動時にメモリスイッチの年情報をホスト側に同期する処理を入れました。
(初期の98は、年情報のないuPC1990Aを使用しており、年情報はメモリスイッチで保持しています)

winmain側で、ファイルのドラッグ&ドロップに対応しました。
フロッピーディスク、クイックディスク、カートリッジのイメージをウィンドウにドロップすると、
最初のドライブまたはスロットに、そのイメージが挿入されます。



2013/1/18
アークスが、タイトルデモの途中で止まってしまう不具合を修正しました。
Z80コアをMAME 0.145ベースで再実装したのが原因だったようです。
具体的に何が問題なのかはまだ分かりませんが、取り敢えずそれ以前のコアに戻して様子をみます。



2012/12/29

せっかくだから、PCエンジン部分の単体バイナリを用意してみました。
ついでにスーパーグラフィックス対応もしています。
まあ、自分がガンヘッドをプレイするとき専用ですね(苦笑)

スーパーグラフィックス対応といいつつ、アイコンはPCKD863Gだったりします。
元々、X1twin用に実装したのがスタートですし、丁度いいかなーと(を



2012/10/23

久しぶりに、X1twinのPCエンジン部分を更新しました。
HuC6280, VDC, カートリッジのミラーリングを、MESS 0.147ベースで再実装しました。
これで漸く、念願のガンヘッドが動作するようになりました。
PCエンジン部分については、ひとまずこれで完了ですね。



2011/8/6
8255のI/Oポートの割り当てを修正しました。
ご指摘有難うございます>X1cetnerの管理人様

デバッグビルドしたバイナリが正常に動作しない問題を修正しました。
バイナリリリースには関係ありませんが、ソースを弄る必要のある方はご確認ください。

コモンソース側の修正になりますが、各ドライブのアクセスランプの表示のための処理を、
各機種のVMからWin32側に移動しました。
ウィンドウサイズによらず常に6x6ドットで表示される他、ビデオ出力時に、アクセスランプが
録画されないようになっています。



2011/5/28
更に前回に引き続き、Y.S.さんからZ80DMAとMB8877の修正情報を頂きました。
影の伝説などで生じていた問題が解決しています。
いつも本当にありがとうございます。m(_ _)m



2011/5/20

前回に引き続き、Y.S.さんからZ80DMAのパッチを頂きました。
アルファなど、幾つかのソフトが動作するようになっているかと思います。

今回の修正で、DMAのシングルモード(BYTEモード)をサポートしています。
従来の実装では、DMA転送は一瞬で終わっていたのに対して、CPUを回しながら1バイトずつ
転送することができるようになりました。
Z80DMAのみでなく、i8237/uPD71071と、それらを使用している一部機種にも横展開しています。
機種によっては却って動かなくなってしまう例がありますので、その辺は要調査です。

また、ご要望により、サウンドバッファ長に50msecを指定できるようにしました。
コモンソース側の修正ですので、サウンドを使用する全機種共通です。
ここまで短いと、2〜3フレームの間にバッファの更新が必要ですので、ちょっときついですね。



2011/5/19

Z80DMAの実装について、Y.S.さんからお送りいただいたパッチを適用しました。
ゼリアードの表示上の問題が解決している他、光栄の青き狼turboが起動するようになっています。

HD46505の実装を修正して、BLANK/SYNC信号の生成タイミングの高精度化を図りました。
従来の実装では、イベントマネージャから呼び出されるスキャンラインイベントを用いることで、
これらの信号を発生させていました。
しかし、スキャンラインイベントの1フレーム辺りの発生回数は#defineで定義しているため、
X1turboで15KHz/24KHzを切り替えて、CRTCの設定上でスキャンライン数が変更された場合に、
これらの信号が正しく発生できなくなる問題がありました。
そのため、X1のディスプレイクラス側で代わりに信号を発生させるなどの誤魔化しをしていましたが、
今回の修正で、CRTC側でより正確なタイミングで信号を供給できるようになっています。

#PC/JXの方で高解像モードの対応をしていたときに、VBLANKが発生しなくて気付きました(苦笑)



2011/5/14
今回も、個々のソフトの不具合対応が中心です。
例によって、Y.S.さんに多大なご協力を頂いております。


今夜も朝までパワフルまあじゃんが動作するようになりました。
Z80DMAで、転送長に0が指定された場合の挙動の問題だったようです。

影の伝説と両立させるのが困難でしたが、処理を切り替えることで誤魔化しています。
対応としてはちょっとダサいので、将来的に何とかしたいところですが。


ゼリアードの起動時のメーカロゴで、ちょっと引っかかる問題が解決しました。
賢者の遺言のFM音源の判定処理の問題のために、Z80CTCの実装を弄ったのが原因でした。
カウントを一時停止したときに、タイムコンスタントをクリアしないように再修正しています。


PCGや漢字ROMに高速アクセスする際のウェイトを再調整しました。
15KHz時に、ソーサリアンユーティリティでお便りを読むときの音楽のテンポが改善されています。

24KHzの解像度モードでは、漢字VRAMにコードを書き込むだけで漢字を表示することが出来ますが、
15KHz時には、漢字ROMからパターンを読み込んで、グラフィック画面に転送する必要があります。
このときも、同時進行で音楽を演奏していますので、漢字ROMをアクセスする際のウェイトが、
音楽のテンポに大いに影響するようです。
今回の実装では、次のラスターまでCPUを停止するようにしていますが、まだテンポが速いようです。

その他、ザナドゥ向けにキーリピートのタイミングを再調整しました。
以前にも調整しましたが、その後のサブCPUの改良でまた操作感がおかしくなっていたようです。



2011/5/4
eX1turboにおいて、HIGH/STANDARDを指定するディップスイッチをサポートしました。
200ライン用ソフトで、画面が乱れる場合は、STANDARDを選択してみてください。

また、影の伝説やアークスが動作しなくなっていたのを修正しています。



2011/4/27

PCGアクセス時の、VRAMアドレスの取得方法を修正しました。
めぞん一刻 思い出のフォトグラフで、半角文字が化ける問題が修正されています。

X1では、PCGや漢字ROMにアクセスする際、CRTCが現在参照しているしているVRAMの内容から、
実際にアクセスされるPCGや漢字ROMの文字コードが決定されます。
エミュレータでも、CPU内時間から、CRTCがアクセスしているVRAMのアドレスを算出します。

今回の修正で、I/Oポートの1A*1hのアクセスを監視して、CPUがVBLANKを検出した時点からの
CPU内の経過時間を取得することで、より安定してVRAMのアドレスを算出するようになりました。
X1turboのハイレゾモードにも対応しています。
ただ、X1turboだと高速PCGアクセスモードがあるので、余り意味はないかもしれませんね。

この修正に関係して、コモンソースの方で、CPU内時間の取得の高精度化を図っています。
他の機種で、何か悪影響が出ているようでしたらご連絡いただけますと幸いです。



2011/4/25
今回は、コモンソース側のデバイス修正が中心です。


Z80CTCを色々と修正した結果、アークスが先日のパッチ抜きで動作するようになりました。
割り込み実行中に更にカウントが0に達しても、RETI直後に割り込まないようにしたり、
割り込み無効にした場合、ペンディング中の割り込みを取り消すように修正しています。

また、MB8877で、シークコマンドを実行後、最初のREAD/WRITEコマンドを実行した際に、
指定したセクタを発見するまでの待ち時間を100msecに伸ばしています。
この結果、WOLF TEAMのメーカロゴがスクロールする所で化けないようになりました。


Z80CTCで、ソフトウェアリセットの実行後、最初にタイムコンスタントを設定した際に、
(コントロールレジスタのbit1が0でも)直ぐにカウンタに値をコピーするようにしました。
賢者の遺言で、FM音源の存在判定に失敗する問題が修正されています。



2011/4/23

イース2が動作するようになりました。
FDCのIRQ/DRQ信号の挙動を変更したのと、Z80DMAの終了判定を修正しています。
今回もY.S.さんに御調査いただきました。いつもありがとうございます。


アークスを無理やり動くようにしてみました。

Z80CTCで割り込みが発生して、RETIで戻る前にまた割り込み条件が成立してしまって、
連続的に割り込んでしまっていたのがフリーズしていた原因だったのですが、
そこを抜けても、何故かディスク5を入れろとメッセージが出て、そのまま暴走してしまって。

どうもタイトル画面で割り込むことが暴走の原因になってしまっていますので、
アークス限定で、タイトル画面中は割り込みが発生しないようなパッチを仕込んでみました。
ちゃんと正攻法で動作するように修正できたら、このパッチは廃止します。

その他、黒変換レジスタにおける文字色の扱いや、文字色に0が師弟されたのときの描画処理、
ハイレゾモードにおける縦2倍の描画処理を修正しました。
アークスのタイトルで、右からARCUSって流れる部分の表示が乱れなくなっています。



2011/4/15

フロッピードライブの2D/2HDの切り替えをサポートしました。
従来は、ドライブとフロッピーディスクの種類(2D/2DD/2HDなど)をしていなかったため、
2Dのつもりで2HDのディスクを読み込み始めて、それで暴走してしまっていたようです。

今回、フロッピードライブの方で、ドライブの種類を管理、変更できるようにしました。
これによって、ドライブとディスクが一致しない場合、エラーを返すようになっています。
ドライブの切り替えは、今後他機種にも横展開していく予定です。

また、2HDのブート時に、Z80DMAにブロックサイズとして0000Hを指定しています。
ブロックサイズに指定した値+1が転送されるサイズとなります。
その割りに、先頭何バイトか転送されて、FDCでLOST DATAとならないことを期待しています。
だからといって、LOST DATAを起こさないようにすると、影の伝説が動かなくなったり。

仕方がないので、Z80DMAにおいて、ブロックサイズに0000Hが指定されたときに、
実際に転送されるサイズを変更できるようにすることで対応しました。
何だか志の低い対応になっちゃって、不満が残るところです(苦笑)


ディップスイッチは2D固定なので、ドライブ番号の指定後、2HDを選択してください。
後日、ハイレゾ設定もあわせて、ディップスイッチの設定も出来るようにします。



2011/4/14
今回は細かい箇所の修正が中心です。


キーボード周りの修正を行いました。
まず、XFERのキーコードが間違っていたのを修正しました。
Wizardlyのキャラ作成時に、漢字の入力が出来るようになっています。


X1turboで、他にキーが押されていないときに、SHIFTキーやCAPSキーなどが押された場合に、
割り込みが発生するようにしました。
また、サブCPUのコマンド$E6でキーコードを読み込むときに、SHIFTキーやCAPSキーなどの状態を、
バッファに格納された時点でなく、読み込んだ時点での状態に更新するようにしました。
ソーサリアンで、CAPSキーを押したときに、ステータスウィンドウが開くようになっています。

この辺りの挙動は、
10 PRINT HEX$(ASC(INKEY$(2)))
20 GOTO 10
こんな感じのプログラムを実行すると、X1とX1turboの違いが判りやすいかと思います。


NRTDRV用に、CZ-8BS1を2枚搭載できるようにしました。
Z80CTCとOPMのインスタンスを追加で生成して、アドレスと結線の設定をするだけです。
こういうとき、C++で開発してて良かったなと思います。

その他、画面生成時に、黒色制御レジスタの状態を反映するようにしました。
スーパーインポーズ位しか使わないと思って放ってました(苦笑)



2011/4/13
昨日更新してから3時間程しか経っていませんが(苦笑)


影の伝説で、背景が崩れる問題を修正しました。
Z80DMAで、転送元・転送先のアドレスの増減値の実装を修正しています。

MAME/MESSdevのKaleさんから、BLOGの方でご指摘いただきました。有難うございます。
(最近MAME/MESSの方でも同じ修正をされたそうです)



2011/4/12

以前から少しずつ作業していましたが、X1turboを正式にサポートしました。
X1turboなので、PC-Engine部分は含まれていません。

Z80DMAはMAMEの実装をベースにさせて頂きました。
漢字ROM/PCGの操作関係は、KMさんのX1EMUの実装を参考にさせて頂きました。
また、8x16のANKフォントのパッチ用データを、Xmilleniumから持ってきています。
どうもありがとうございます。


Z80DMAは、主に2HDのディスクの内容を、FDCからRAMに転送するのに使用されています。
しかしYs3では、VRAMからVRAMにデータを転送するのにもDMAを使用しているようです。
このとき、FDCからDRQが送信されませんが、READYをActiveLowからActiveHighにすることで、
READYがHighのままDMA転送をしていました。
このことに中々気付かなくて、数日ほど行き詰ってました(苦笑)

なお、X1turboでは、画面の水平周期が15.98KHz/24.86KHzに切り替わるようになっています。
しかし現在の実装では、タイミング関係の値は#defineで宣言しており、動的に変更できません。
そのため、現状では15.98KHzのときのタイミングで動作するようになっています。
(X1用ソフトを動かすときに、PCGの設定は15.98KHzのタイミング依存になりますので)
他機種にも同じような問題がありますし、将来的には何とかしたいですね。

また、eX1twinでCAPS LOCKキーが反応しなくなっていた不具合を修正しました。
これは先日行った、Xanaduのためのキー入力の修正の副作用です。
仮想マシン側でキーリピートを管理するため、Win32側からキーコードが送信されてきたとき、
リピートされたキーは無視するようになっています。
しかし、CAPS LOCKについては、最初に押された時点から既にリピート扱いになっていたようで、
CAPS LOCKの入力を完全に無視してしまう結果となっていました。

その他、ディスクを抜いたときに、ディスクの内容に変更が加えられなかった場合は、
ディスクイメージにデータを書き戻さないようにしました。
これはコモンソース側の修正ですので、全てのエミュレータで同様の仕様になっています。



2011/4/6
FM音源の有効・無効を切り替える機能をサポートしました。
まじゃべんちゃーのように、FM音源が有効な場合に動作しないソフトがありましたら、
Sound - PSGを選択してみてください。
なお、この設定は次回起動時に反映されますのでご注意ください。

Hu-BASICにおいて、カーソルが点滅しない問題を修正しました。
Hu-BASICでは、スペースを反転&ブリンクにすることでカーソルを表示していますが、
従来のブリンク時に色を黒にする実装では、スペースのようにドットが存在しない場合は、
表示結果にまったく影響していなかったのが原因です。

コモンソースの方で、べた形式のディスクイメージの読み込みをサポートしました。
X1エミュレータの2D形式や、PC-9801エミュレータのFDI/TFD形式などに対応しています。
ファイルの書き出し時には、D88形式で保存されます。

X1turboのサポートのために、コードの整理を進めています。
メモリや画面生成処理を大幅に弄っていますので、何かエンバグしてるかもしれません。
これまで動いていたソフトが動かなくなった場合は、ご連絡いただけますと幸いです。



2011/4/2
スーパーレイドックで、キー操作が出来なくなる不具合を修正しました。
サブCPUのIRQ操作の問題でした。

また、昨日のステレオ対応で、PC-Engine部分がエンバグしてたのを修正しました。
確認不足でした、申し訳ないです。



2011/4/1
引き続き、X1twinの仕様にない機能の実装を進めています。
最終的にはTURBOの仕様まで拡張する予定です。


データレコーダをサポートしました。
wavファイルの他、一般的なX1エミュレータで使用されるTAP形式のファイルも読み込み可能です。
また、wavファイルの読み込みについては、従来は8bit/mono/48KHzのものに制限されていましたが、
PCM形式であれば、任意のファイルが読み込めるよう修正しました。
こちらについてはコモンソース側の修正なので、他機種でも同様の仕様となっています。

サブCPUのCMTコントロールコマンドについては、APSSと早送り以外は一通り実装しています。
APSSについては実装方法を検討中ですが、ちょっと面倒かもしれません。


キングスナイトが、FM音源の存在判定の問題で、起動しなくなっていたのを修正しました。
これは、OPMが割り当てられている、I/Oの0700Hを読み込んだときの値の問題でした。
また、メモリ空間の0000H-7FFFHにIPL ROMが割り当てられた場合に、1000HごとにROMのミラーが
現れるように修正しました。
こちらでは確認できていませんが、抜忍伝説のX1/TURBOのハードウェア判定に係わるようです。

これらの問題はY.S.さんにご調査いただきました。多謝多謝。
その他に、512KBのEMMを実装しています。

コモンソース側で、サウンドをステレオで再生するように修正しました。
Win32側のDirectSoundの実装、イベント管理クラスの他、各音源チップのmixの処理を修正しています。
X1ではOPM音源が乗っていますので、ステレオ対応の効果が判りやすいかと思います。



2011/2/16
ザナドゥ向けに、キー入力周りを色々修正しました。
動作確認のときは、@Yoshio.Kiya@を使うと便利だなー(笑)


加速ジャンプが出来るようになりました。
キーリピートのフラグを立てるようにしたのと、仮想マシン側でキーリピートを発生するように修正しました。
このために、Win32側から仮想マシンにキー入力をnotifyする際に、キーリピートかどうかを渡すようにしています。


SHIFT移動が出来るようになりました。
Windowsでは、SHIFTとテンキーを同時に押すと、勝手にSHIFTなしのカーソル入力に変換されてしまうのですが、
これを仮想マシン側でSHIFT+テンキーと解釈するようにしています。

また、サブCPUのキー入力周りのコマンドを修正しました。
キーバッファが空になっても、最後のキーが離されるまでは、そのキーの状態を返すようにしています。


スキャンライン単位で画面のレンダリングを行うようにしました。
X1Fのデモディスクで、冒頭のカラーバーのアニメーションが表示されるようになっています。

その他、FM音源ボードの実装を行いました。
これまでX1twinの仕様にない機能の実装は避けていましたが、X1エミュレータとして実用的なものとなるように、
一通りの機能は実装していこうかと考えています。
次はEMMとデータレコーダのサポートでしょうか…元々はエイプリルフールの一発ネタだったのにねえ(苦笑)



2011/1/26

ウィバーンで、PCGの定義に失敗する不具合を修正しました。
PCGにアクセスするタイミングに依存する問題ですが、R/G/Bの各プレーンにデータを書き込む間、
出来るだけ同じPCGのアドレスにアクセスするように調整しています。


DAIVAで、キー入力を受け付けなくなる不具合を修正しました。
コマンドの処理後、キー割り込みが発生する前に次のコマンドが発行されていましたので、
コマンドの処理後にすぐ割り込みを発生するように修正しました。

その他、コマンドの処理時間の修正や、キー読み込み時のバッファの扱いなどを修正しています。
キー入力絡みの問題は、これで大体解決ついているのではないかと思います。
(ご協力ありがとうございます>Y.S.さん)

その他、コモンソース側で、画面のキャプチャ機能を実装しました。
メニューから、Screen - Captureを選択すると、画面がBMP形式で保存されます。



2011/1/21
今回は、画面周りやサブPCUを中心に、大幅に更新しています。
X1センターさんの、試験に出ないX1の記述を大いに参考にさせて頂きました。
また、某スレやBLOGのコメントで色々不具合のご指摘を頂きました。
ご協力ありがとうございます>各位


デモディスクで、文字・PCGの縦2倍表示に問題があったのを修正しました。
上下のラインて、文字コード、アトリビュートが一致しているかを確認することで、
上半分か下半分かを判定するようにしています。
回路的に正しい実装かというと微妙ですが、こうでもしないと正しく表示できなくて(苦笑)


スーパーレイドックで、PCGの定義がうまくいかない不具合を修正しました。
また、グラフィック画面の描画処理で、CRTCの垂直表示文字数の設定を参照するようにしました。
ゲーム開始時のアニメーションデモが正しく表示されるようになっています。

サブCPU周りでは、キー割り込みの発生タイミングや、IBF/OBFの挙動を修正しました。
また、RETIでなくRETで割り込みルーチンから復帰した場合の不具合を修正しました。
キーを受け付けなくなるソフトのうち、幾つかは動くようになっているかと思います。
ついでにCAPSロックの処理がおかしかったのも修正しています。

その他、フロッピードライブについて、モーターを回しっ放しにするようにしました。
モーターが停止していても、FDCのコマンドが発行されると勝手にモーターを始動することで、
NOT READYにならないようになっているそうです。
この修正は、この辺の挙動の再現をちゃんとするまでの、暫定的な対応とします。

また、IPL ROMが選択されている場合、M1サイクルに1ウェイト入れるようにしました。

コモンソース側の修正ですが、Z80コアにディスアセンブラを追加しました。
外部からリクエストがあると、そこから16ステップだけ、実行したニーモニックをログに出力します。
現在は、MZ-2500とX1において、MB8877のステータスをリードするのがトリガーとなっています。
src/emu.h内で、有効・無効を切り替えるようになっていますので、必要に応じてビルドしてください。



2011/1/16

CRTCで、1行のラスタ数を8以下に、表示行数を25以上にした場合の描画処理を修正しました。
電波新聞社のXEVIOUSが正しく描画されるようになっています。

また、サブCPUで時間を取得する際に、10の桁をシフトしてなかったのを修正しています。
随分以前にBLOGの方でご指摘頂いていたのですが、すっかり忘れてました、申し訳ない。



2010/8/27
X1側の実装の修正中です。


サブCPUで、キーが離されたときにキーコードが発生しない不具合を修正しました。
例えば、ねぎ麻雀でゲームが開始できない不具合が修正されています。


テキスト画面で、縦倍表示をサポートしました。
X1Cのデモで、Personal Computer TVと表示されている箇所などです。
パレットのプライオリティレジスタで、テキスト色の扱いに問題があったのも修正しています。

ねぎ麻雀など、他のソフトでも問題なく動作するよう実装するのに苦労しました。
…だから、どうしてねぎ麻雀で確認するんだ(苦笑)



2009/5/17
更に某所でご指摘いただいたキーマトリックスの問題を修正しました。



2009/4/5
某所でご指摘いただいたキーマトリックスの問題を修正しました。



2009/4/1
エイプリルフールの1発ネタです。
1発ネタのためにどんだけ工数突っ込んだのかは考えない方向で(苦笑)


起動すると、X1G相当部分が動作します。
X1twinなので、データレコーダもFM音源ボードもなしです。
X1twinなので、Turbo以降の機能もなしです。
X1twinだけど、流石にフロッピードライブは1台増設しています。

サブCPU部分はX millenium T-tuneの実装を参考にさせて頂きました。
キー操作も、データレコーダ操作周り以外はX milleniumと同等になっています(多分)


HuCARDを読み込むと、HE-systemが動作します。
X1twinなので、CD-ROM^2とか天の声とかSGとかのサポートはなしです。
X1twinだけど、キーボード操作で6ボタンパッドは対応しています。

CPU, 6ボタンパッド, タイマはOotakeの実装を、
PSG, VDCはxpceの実装を、それぞれ参考にさせて頂きました。
6ボタンパッドのキー配列はMagic Engineの初期設定に合わせてあります。


HE-systemの動作中もX1Gは並行して動作しています。
X1G上で大戦略が長考に入ったときの暇つぶしにでも。

ストリートファイターII'とポピュラスが動作するところがみそです。
でも肝心のガンヘッドが動作しない…orz