歓迎光臨
"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.

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

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ディスクマガジン「星くずばこ」は、ほぼ全ての号のディスクイメージが 河野さんのサイトで公開されています。



2017/3/15

Common Source Code Project側で、ウィンドウ下部にステータスバーを追加しました。
ドライブのアクセスランプや、CMTの動作状況の表示用です。
MZ-2500は特に変わってませんが、FDDとCMTを両方アクセスしているサンプルということで、
トップページに表示するための画像をアップしておきます。



2016/2/26
レイドックを起動してからIPLリセットすると、ディスクからブートしなくなる不具合を修正しました。
ご指摘ありがとうございました>2chでコメントくださった方
YM-2203の出力ポートに書き込んだ値を、リセット時に初期化するようにしています。



2016/2/21
レイドックがブートしなくなっていた不具合を修正しました。
ご指摘ありがとうございました>BLOGでコメントくださった方

気が付かないうちに、いつの間にか動かなくなるんですよね、このソフト(苦笑)



2016/1/10
MZ-1P17について、ESC % 2の実装漏れがあったのを修正しました。
また、半角ひらがなの描画品実の向上、重ね印刷(ラインフィードが足りないなど)のサポートをしました。
他機種用に、MZ-2/3モードやX1モード、BUSY/ACK信号の他デバイスへの接続をサポートしました。



2015/12/31
MZ-1P17において、アンダーライン、半角ひらがなモード、カラーモードをサポートしました。
以下のプログラムを実行すると、



以下の印刷結果になります。





2015/12/30
漢字サーマルプリンタ MZ-1P17をサポートしました。
今後、他のMZ/X1シリーズにも横展開する予定です。

Personal CP/Mが起動した直後のハードコピーを印刷した結果は、以下のようになります。
但し、画像は50%に縮小しています。


紙のサイズは、現状はA4縦で固定です。
MZ-1P17の印刷の解像度は180dpiですが、最小で1/120インチ単位でラインフィードできるようになっているため、
180と120の最小公倍数の360dpiで印刷データを生成するようになっています。



2015/8/22
キャラクターのブリンクが効いていなかったのを修正しました。
ご指摘ありがとうございました。>かねごん様



2015/8/9
コモンソースコードプロジェクト側で、MB8877を更に改良しました。
Artane.さんにご指摘いただきました、常にライトプロテクトがステータスに立っていた不具合を修正しました。
その他、Eフラグの待機時間を、2D/2DD(30ms)と2HD(15ms)で分けるようにしたのと、MB8866に対応しています。
MB8866対応は、リード・ライトセクタで、C/Sフラグをチェックしないようにしただけです。



2015/8/8
コモンソースコードプロジェクト側で、MB8877およびZ80SIOを更に改良しました。
例によって、MZ-2500は余り関係ないです(苦笑)

シーク系のコマンドのタイミングを改良しました。
実際にはヘッドが移動しなかった場合、またベリファイ動作をした場合の再現性が向上しています。

リード、ライト系のコマンドのタイミングを改良しました。
Eフラグ有効時に掛かる、15msecのディレイの扱いを修正しています。

ライトセクターを、フォースインタラプトで中断したときに、後始末するよう修正しました。

Z80SIOでは、外部クロック駆動時の、シフトレジスタに送信データを転送するタイミングを修正しました。



2015/8/7
コモンソースコードプロジェクト側で、MB8877を更に改良しました。
これで何かMZ-2500用のソフトが動くようになった、とかでもないのですが(苦笑)
これまでの行き掛り上、ここで変更内容を纏めておきます。

リード、ライトセクタ時、対象のセクターが見つからなかった場合の処理を修正しました。
従来は、コマンド開始直後にIRQが立って、それから1回転分の時間でコマンド終了していましたが、
これを5回インデックスホールを検出してから、コマンド終了してIRQを立てるように修正しています。

ディスクがライトプロテクトになっているときの処理を修正しました。
従来、最初のDRQに対する書き込み時に、ライトフォールトでコマンド終了していましたが、
これを最初のDRQが発生する前に、即コマンド終了するように修正しています。

ロストデータが発生したときの処理を修正しました。
ライト系コマンドで、最初のDRQでロストデータが発生したときは、即コマンド終了します。
それ以外のときは、1バイト読み飛ばして、または00Hを書き込んで、そのままコマンドを継続します。

シーク後のベリファイ動作で、アドレス読み込み時にID CRCエラーが発生した場合、
ステータスにシークエラーだけでなく、CRCエラーも返すように修正しました。

手持ちの資料を見る限り、MB8877の修正は、これで一段落になるかと思います。
なると、いいなあ。



2015/8/5
コモンソースコードプロジェクト側で、MB8877およびZ80SIOを更に改良しました。
Wanderers from Ysのユーザディスク作成モードで、BGMのテンポが狂わなくなりました。

MB8877の主な改良点は、以下になります。

インデックスホールの信号の持続時間を、50msecから5msecに修正しました。

DRQの発生タイミングを修正しました。
Type-2, Type-3コマンドでは、Eフラグが立っていると、DRQの発生が15msec遅くなります。
ライトトラックでは、1発目はすぐに、2発目以降はインデックスホール位置から発生します。

ライトセクター、ライトトラックのLOST DATAのタイミングを修正しました。

ID CRCエラーと、DATA CRCエラーを分けて扱うようにしました。
ライトセクター、リードセクターでは、ID CRCエラーの場合、セクターが見つかりません。
リードセクターでは、データ転送後に、DATA CRCエラーが発生します。
このとき、連続読み込みが中断されます。
リードアドレスでは、データ転送後に、ID CRCエラーが発生します。



2015/8/3

コモンソースコードプロジェクト側で、MB8877およびZ80SIOを改良しました。
Wanderers from Ysのユーザディスク作成モードが動作するようになっています。

MB8877については、ライトセクター時のDRQの発生タイミングを修正しました。
1発目はIDフィールドの読み込み後、2発目以降はデータフィールドでDRQが発生します。
また、インデックスホールの信号を、50msec維持するように修正しました。
Z80SIOでは、送信バッファからシフトレジスタへの転送時間を考慮してIRQを発生するように修正しました。

これらの改良では、X1centerの佐藤様にご協力いただきました。
ご協力ありがとうございました。

MB8877については、更に以下の修正をしています。
シーク完了後、最低60msecはリード/ライトコマンドが実行されないようにしました。
フォーマットされていないトラックへシークする際、Verifyフラグが立っていない場合でも、
シークエラーが発生する不具合を修正しました。
データフィールドの存在しないセクターを取り扱えるように修正しました。
ライトトラック中にフォースインタラプトで中断した際に、後始末するようにしました。



2015/6/28
タイミング回りをより実機に近づけるよう修正しました。
表示期間中のVRAMアクセスウェイトについては、まだ追加で修正がはいる予定です。

実機のタイミング調査の情報については、X1センターの佐藤様にご提供頂きました。
いつもありがとうございます>佐藤様



2015/1/21
ポート0xCDの、Z80SIOの送受信クロックの周波数の設定について、
bit3-5でチャンネルA、bit0-2でチャンネルBの周波数を指定するように修正しました。

SuperMZ活用研究の記載が間違っていたようですね。
ご指摘ありがとうございます>佐藤様



2015/1/19
コモンソースコードプロジェクト側で、Z80SIOを改良しました。
送受信クロックの周波数を指定したり、カウンダなどの出力信号を入力できるようにしました。
また、設定に応じて、送受信に掛かる時間を正確に再現するようにしました。

MZ-2500側でも、ポート0xCDをサポートしました。
Z80SIOの送受信クロックの周波数の設定や、Z80SIOのポートアドレスの変更をサポートしています。


Z80SIO周りの修正の結果、勝手移植のソーサリアンが動作するようになりました。
Z80SIOの送信割り込みを短いインターバルで発生させることで、ディスクの読み書きをしながら、
BGMを再生するという荒業を実現しています。

今回の改良では、X1centerの佐藤様にご協力いただきました。
ご協力ありがとうございました。



2014/12/23
レイドックがブートしなくなっていた不具合を修正しました。
EmuZ-80B/2200の方で、BOOT命令が機能しない件を修正したときにエンバグしていました。
ご指摘多謝です>某スレの方

8255のポートCのBit3が0のときにIPLリセットが掛かるようになっているのですが、
MZ-2200では、Bit3を0にして待機するとIPLリセットが掛かるのに対して、
MZ-2500では、Bit3を0→1に立ち上げるとIPLリセットが掛かるという違いがあったようです。

その他、ステートセーブに対応しました。
注意点はトップページの更新履歴をご参照ください。



2014/8/28

ユーカラK2において、画面の下半分が表示されない不具合に仮対応しました。
640x400,4色モード時に、画面の下半分にどのVRAMが割り当てられるかの問題なのですが、
BASIC-M25ではG/Iを、ユーカラK2では拡張VRAMのB/Rが割り当てられるようです。
どのI/Oで切り替えるのか判らなかったため、ユーカラK2のみ有効なパッチ当てをしています。
後日ちゃんとした形で修正する予定です。


内蔵フロッピードライブと増設フロッピードライブの番号を入れ替える機能をサポートしました。
また、レイドック専用でドライブ番号を補正するパッチを削除しました。
以前、この辺を弄ったときは、今回と同じ修正をいれても動かなかったんだけどなあ。

IPLリセットやCMTのイジェクトを行うI/Oについて、信号のパルス幅をチェックするようにしました。
一瞬信号が変わっただけの場合、リセットやイジェクトは行われないようになっています。
ソースを共有している、MZ-80B/2200も同様です。



2013/2/7
コモンソースコードプロジェクト側で、データレコーダを大幅に改修しました。
早送りや巻き戻し、wavの右音声を再生する機能をサポートしています。

これを用いて、MZ-2500側でもデータレコーダのAPSS動作を改良しました。
BASIC-M25のデモやムーンチャイルドの音楽テープは、従来は1曲ごとに分割したMP3を再生していましたが、
wavファイルを読み込んで、早送りや巻き戻し、頭出しなど、実機同様にAPSS動作を行うようになっています。


音楽テープを16bit,ステレオで録音したwavファイルに対応しています。
左音声が頭出し用のデジタルデータ、右音声が音楽データです。

この左音声のノイズを除去するために、バイナリアーカイブ内にwav_apssというツールを用意しています。
上記画面のように、350msec前後の信号が検出されればOKです。
うまく行かない場合は、適当に閾値を変更してください。



2011/1/16
今回は画面周りで色々と修正しています。
ご協力ありがとうございます。>856氏


スクロールレジスタの扱いを修正しました。
従来は、そのときの画面モードにあわせて、1ページのサイズでアドレスをマスクしていましたが、
これを15bitのまま扱うようにしました。
また、スクロール終了判定を、アドレスを大小はなくイコールで比較するようにしました。
この結果、デモのラインダンスが、従来のパッチなしでも正しく表示できるようになっています。


また、画面マスク関係の修正を行いました。
$E2のbit0で、画面の表示を禁止する処理を実装しました。(これ、何で未実装だったんだろう?)
$F6のR/G/B信号の個別マスクで、I信号がマスクされていなかったのと、256色モードでこのマスクが
機能していなかったのを修正しました。
摩訶不思議MZ神話などで、描画中の画面が丸見えになっていたのが修正されています。

細かいところで、テキスト画面の表示範囲外になっている部分が、従来は常に透明扱いでしたが、
$F5のNo.0のbit1によって透明/不透明な黒となるようにしました。
この辺は、活用研究とテクニカルマニュアルで記述が違うので、実機調査しないといけませんね。



2010/5/12
コモンソースコードの整理の一環で、スーパーインポーズ機能を廃止しました。



2009/4/1
ジョイスティックの連射の処理を修正しました。
VSYNCに同期して連射するようになっています。
これである程度安定して連射できるようになっているかと思います。




2008/2/11
今回はコモンソースコードプロジェクトの方で、割り込み処理の大幅な見直しを行いました。
従来の割り込み処理は以下のようになっていました。
これは、CPU内部でオペコードの実行のたびにINT信号を監視することで、パフォーマンスが低下することを避けるためです。
理屈の上ではこれでちゃんと動作するのですが、最近になって以下のような問題が顕在化してきました。
そこで、以下のように実際の回路と近い動作をするように、割り込み処理の大幅な見直しを行っています。
何だか益々回路シミュレータじみてきた気がします(苦笑)が、随分とすっきりした実装になりました。
心配していたパフォーマンス低下も大したことがなく一安心。

また、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周りのイベント管理に問題があったようです。(修正済み)