mz700win - an MZ-700 emulator 'mz700win.exe' for Win32 version 0.53 Maintenance

(C) 1998-2008 Takeshi Maruyama.（まるくん）

mz700win by Takeshi Maruyama, based on Russell Marks's 'mz700em'.
MZ700 emulator 'mz700em' for VGA PCs running Linux (C) 1996 Russell Marks.

In Primary version, I ported Linux version to Win32 directly. But it was slow.
This version of MZ700WIN was rewritten newly by me.

Z80 emulation from 'Z80em' Copyright (C) Marcel de Kogel 1996,1997


はじめに
--------
　このプログラムは、Russell Marks氏がLinux用に開発した、MZ-700エミュレータ
mz700emをlinux版のソースを参考に、Win32用に新たに作り直しました。
　Z80エミュレーション部分は、Marcel de Kogel氏のz80emを使用しています。


何が出来るの？
--------------
・MZ-700用のソフトウェアを動作させることが出来ます。
　PCG-700,C-MOS RAMボード MZ-1R12も対応しています。

・さらに、MZ-1500用のソフトウェアも動作させることが出来ます。
　PSGやRAMファイル MZ-1R18にも対応しています。

・動作させるためには従来、MZ-700/1500の実機から、モニタＲＯＭイメージを
　取り出さなければいけませんでしたが、別途公開されている互換モニタＲＯＭ
　イメージ "MZ-NEW MONITOR"（武蔵野マイコンクラブ／高田　岳治様、
　町田　健治様・作）を使用することで、MZ実機が手元に残っていない方でも
  MZ700WINを使用できるようになりました。

　また、モニタＲＯＭを特に用意していなくとも、MZ-700用純正ＲＯＭモニタ
1Z-009Aの「よく使われるサブルーチン」を、mz700win本体内でエミュレートしました。
ゲームなら７割ほど動作できるようです。

・mz700winのエミュレートは完璧なものではありませんので、全てのMZ用
　ソフトが動作するという保証はありません。


必要動作環境
------------
・DirectX2以上のランタイムがインストールされた、Windows95が動作する環境
・Windows95 OSR-2
・Windows98/Second Edition
・Windows Me
・Windows NT 4.0
・Windows 2000
・Windows XP
　上記のいずれかのＯＳで動作します。（Vistaでは未検証です）

・Pentium 100MHz以上のＣＰＵ（４８６マシンでは動作保証致しません）
　MZ-1500モード動作時は、Pentium 200MHz以上推奨

・２５６色以上表示可能で、ビデオメモリを１ＭＢ以上搭載したビデオカード

・SoundBlaster16相当のサウンドカード
  (DirectSound対応のもの．ＰＣＩサウンドカード推奨） 



作者の動作環境
--------------
ＰＣ        Celeron 300AMHz (450MHz over clock(^^;)) (SDRAM 128MB)
ＯＳ        Windows2000 Professional (Japanese)
            Windows98 Second Edition (Japanese) / DirectX 7.0a
ＶＩＤＥＯ  nVidia GeForce2MX SDRAM-32MB
ＳＯＵＮＤ  YAMAHA YMF744

音がおかしいという方は、DirectXやサウンドカードのドライバを
最新のものに更新してみて下さい。
それでもおかしい場合は、MZ700WIN.INI 内の
[OPTIONS] セクション内の、
SOUND=0
を
SOUND=1
に変更すれば改善されるかもしれないし、変わらないかもしれません(^^;)



必要なＲＯＭイメージファイル
----------------------------
　以前のバージョンと異なり、
　ROMイメージファイルのフォルダ位置とファイルネームが変更されています。
  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
　mz700win.exe が存在するフォルダと同じところに、ROMS という名前の
フォルダを作成し、そこに手持ちのROMイメージを置いてください。
　対応イメージの一覧は以下のとおりです。

 ROMS\MZ700.ROM  (4096 Bytes)  以前のバージョンとの互換用。
 ROMS\1Z009.ROM  (4096 Bytes)  1Z-009A/B のイメージ
 ROMS\MZ1500.ROM (10240 Bytes) 9Z-502Mのイメージ
 ROMS\1Z013.ROM  (4096 Bytes)  1Z-013A/B のイメージ。欧州用。
 ROMS\SP1002.ROM (4096 Bytes)  SP-1002のイメージ
 ROMS\NEWMON7.ROM(4096 Bytes)  MZ-700用 MZ NEW-MONITORのイメージ
 ROMS\NEWMON.ROM (4096 Bytes)  MZ-80K/C/1200用 MZ NEW-MONITORのイメージ
--------------------------------------------------------------------------
　mz700win.exeを十分に活用させるためには、上記のファイルのうち最低１つと、
ＣＧフォントデータ MZ700FON.JP が必要です。

MZ700FON.JP      (4096bytes)  ＣＧフォントデータ

　ＣＧフォントデータは、mz700win.exeと同じディレクトリに置くようにして下さい。
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

　また、MZ-1500用モニタＲＯＭ　9Z-502MのＲＯＭイメージ(MZ1500.ROM)を用意する
事により、MZ-1500として動作するようになっています。
　詳しくは、後述の「MZ1500.ROMの構成」を参照してください。


ＲＯＭを吸い出す為に必要なもの
------------------------------
・ＭＺ−７００（またはＭＺ−１５００）の実機 （ここからＲＯＭを吸い出します） 
・ＭＺ−７００用のアプリケーションがセーブされたカセットテープ 
・データレコーダ（ミニコンポやラジカセでは、うまくロード出来ない事が多いです）

  ※　ＲＯＭイメージについての個別の質問には一切お答えできません。
  　　各自の責任で吸い出して下さい。 実機をお持ちでない方は、
  　　別途公開されている、MZ NEW-MONITORのイメージか、MZ700WIN本体の
      内蔵エミュレーション機能で動作させるようにして下さい。
  　　また、ご自身が実機を所有していないバージョンのＲＯＭイメージで
  　　動作させる事はしないで下さい。


ＲＯＭモニタの吸い出し方
------------------------
　このプログラムを動作させるには、ＭＺ−７００実機のＲＯＭモニタイメージと
ＣＧフォントデータが必要です。

　ＲＯＭモニタイメージを入手するには、まず、７００実機のＲＯＭモニタ上で
*S00000FFF0000
 ^^^^^^^^^^^^^
 と入力し、ＲＯＭエリアをテープにセーブして下さい。

　そのテープを、添付の'tapeload.exe'や、Russel Marks氏作のLinux用MZ-700
エミュレータ'mz700em'に添付の'mzget'などのツールを使用して、ファイルと
して吸い出します。

　tapeload.exeやmzgetの場合は、吸い出したファイルイメージはout.datという
名前で作成されるので、それを1Z009.ROMという名前にリネームして使う事になります。
                            ^^^^^^^^^
　MZ-700 OWNER'S MANUAL（説明書）をお持ちなら、巻末にモニタのソースリストが
掲載されていますので、そのバイナリコードを入力するという方法もあります。

　ＭＺ−１５００をお持ちの方も、１５００のモニタ上で００００〜０ＦＦＦを
テープにセーブし、それをファイル化する事で、ご利用いただけます。
　その場合、先頭の３バイトを
    C3 4A 00
　と書き換える必要がありますのでご注意下さい。


MZ1500.ROMの構成
----------------
ROM1 ($0000-$0FFF)
ROM2 ($E800-$FFFF)
を吸い出し、ROM1+ROM2という形のバイナリを'MZ1500.ROM'という名前で用意して
下さい。ファイルサイズは10240バイトです。

MZ1500.ROMを作成したら、先頭３バイトの内容が
C3 00 E8
であるかを確認してください。
MZ1500.ROMを作成するときに、間違えて1Z-009Bの先頭部分にパッチを当てたものを
使ってしまうと、1Z-009Bが起動することになります。

なお、吸出し方法や、ファイルの作り方などに関しては、mz700win自体がある程度の
スキルを持った方に向けたプログラムという事で、こちらではお答えできません。
ご了承ください。


MZ-80K/C/E/1200をお持ちの場合
-----------------------------
　動作保証外ですが、MZ-80K/C/1200用のモニタＲＯＭ SP-1002でもある程度動作する
ようです。SP-1002を吸い出し、SP1002.ROMという名前でファイル化してみて下さい。


モニタＲＯＭが無い場合
----------------------
　モニタＲＯＭがなくても、エミュレータ本体は実行出来るようになっています。
　その場合、使用頻度の高いＲＯＭ内ルーチンの一部の処理を、mz700win本体で
エミュレーションするようにしたため、テープイメージ単体で動くソフトもあります。
（想定しているＲＯＭは1Z-009A/Bです。）
ただし「ゲームが動く程度の互換性」にとどまっているので、言語製品(SP-5030など）
は動作しません。
　現状では、当方手持ちのソフトの７割ほどのソフトは動くかな・・・
といった感じです。

　メニューから、Open Fileで*.mzt/*.m12ファイルを開いて、いずれかのキーを押すと
mztファイルが直接実行されます。


ＣＧフォントデータの作成方法
----------------------------
　ＣＧフォントデータを作成するためには、ＲＯＭが読み出せる環境か
　ＭＺ−１５００実機＋データレコーダが必要になってしまいます。
　それでは利用できる人が、さらに限られてしまいますので、
　ＣＧＲＯＭのフォントを、『見た目でコピー』したものを、テキストファイル
mz700fon.txtとして添付してあります。
　添付のmkfnt.exe を使用する事で、mz700fon.txtをmz700fon.datに変換出来ますので
それをmz700fon.jpとりネームすることでご利用いただけます。
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
　mz700fon.txtを書き換える事で、お好みのフォントで使えます。

　ＤＯＳ窓内で、
　mkfnt mz700fon
  ^^^^^^^^^^^^^^
　と入力すれば、mz700fon.datが作成されるハズです。
　日本でご利用の方は(^^;)mz700fon.jpとりネームするのを忘れないようにして下さい。

　ヨーロッパ版のフォントを'mz700fon.dat'という名前で用意出来れば、
　日本版の他、メニューからヨーロッパ版のフォントに切り替えられます。


テープファイルイメージ
----------------------
　拡張子『ＭＺＴ』のものを使います。
　Ｘ６８０００用ＭＺ−１２００エミュレータ用のファイル
（拡張子『Ｍ１２』）がそのまま利用出来ます。

　ファイル構造は、テープ上に記録されている１２８バイトのヘッダと
データ本体を、そのまま連結しただけのものです。

　添付のtapeload.exeで作成される header.dat,out.datの２つのファイルを

COPY /b header.dat+out.dat mzfile.mzt
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
　のように連結すれば、エミュレータで使用出来るファイルになります。
拡張子は*.MZTとして下さい。

　Version 0.30から、分割ロードにも対応しました。
　Version 0.31から、イメージファイルの拡張子をMZTにしました。
　単純に拡張子を変えただけなので、今まで使用してきたM12ファイルも
そのまま使えます。

　mappy.mztの後に、crt.mztがロードされなければいけない場合は、

COPY /b mappy.mzt+crt.mzt mappyall.mzt
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
　のように、２つのファイルを連結したものを使用すればＯＫです。

　また、header部がないものの分割ロードに関しても対応出来ています。
（が、今のところ吸い出しツールtapeload.exeはヘッダがあるものしか対応していません）
連結するときに、ローダー部分のheader.dat,out.datと、データ部分のout.dat
を連結すれば動作します。

　現状では、そのようなソフトは、ローダ部分を解析して、ヘッダ無しの
生データのサイズとアドレスを調べ、実機でプログラムを実行させた直後に
リセットし、該当部分をセーブするしかありません。

　タイムトンネルなどの、途中でテープの入れ替えが必要になるソフトは
テープの入れ替えを要求されたら、FileメニューからSet Tapeを選択し、
要求されているテープのファイルイメージを選択してから、
ソフトの指示に従って下さい。


mz700win.exe 起動の仕方
-----------------------
　mz700win.exeを初めて実行すると、ブルーバックの画面に

** MZ700WIN **

　と表示されます。これは、MZ700WIN本体のモニタＲＯＭエミュレーションで動作
している状態です。Setting メニューより、MONITOR Romを選択し、MZ700WIN上で
動作させたい手持ちのモニタＲＯＭを決定してください。

　例えば、ダイアログで"MZ-700(J) / 1Z-009A/B" を選択した場合、ROMS\1Z009.ROMが
起動し、

** MONITOR 1Z-009A ***
*

と表示されます。（MZ-1500のROMで起動した場合、1Z-009Bになります）

テープファイルイメージ（拡張子が『ＭＺＴ』または『Ｍ１２』になっている
ファイル）を読み込んで実行させるためには、メニューの"Set Load Tape"から
ロードしたいテープイメージファイル(*.mzt;*.m12)を選択し、

 *L[Enter]
  ^
を入力すれば、テープイメージファイルがロード、実行されます。

　"MZ-700(J) / MZ700 NEW-MONITOR"の場合、

 MZ-700
*

　という起動画面です。実機のＲＯＭイメージをお持ちでない場合は、こちらを
お使いいただけます。

　なお、MZ-NEW MONITORのモニタコマンドの一部は、1Z-009A/Bと異なりますので
ご注意ください。
　詳しくは別途配布されている、MZ NEW-MONITORの添付ドキュメントをご参照下さい。


1Z-009A/B                   MZ-NEW MONITOR
---------                   --------------
Jnnnn                       GOTO$nnnn


＊＊＊＊＊＊＊＊＊＊＊重要＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊
Version 0.40まで使えた

 *L<Filename>[Enter]

のような書式は、0.41からは使えなくなりましたのでご注意ください。
＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊


S-BASIC (1Z-007B), HuBASICでのSAVE,LOAD
---------------------------------------
　Version0.50まで、S-BASIC,HuBASIC上でのファイルの読み書きには対応していません
でした。MZ700WINでは、モニタROMにパッチを当てて処理を横取りする形でカセットの
入出力処理を実装していたため、モニタROMを使用しないBASICでは、ファイルのアクセ
スができなくなっていました。

　Version 0.5xでは、ご要望の多かった、BASIC上でのファイルアクセスの実装に成功
しました。

　お手持ちのS-BASIC,HuBASIC,SP-5030 V1.0Aを吸い出したファイル(*.mzt,*.m12)の
「ヘッダ部分」に以下のパッチを当てることにより、BASIC上でファイルアクセスが
可能になります。

■ S-BASIC 1Z-007Bの場合
00000040: 50 41 54 3A 21 12 0C ED F4 03 ED F4 04 ED F4 01 
00000050: ED F4 02 FF FF 00 00 00 00 00 00 00 00 00 00 00 

■ HuBASIC の場合
00000040: 50 41 54 3A 3B 12 0C ED F4 07 ED F4 08 ED F4 05 
00000050: ED F4 06 FF FF 00 00 00 00 00 00 00 00 00 00 00 

■ SP-5030 V1.0A の場合
00000040: 50 41 54 3A 49 40 03 ED F0 01 69 40 03 ED F0 02 
00000050: FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 


MZ-1500 QD-BASIC(MZ-5Z001)でのSAVE,LOAD
---------------------------------------
　Version0.51aまで、MZ-1500のQD-BASIC,MZ-5Z001上でのファイルの読み書きには対応
していませんでしたが、Version 0.52では、暫定的ながら対応してみました。
　BTX形式のBASICプログラムへの読み書き動作は確認出来ていますが、OBJ形式は未確
認、BSD形式は非対応です。

　なお、tapeload.exeで吸い出した、MZ-1500用BASICファイルのヘッダ部の
先頭１バイト目が $05 になっているようですが、そこを $02 に書き換えないと
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
BASIC上で正しく認識出来ませんのでご注意ください。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

　お手持ちのBASIC MZ-5Z001を吸い出したファイル(*.mzt,*.m12)の「ヘッダ部分」に
以下のパッチを当てることにより、BASIC上で、ＱＤ上でのファイルアクセスが
可能になります。

■ MZ-1500 QD-BASIC MZ-5Z001の場合
00000040: 50 41 54 3A BD 3E 03 ED F2 03 FF FF 00 00 00 00 


　自前でパッチを当てるほかにも、すでにパッチ済みの128バイトのファイルヘッダで
ある、1Z007B.HED (S-BASIC用), HUBAS700.HED (HuBASIC用), 
SP5030A.HED (SP-5030 V1.0A用）,MZ5Z001.HED (MZ-1500 QD-BASIC用) をアーカイブ
内のtapeload\ 以下に含めてあります。tapeloadで吸い出す際に、header.dat の
代わりに使用できますのでご利用ください。


起動オプション
--------------
    /5  MZ-1500モードで起動します。（詳しくは後述）

    /s  サウンド無し

    /k　ＲＯＭモニタにパッチを当て、モニタ上でのカナ入力を、ほぼ
　　　　１０６キーボード上のカナ配列のとおりに入力できるようにします。
　　　　（※１　ただし1Z-009A使用時のみ）
　　　　（※２　カナ小文字などは都合により対応できません。
　　　　　　　　それらの文字は[SHIFT]+実機と同じ位置のキーから入力して下さい）
　　　　（※３　単なるおまけ機能なので、これ以上の対応は考えておりません）

    /c　ＲＯＭモニタにパッチを当て、文字色を白、背景色を黒にします。

　　　　/c40のように、直接色コード指定も可能です。指定の値は、MZ-700上の
　　　　COLOR VRAMに使うコードで、上位４ビットが文字色、下位４ビットが背景色に
　　　　なります。


　オプションを何も付けないと、MZ-700の機能しか使えません。
　また、1500モードではPCG-700は使えません。


メニュー
---------

File ---------

 Open              読み込むテープイメージを開き、ロードします。
                   イメージが読み込まれアドレス情報が表示されます。

 Set QD            テープイメージファイルをＱＤとみなしてセットします。

 Eject QD          ＱＤをイジェクトします。
                   （ＱＤ関連は、MONITORに9Z-502Mを使用した時か、
                     BASIC MZ-5Z001に対応パッチを当てた場合のみ有効です）

 Set Load Tape     ソフト中でテープの入れ替えを指示された時、
                   そのテープのファイルイメージを指定します。
                   ＲＯＭモニタのテープ関連エントリを呼んでいるときのみ
                   有効です。

 Set Save Tape     セーブ用テープイメージを指定します。
                   ＲＯＭモニタのテープ関連エントリを呼んでいるときのみ
                   有効です。
                   デフォルトは$cmt$.mztです。セーブされるデータは、
                   セーブイメージに追記されていきます。

 Exit              mz700winを終了します。


Setting --------

      Monitor ROM  mz700winが使用するモニタＲＯＭイメージを選択します。
                   MZ-700/1500モードを切り替えることも出来ます。

     Speed Control 動作速度を10%〜100%の範囲でコントロールできます。


 Size ---------

      1:1	ウィンドウの大きさを通常にします。

      2:2	ウィンドウを拡大します。

 Refresh ------

      Every Frame       毎フレーム描画描画します。

      Enery 2nd Frame   ２フレームに１回描画します。

      Enery 3rd Frame   ３フレームに１回描画します。

      Enery 4th Frame   ４フレームに１回描画します。

 Font Set ------

      Europe   フォントファイル'MZ700FON.DAT'があれば、ヨーロッパ版のフォントに
               切り替えられます。

      Japan    フォントファイル'MZ700FON.JP'があれば、日本版のフォントに
               切り替えられます。

 Full Screen ------
               全画面表示に切り替えられます。
               [Alt]+[Enter]キーでも切り替え可能です。
               選択されるごとに、全画面表示とウィンドウ表示が切り替わります。
               
               注意：全画面モードでは、メニューは使えません。
               メニューを選択する時は、[Alt]+[Enter]キーでウィンドウ表示に
               戻してからにして下さい。

Keyboard --------

               キーボードマトリクス定義ファイルkey.defに定義されている
               タイプを選択します。
               本アーカイブ同梱の定義ファイルには、以下のタイプが用意
               されています。

 106/109 JP Type (MZ-700/1500) 日本語１０６／１０９キーボード
 101/104 US Type (MZ-700/1500) 日本語１０１／１０４キーボード

 106/109 JP Type (MZ-80K/C) 日本語１０６／１０９キーボード
 101/104 US Type (MZ-80K/C) 日本語１０１／１０４キーボード
 （くまあるきさんに制作してただきました。詳しくは付属の MZ80_KEY.DOCをご覧ください）

 101/104 GR Type (MZ-700) ヨーロッパ版MZ-700用、ドイツ語101/104キーボード
　(Karl-Heintz Mauさんに制作していただきました)

Hardware ------

 PCG700-Sw(F11)	   ＰＣＧ７００の動作モードスイッチです。
                   ＯＮ／ＯＦＦトグルで、ＯＮにすると該当ディスプレイコードの
                   フォントがＰＣＧ上のものに切り替わります。
                   ＰＣＧ対応ソフトを使う時は、ＯＮにして下さい。

 Load State        ＭＺの現在の状態を*.MZSファイルに書き出します。

 Save State        *.MZSファイルを読み込んで状態復帰します。

 Reset(F12)        MZ-700をリセットします。


About ----------

		バージョン情報を表示します。


Load/Save STATE
----------------
　0.49以降のバージョンには、HARDWARE メニューにLoad State/Save Stateが
追加されています。この機能を使うことにより、現在のＭＺの状態をセーブ・ロード
出来、サスペンド・レジュームが実現できます。
　Stateファイルの拡張子は*.mzsです。


STATEファイル使用時の注意
-------------------------
　STATEファイルをロード（レジューム）する時には、SAVEされた時と同じ
マシンモード(700か1500か）とモニタＲＯＭで起動しないと正しく動作しません。


キーマトリクス定義ファイル key.def
----------------------------------
おそらく内容を見てもらえば、ひと目で書き方がわかるかたも多いと思いますが・・。

[106/109 JP Type]
// Matrix = AT Key Code

// *1*
00 = 0d         // bit0:[CR] = VK_RETURN
01 = ':'        // bit1:[:] = ':'
02 = ';'        // bit2:[;] = ';'
04 = 09         // bit4:[Tab] = Alphabet
05 = 78         // bit5:[=] = F9
06 = 21         // bit6:[GRAPH] = Page Up
07 = 22         // bit7:[KANA] = Page Down

のようになっています。
数値はそれぞれ１６進で指定し、左側の数値は、ＭＺのキーマトリクスとbit位置、
右側の数値はＡＴキーコードか、''でくくる事により「文字そのもの」で指定出来ます。

新しいキーボードタイプを追加するには、
[ .... ]

と、WIN.INIファイルのように、セクション名を宣言してもらえれば
キーボード選択メニューに、そのセクション名が追加されます。
（セクションの最大数は１６です）
以下にキーボードマトリクス定義を書き込んでいってください。


キーボード配置
--------------
　エミュレータ上と、ＭＺ−７００実機のキーボード対応は以下の通りです。
（キーボードは１０６／１０９キーボードを基準にしています。）

	キーボード　　　　　　　画面上
	---------               ------
	'['                     （
	']'                     ）
	[^]                     ＋
	[\|](BackSpaceの左)     ＊
	[\_](右SHIFTのとなり)   ？
	[Shift]+[0]             π
	[page up]               [Graph]
	[Tab]                   [英数]
	[page down]             [カナ]
	[BackSpace]             [Break]
	[F7]                    [@]
	[F8]                    [?]
	[F9]                    [=]

　MZ-700実機のキーボード配置になるべく近くなるように調整してあります。
しかし、１０６キーボードとＭＺ−７００実機のキー配列の違いから、必ずしも
押したキーと同じ文字が入力されるとは限りません。



MZ-1500モード
-------------
　起動時のオプションとして/5を指定する事により、MZ-1500モードで起動します。
  Settingメニューより設定することも出来ます。
　起動オプションを何も付けないと、MZ-700の機能しか使えません。
　また、1500モードではPCG-700は使えません。


MZ-1500モードでの注意
---------------------
　MZ-1500モードで9Z-502Mを使用する際、C-MOS RAMボード MZ-1R12の
サポートは無効になります。9Z-502Mが、C-MOS RAMボードから空のデータを読み込んで
BOOTしようとするため、C-MOSのデータが空だった場合に誤動作しているように
見えるためです。MZ700.ROMでの1500モード動作時は、C-MOSは有効です。


MZ-1500のモニタＲＯＭ 9Z-502Mについて
-------------------------------------
　0.46以降のバージョンでは、MZ-1500用モニタＲＯＭ　9Z-502MのＲＯＭイメージを
用意する事により、きちんとしたMZ-1500としてのふるまいをするようになりました。

　起動時のスイッチ /5 の指定により、MZ-1500モードで起動します。
Settingメニューで、明示的に使用モニタＲＯＭを9Z-502Mにしないと、
9Z-502Mは動作しませんのでご注意ください。
　9Z-502M以外で動作させる場合は、9Z-502M内のエントリ

PSGRS0		$E807	ＰＳＧ初期化
PALRS0		$E80A	パレット初期化

が、mz700win本体でエミュレートされます。


9Z-502M、MZ-5Z001動作時のQDの扱いについて
-----------------------------------------
　9Z-502MやMZ-5Z001内のQDコントロールルーチンにパッチを当てて、
読み込み・書き込み・フォーマットをエミュレートしました。扱うファイルは
従来の*.mztファイルです。１つのmztファイルを１枚のＱＤとみなします。
複数のファイルが連結されている場合は、モニタのDirectoryコマンドで、
全てのファイルが見えます。
　*.mztファイルをSet QDで指定すると、そのファイルをＱＤとみなして
アクセスされる事になります。

【重要】ＱＤへの書き込みについて
　書き込みやフォーマットについては、$qd$.mztというファイルに対してのみ
有効です。

(9Z-502Mで起動時に、mz700win本体と同じフォルダに0バイトのファイルが
作成されているはずです。これはブランクＱＤという扱いになります）

　それ以外のファイルに書き込もうとした場合、内部的にWrite Protect Errorを
返します。

※　ＱＤに書き込み時、予期せぬバグなどで『本来上書きされてはいけないファイルを
　　上書きして消してしまう』可能性があります。
　　使用の際には、*.mztファイルのバックアップをとってから書き込むことを
　　お勧めします。

　手元の分割ロードするタイトルを数本試してみたのですが、9Z-502Mに依存
している限りは動作しているようです。
　・電波新聞社「ギャラガ」
　・自作ゲーム「妖怪征伐」

　Z80 PIOによるモード２割り込みは暫定的に実装されていますが、精度はまだまだと
いったところです。

　MZ-1500のソフトはＱＤ（クイックディスク）に記録されているため、
エミュレータ上で動かすには一旦テープにコンバートして、tapeload.exeで
吸い出す必要があります。
　コンバートするにはMZ-1500システムディスクに入っているTRANSユーティリティを
使用するか、QCコマンドで一旦読み込んでキャンセルし、該当メモリエリアを
セーブする(mz700faq.htm参照）必要がありますが、市販ソフトの中には、
ファイル名にコントロールコード等が入っていて、QCコマンドでコピー出来ないように
なっているものもあります。
　その場合はmz700tips.htmに変換方法が書いてありますので、参考にして下さい。


単体動作時にエミュレーションしている
               1Z-009Aのエントリ一覧
------------------------------------
LETNL       $0006
NL          $0009
PRNTS       $000C
PRNTT       $000F
PRNT        $0012
PRNT3       $096C

MSG         $0015
MSGX        $0018
GETKY       $001B
BRKEY       $001E
WRINF       $0021
WRDAT       $0024
RDINF       $0027
RDDAT       $002A
BELL        $0030
MSTA        $0044
MSTP        $0047
SPHEX       $03B1
PRTHL       $03BA
PRTHX       $03C3
ASC         $03DA
HEX         $03F9
HLHEX       $0410
2HEX        $041F

?ADCN       $0BB9
?DACN       $0BCE
?BLNK       $0DA6
?DPCT   ※  $0DDC	[DEL]キー機能は除く
?PONT       $0FB1
?PNT1       $0FB4
?SAVE       $0B92
?LOAD       $05F0

DSWEP       $0854
?SWEP       $0A50

FLKEY       $057E
?FLS        $09EC
?FLAS       $09FF
??KEY       $09B3

?CLER       $0FD8
?CLRFF      $0FDB
?DSP03      $0FAB

DLY1        $0759
DLY2        $0760
DLY3        $0A4A
DLY12       $09A6

※ 一部の機能のみ



今後の予定
----------
　バージョン0.50で開発休止だったはずなのですが(^^;)
　BASIC上のファイルアクセスサポート、Borland Free CompilerでのMake対応など
　細かい変更をした0.51の発表後、更にMZ-NEW MONITOR対応版の0.52の発表をする
事になりました。

　MZ700WIN初公開時からの(PCエミュレータ全般的な)問題であった、
モニタＲＯＭの問題も、互換モニタ MZ-NEW MONITORの公開で、「ある程度」
解決できたので、今度こそ落ち着いて開発休止できます(笑)
　
　今後も、気まぐれにメンテナンスリリースをする事もあるかと思いますが、
基本的には開発休止という状態ですので、ご了承ください。
　BASIC,QD-BASIC,互換モニタＲＯＭに対応した事で、今まで問題になっていた点は
ほぼ解消されたと思います。
　ソースも公開しておりますので、後はよろしくお願いいたします（笑）

　バージョン 0.50から、mz700winの開発を一時休止しています。
　おそらく今後も本格的な再開は無いと思います。
　作者が食っていくための作業に、注力するためです（笑）
　ですが、MZ700WINのエンジンを、別の形で活用し、可能性を広げる試みは
　行っていきたいと思います。
　例）http://retropc.net/mz-memories/
　
　MZ700WIN-BBSは、スパム攻撃にやられてあえなく壊滅しました。
　世知辛い世の中ですね。再開の予定はありません。
　
　申し訳ありませんが、作者の本業に注力するためということで
　ご理解くださいますようお願いいたします。


配布などについて
----------------
　MZ-700/1500エミュレータ mz700win.exeは、フリーソフトです。

　本アーカイブ内容やファイル自体を改変しない限り、転載は自由です。
　転載の際には、作者に報告する必要もありません。

　本アーカイブに含まれるプログラムは、全て無保証です。
　相性などの問題でうまく動作しない機種があったとしても、作者はプログラムを
修正する義務は無いものとします。
　また、このプログラムの使用により生じた全ての損害に関して、作者は責任及び
義務を負いません。


ご注意
------
　本プログラムは、個人的な研究目的で作成されたもので、違法コピーの幇助を
意図するものではありません。コンバートしたＲＯＭイメージやファイルなどは、
所有者個人の責任で使用し、通信、あるいは手渡しなどで、不特定多数に配布し
ないようにして下さい。そのような事が起こると、本プログラムの配布が続けら
れなくなってしまう可能性も出てきます。


Special Thanks
--------------
　開発休止までの２年以上の期間、たくさんの方からご意見、ご希望、ご協力、
ご声援をいただきました。

　古籏さん、yoichiさん、一輝さん、Ｏｈ！石さん、Cyber-Fan MLのみんな、
MZ700WIN-BBSに書き込みを下さるみなさん…ありがとうございました。

　欧州方面のMZ-700本体、MZ-700ユーザーとmz700winユーザーの存在を教えて下さり
　精力的にmz700winの国際化に協力して下さったKarl-Heintz Mauさん、
　MZ-80K/C対応キーボード定義ファイルを作って下さったくまあるきさん、
　モニタＲＯＭの背景色変更のためのパッチ情報を教えてくださったまじろじさん、
　MZ-1R12の仕様を教えて下さったせいのさん、
　mzt2wavの公開により、MZ700WINと実機間のデータのやりとりが可能になり、
　MZ700WINの可能性を広げてくださったのりのりさん、
　ありがとうございました。

　また、M.KoZaiさんには、フロッピーインタフェースと、改造3.5インチドライブ、
　実機上で動くいくつかのプログラムなどをご提供いただきました。
　ＶＲＡＭウェイトの実装は、これらのソフトの実機での動作を参考に行いました。
　ありがとうございました。

　互換モニタＲＯＭの存在をお知らせ下さり、作者様を探すきっかけを作って下さ
　ったMicky Albertさん、捜索、公開にご協力いただいたまじろじさん、
　当時の資料を探してくださったＯｈ！石さん、NEW MONITOR関連のドキュメント
　作成を手伝って下さったRetroPCFoundationのMoliceさん、そして何より、
　MZ-NEW MONITORのフリーソフトとしての公開を快諾して下さった、武蔵野マイコン
　クラブの高田　岳治様、町田　健治様をはじめとした関係者の皆様に、この場を
　借りて深く御礼申し上げます。 

　mz700winは、間違いなく使っていただいた皆様のおかげでここまで成長する事が
　できました。
　今後は私の手を離れますが、ソースリスト公開をする事で、新たな展開のきっかけに
　なれば幸いです。

　また、Russell Marks氏のmz700emが無ければ、mz700winの存在も無かったでしょう。
　エミュレータの構造を一から知るには絶好の教材でした。
　最終的には別物になってしまいましたが、今でも構造上の名残は残っていると思います。
　ありがとうございました。


参考文献
--------
・MZ-700 Owner's Manual(シャープ)
　ＲＯＭモニタ１Ｚ−００９Ａのソースリストなどが、大いに参考になりました。

・MZ-1500活用研究（工学社）

・Oh!MZ '84.9-10 モニタ9Z-502Mの解析 前編／後編
　（記事を提供していただいた松繁さん、ありがとうございました。
　　２年越しで役に立つときが来ました(;_;)）

・MZ-1500テクニカルノート（ラジオ技術社）
　（まじろじさんに貸していただいてました。ありがとうございました。）

・Ｚ８０ファミリ・ハンドブック（ＣＱ出版社）
　アセンブラが無かったので、ハンドアセンブルのために必要でした（笑）
　いまどきすることじゃないよな…。

・トランジスタ技術Special No.6
　特集　Ｚ８０ソフト＆ハードのすべて（ＣＱ出版社）

・ＰＣＧ７００　取り扱い説明書（ＨＡＬ研究所）



参考資料
--------
・せいの氏作成のWebPage 「MZ-1R12の仕様」
  http://page.freett.com/osamus/mz1r12.html


History
-------
2008-02-11  Version 0.53 (Maintenance)
        Speed Control機能を追加
        コンパイラをVisual Studio .NET 2005に変更
        細かいバグ修正
        作者のHPアドレス、メールアドレス変更

2000-10-28  Version 0.52 (Final)
        MZ-NEW MONITORに対応
        複数のモニタＲＯＭの中から、MZ700WINが使用するものを選択可能に
        MZ-1500用QD-BASIC MZ-5Z001上でのファイルアクセスに対応

2000-08-27  Version 0.51a
        SP-5030 V1.0A上のプログラムのロードセーブに対応。(SP5030A.HED添付。)
        テープヘッダの読み込み時にＭＺ上でエラーが起こると、ファイルハンドルが
        クローズされないバグを修正

        コンパイラをMicrosoft Visual C++ 6.0 SP4に変更

2000-08-13  Version 0.51
        夏休み記念：メンテナンスアップデート(^^;)
        S-BASIC,HuBASIC上のプログラムのロードセーブに対応。

2000-03-27  Version 0.50
        モニタＲＯＭが無くても、1Z-009Aの「よく使われるサブルーチン」を
        本体内でエミュレートしました。ゲームなら７割ほど動作できるようです。

        HARDWARE メニューに、Load State/Save Stateを追加。
        現在のＭＺの状態をセーブ・ロードできます。

        ＰＳＧのノイズを一応実装。
        ただし「鳴るだけ」で、音色の再現性はウソっぽいです。

        MZ-1500用モニタＲＯＭ　9Z-502MのＲＯＭイメージを用意する事により、
        1500として動作するようになった。

        9Z-502M上でQDのフォーマット、ファイル書き込みをサポート

        File関係のメニューに、現在選択されているイメージ名を表示するようにした。


2000-02-02  Version 0.41
        コンパイラをWatcom C++ 11.0Jから Microsoft Visual C++ 6.0 SP3に変更

        C-MOS RAMボード MZ-1R12の内容が記憶されるようになった
        （CMOSの内容は、ファイル'CMOS.RAM'として書き出されます）
        MZ-1500用ＲＡＭファイル MZ-1R18のエミュレーションを実装

        MZ-1500モードの、Z80 PIOによる割り込み（モード２）を実装
        ただし精度はあまり高くない。
        一部の1500用ゲーム(Sofia,DarkStormなど）で、BGMが鳴るようになった。

        自前ＲＯＭモニタエミュレートへの拡張が容易になるよう、
        パッチ処理周りを変更
        
        ＲＯＭモニタルーチンに頼ったテープセーブ処理のエミュレーションを実装
        それにより、MZ-80K/Cの言語製品でファイルのセーブをBIOSに頼っているものは
        使えるようになった。
        
        最後にファイルを開いたフォルダを記憶するようにした。
        
        VRAMアクセス時のウエイト処理を追加。ただし詳しい資料が見つけられなかった
        ため、「感覚的な調整」になっている。
        
        PITのカウント、割り込み処理タイミングのエミュレーション精度の向上
        
        その他細かい変更
        

1999-04-05  Version 0.40
        DirectDrawを使用し、フルスクリーン表示が可能になった。
        Ｌコマンドパッチのバグ取り。
        key.defにより、キーボードタイプとキーボードマトリクスの
        再定義が可能に。
        フォントファイルを選択可能に。
        その他、細かな修正多数。

1998-05-31  Version 0.39
        MZ-1500のPSG トーンジェネレータを試験的に実装。
        その他、こまごまとした修正。

1998-04-29  Version 0.38
        MZ-1500の画面周りを試験的に実装。
        ScreenオプションにRefreshを追加。
        NT4でキーボードから英字が入力出来なかった(^^;)バグを修正。
        （すいません…）

1998-04-11  Version 0.32
        テープファイルの拡張子を*.MZTに変更。
        ＰＣＧ７００のエミュレートに対応。
        リセット時にハングする事があったのを修正した。

1998-04-02  Version 0.31
        使用キーボードのタイプを選択し、キー入力の誤動作を
        回避出来るようにした。
        オプション設定がセーブされるようにした。

1998-04-01  Version 0.30
        8253カウントダウンタイマーを一部(bcd)を除きサポート。
        タイマー割り込みもサポート。（まだバグ有りっぽい）
        分割ロードのソフトウェアに対応。
        ウィンドウの拡大をサポート

1998-03-09  Version 0.21
        作者のＷｅｂページ上に公開。
        DirectSoundを使用して、とりあえず音が鳴るようにした。
        が、まだバグ有りっぽい。

以下、非公開バージョン

1998-03-05  Version 0.20
        Ｚ８０エンジンとして、Marcel de Kogel氏のz80emを使用した。
        MZ-700エミュレート部分も、新たに書き直した。
        実行速度が一気にアップ。
        実機に近い速度で動くように調整した。（若干速めかも）

1998-03-02  Version 0.011
        モニタからLコマンドでテープイメージを読めるようにした。
        Fileメニューから読み込むテープイメージを開けるようにした。

1998-02-20  Version 0.001
        Linux版mz700emからベタ移植。
        めちゃくちゃ速度が遅かった。



連絡先
------
E-MAIL : mz-memories@retropc.net
Web Page:http://retropc.net/mz-memories/
