歓迎光臨
"EmuZ-2500" - SHARP MZ-2500 emulator for Win32
"EmuZ-2500" is SHARP MZ-2500 emulator for Win32.
This software is under GNU GENERAL PUBLIC LICENSE.
These softwares require Windows 9x/2000/XP + DirectX 8.0, or Windows CE.NET 4.x.
(Tested on Windows XP SP2, DoCoMo sigmarion3 and PSION NetBookPro.)
Download: Jump to Common Source Code Project
Note: Mr.Tago provides the tools to create rom images in his website. (Japanese only)
EmuZ-2500 謎WIPページ
ROM吸出しは、たごさんが御自身のホームページ「アルゴの記憶」
で配布されている、「MZ-2500 シリーズ ROM 作成テスト版」をご使用ください。
EmuZ-2500の公認ツールです。
SuperMZディスクマガジン「星くずばこ」は、ほぼ全ての号のディスクイメージが
河野さんのサイトで公開されています。
2009/4/1
ジョイスティックの連射の処理を修正しました。
VSYNCに同期して連射するようになっています。
これである程度安定して連射できるようになっているかと思います。

2008/2/11
今回はコモンソースコードプロジェクトの方で、割り込み処理の大幅な見直しを行いました。
従来の割り込み処理は以下のようになっていました。
- 各デバイスは、CPUが割り込みを受付可能な場合のみ、割り込み要求と割り込みベクタの送出を行い、そのままin-service状態になる。
- 割り込み要求は、CPU内部で即時実行される。
- EI/RETI/RETNなどの命令で割り込み受付が可能になったとき、各デバイスに通知して保留中の割り込みを発生させる。
- Z80ファミリのデイジーチェーンは、割り込み調停とRETIの受付処理を行う擬似デバイス(Z80PIC)で実現する。
これは、CPU内部でオペコードの実行のたびにINT信号を監視することで、パフォーマンスが低下することを避けるためです。
理屈の上ではこれでちゃんと動作するのですが、最近になって以下のような問題が顕在化してきました。
- Z80ファミリを、Z80以外のCPUと組み合わせて使用する場合の処理がうまく実装できない。
- Z80SIO/uPD7201など、デバイス側のコマンドで割り込みを終了する処理がうまく実装できない。
- 割り込みタイミングに依存した不具合があるような気がする。
そこで、以下のように実際の回路と近い動作をするように、割り込み処理の大幅な見直しを行っています。
- 各デバイスは、任意のタイミングで割り込みを要求できる。
- CPUは、オペコードの実行のたびにINT信号の監視を行う。
- CPUが割り込みを受け付けると、割り込み元のデバイスにACK信号を送出して、割り込みベクタを受け取る。
- デバイス側は、CPUからのACK信号の受け取りでin-service状態になる。
- Z80ファミリのデイジーチェーンは、Z80ファミリの各デバイスのIEI/OEI信号によって実現する。
- Z80ファミリの各デバイスからのINT信号のwired-orは、Z80クラス内で処理する。
何だか益々回路シミュレータじみてきた気がします(苦笑)が、随分とすっきりした実装になりました。
心配していたパフォーマンス低下も大したことがなく一安心。
また、Z80SIOの実装の大幅な修正を行っています。
これは、Z80以外との組み合わせで使用するときに使用するレジスタやコマンドの挙動の修正が中心です。
Z80SIOとコードを共有する形でuPD7201の実装も行っていますが、これはQC-10のコモンソースプロジェクトへの統合の前振りです。
コモンソースプロジェクト側の修正を受けて、MZ-2500側の割り込み処理の見直しも行っています。
VSYNCおよびタイマの割り込み処理をエッジに戻して、要求自体はペンディングするようにすることで、割り込みタイミングに依存した不具合を一掃することが出来ました。
ちょうど1年前の2007/2/11に追加した動的パッチは不要になりましたので、今回削除しています。
スクリーンショットはレイドックのタイトル画面。
特に割り込みタイミングにシビアな作品で、中々動作が安定せず悩まされたものです。
2007/8/16
YM-2203のポートBに入力している、RP-5C15のアラーム信号の接続先を修正しました。
本来bit4に入力されるべきところが、bit7に入力されていました。
大した内容でもありませんが、一応リリースしておきます。

2007/2/11
今回はコモンソースコードプロジェクトも併せて、細かい修正が盛り沢山です。
前回のi8253および割り込み処理の修正の結果、マルチプランなど一部ソフトが動作しなくなっていた問題について、動的に処理を切り替えるようにしました。
こちらが把握できていないソフトについても、手動で処理を変更できるようになっています。
また、i8253のモード#2,#4,#5において、出力波形の精度をより向上させました。
Z80SIOの割り込み周りの処理を徹底的に修正しました。
特に受信割り込みを要求した後、割り込みが発生する前に受信された場合に割り込み要求を取り消すようにしたことで、ぱれっとが動作するようになっています。
また、マウスの受信データ(3バイト)を全部受信する前に、再度マウスからデータを受信した場合に、Z80SIOの受信バッファをクリアするようにしました。
星くずばこなどでマウスの動作がおかしくなる問題が解決しています。(ちょっと邪道ですが…)
YM2203について、FM音源に対してPSG音源の音量が大きすぎたため、ボリュームの調整を行いました。
また、1bit PCMのサポートを行いました。
星くずばこのおしゃべりBEEPなどが再生されるようになっています。
リバイバーのディスク読み込み中にクラッシュする問題の対策を行いました。
トラックレジスタに不正な値を指定したのが原因です。
なおクラッシュはしなくなりましたが、現状ではリバイバーはまだ動作しません。
CRTCの画面描画について、特にテキスト/CG画面合成処理の負荷軽減を図りました。
また、画面右下にフロッピーのアクセスランプを描画するようにしました。
I/Oのウェイト処理を追加すると共に、メモリウェイトについて処理の負荷軽減を図りました。
クリップボード内のテキストを、自動的にキーボードから入力する機能を追加しました。
雑誌からOCRで取り込んだプログラムを自動入力するのに役に立つ、かもしれません。
ただし、漢字や半角カナ、グラフ文字の入力は対応していません。
また、ウィンドウの状態(フルスクリーンか否か)を保存して、次回起動時に再現するようにしました。

2007/2/1
コモンソースコードプロジェクトの方で、ビデオ録画機能の追加&色々修正しました。
変更点の詳細については、コモンソースコードのページをご参照ください。
i8253の出力波形をより正確なものにする、またi8253の割り込みをエッジからレベルに変更することによって、テクザーやメルヘンヴェール、星くずばこ等のBGMがもっさりしていたのが修正されました。
また、メモリウェイトの処理を追加した他、CRTCのHSYNCの処理の見直しによって、処理の軽量化を図っています。

2006/12/31
Z80SIOの汎用化に梃子摺っていましたが、漸くMZ-2500もコモンソースコートプロジェクトに乗っかりました。
以前の再実装時に廃止していたスーパーインポーズを復活した他、EmuZ-2500/LANで行ったイーサネットカードのサポートも採用しています。
細かいところでは、描画期間中にVRAMにアクセスすると、次のブランク期間までCPUにウェイトが掛かる処理が追加されています。
次回更新時には、その他のメモリウェイトについても正確に再現する予定です。

2006/8/27
久方ぶりの更新です。
MZ-MLで話題沸騰中の、Oh!石さんによって開発されたイーサネットカードをサポートしてみました。
特別バージョンということで、別アーカイブにしてあります。
MZ-2500上でテキストブラウザが動作して、自分のサイトが表示されるというのは感動的な光景です。

2004/12/29
CPUのクロック数、M1サイクルの有無を指定できるようにしました。
また、8253の駆動を倍速にできるようにしました。
必要に応じて適宜ご使用ください。
また、テキスト画面において@が表示されない不具合を修正しました。
これは、テキスト画面の描画高速化のためのトリックが誤爆していたのが原因です。
CE版については、描画速度との兼ね合いから、現状ではまだ不具合が残ったままとなってます。

2004/12/16
今回は、溜まってた不具合報告の対応が中心です。
画面生成周りの問題で、ゼビウスの背景の下端が欠ける問題を修正しました。
テキスト画面の上下方向のスムーズスクロールを使用したときに、最終行の端数の部分が描画されていなかったことが原因です。
また、テキスト画面を2画面合成するときのプライオリティの問題を修正しています。
こちらは、問題のおきているソフトを所有していないため、直っているかは不明です。
その他、環境によってジョイスティックが正常動作しない問題の対応を行いました。
これまた再現環境がないため、本当に直っているか、また副作用が起きていないか、ちと不安なんですが。
該当する皆様方、ご確認お願いします。

テクザーで、BGMとか動作がもっさりしている問題の対応を行いました。
専用パッチで、8253の動作を倍にするという手抜き対応ですが。


2004/10/11
ドルアーガの塔で得点欄の背景が暗い赤になっていたり、キャラの黒い部分が透明になっていた問題を修正しました。
ギャラガで背景の星が流れていなかった問題も解決しています。
原因は、テキストの2画面多重表示の実装が正しくなかったことです。
ドルアーガの場合、まず影絵を不透明黒として描画して、その上に多色PCGでキャラを表示しています。
このようにして多色PCGで不透明黒を使用できない制限をカバーしていました。

FM音源のプリスケーラの設定が正しく行われない問題を修正しました。
イース3とか超兄貴@ほしくず箱、など色々なソフトに影響があります。
(たけがみりうさん、ご指摘ありがとうございました。)


2004/9/16
リードモディファイライトで、複数の境界色を連続して検出する際の問題を修正しました。
口説き方教えます、が正しく表示できるようになっています。
以前修正したときに、もうこれで大丈夫と思ったんですが…
いや、奥が深い。

これも、正しくペイントできるようになりました。
御報告ありがとうございました。>60氏@MZスレッド

イベントコールバック周りの不具合を修正しました。
μsec単位で期間を指定して、イベント登録関数内部でCPUのクロック数に換算していたのですが、ここのロジックが間違ってました。
超兄貴@星くずばこ14号が、従来最後のほうでエラーが発生していたのが修正されています。
その他、SASIハードディスクの対応を行っています。
基本的には以前のものと同じですが、空イメージファイルの生成については、別の実行ファイルで行うように変更しています。
CE版は、PPC2002で問題がおきているので一回休みです。
2004/9/10
fmgenで生成した波形を受け取る部分に、重大な問題があったのを修正しました。
これで、メニューを弄っていて突発的に落ちる件も解決している筈です。
で、ついでにサウンドの周波数と再生遅延時間を設定できるようにしました。
ここ数日の修正で思いのほか高速化されていたようで。
sigmarion3@533MHzで、そこそこ実機なみの速度で再生できるようになりました。
(再生周波数3KHzで6dps、再生を停止して12fps程度)
その他、ディスク交換時に、1秒ほどディスクが抜かれた状態を維持するように変更しました。
これは、一瞬でディスクが交換されて、ソフト側がディスクが交換されたことを検出できない、という状況を防止するためです。
2004/9/9
昨日に引き続き、仮想マシンの内部構造の大改造中です。
随分とスマートな実装になったのではないかと悦に入ってます。
修正内容の詳細は、謎日記をご参照ください。
今回は機能的な拡張はなしですが、イベントの時間精度を、誤差1.5μsec以下にまで向上させています。
2004/9/8
ディスク交換時に、クラッシュする可能性がある問題の暫定対策をしました。
後日、一定期間ディスクを抜いた状態を維持するなどの修正を行う予定です。
PI.さんよりXM6のソースの抜粋を送って頂きまして。
元々、Emu5〜EmuZ-2500の基本設計は、昨年の忘年会のときに見せて頂いたソースに大いに影響されていたんですが。
あらためて読んでみて、新たな発見でいっぱいです。
今回のリリースでも、盗めるところは盗ませて頂いてます。
本当に多謝です。

2004/9/7
PPC2002版を公開しました。
以前は試作版扱いのまま放置してたんで、これが正式なファーストリリースですね。
スクリーンショットは…知らない人が見たら「なんだこりゃ」ですが。
こやつが、MZ-2500のデモの主役、EXMAN兄貴です。
カセットテープの音声にあわせて口パクするんですよ。
「Hello, boys and girls. I'm Mr.EXMAN.」
「エキサイティングコンピュータ、スーパーMZを買ってくれて、どうもありがとう」
「なに、すっからかんになった? はっはっはっ、おおっと、それは僕の責任じゃないよ」

2004/9/6
一部未実装な箇所が残っていますが、新バージョンをリリースします。
HPC2000版は、実質sigmarion3用です。
注意点として、ライトプロテクトの判定は、d88のフラグではなく、イメージファイルのリードオンリー属性を見ています。
リードオンリーでない場合、終了時やディスクを抜いたときに、変更内容を上書きされます。
問題がありましたら、イメージファイルはリードオンリーにしておいてください。
スクリーンショットは、EXMAN兄貴にしようかと迷ったんですが。
やっぱ最初はこれでしょうね。


2004/9/3
暫くEmuZ-2500を休んでいる間に、CP/Mとか、m5とか、PV-2000とか、色々作ってたのですが。
その経験を生かして、あらためてEmuZ-2500の再実装を行っています。
内部的には、I/Oデバイスの基底クラスを定義して、各デバイスをその派生クラスとして実装するようにしたことが一番大きな違いでしょうか。
これを使って、以前は各デバイス内でタイミング調整していたのを、イベント管理機構で一括して面倒見るようになってたりします。
その他、仮想マシンクラスとwin32側を完全分離したり、Windows CEへの移植を最初から意識していたりとか。
メニューやその他のUIFを一新してみたりとか。
まだ全機能の移植が済んでいないのですが、あと数日程でリリースの予定です。
スクリーンショットは、実装中に見かけた珍しい画面。
FDC周りのイベント管理に問題があったようです。(修正済み)