Z80 アセンブラ&シミュレーター

    Rz80 with "麻以"

●説明

  アセンブラ。Z-80にだけ対応。
  シミュレートも対応。 プラグイン次第で拡張可能〜っ!
  IN,OUT命令はプラグインが無いと意味無し。
  使い方で分からないところは無いと思う。
  プラグインはまだ仕様が固まっていない。

●ToDo
  ・色?
  ・元に戻す、やり直し が変
  ・ブレークポイントを使えるようにする
  ・とりあえずAB10 MK-Uでも作ろうか、、
  ・転送先のアドレスを自動で設定 <出来るけど、あとで(^^;
  ・カーソル位置の表示の完全化
  ・エラーの場所表示で、1行消されるとずれる
  ・と言うかエディタのパワーアップ <非常に大変っ(って言うか自作(爆
  ・IM0でのCALL呼び出しを実行できるようにする	<原理が謎
  ・ヘルプ            <これがメイン(爆死
  ・機器のセット
  ・他のCPUに対応       <これ、結構厳しい、、、
  ・ステータスバーに何か表示する <なんやねんっ!(^^;
  ・『何か』に対応        <してどうする(^^;;
  ・アイコン付けんと、、、    ヾ(・・;)ォィォィ(c)お姉ちゃん
  ・裏モード           <何ですかそれは?
  ・シアウェア化!!!      <売れそうかも、、、(爆
  ・STG機能          <とりあえず、、、

●麻以DLL仕様
  ・ファイル名  Mai.dll
  ・以下の関数をエクスポートさせる

	起動時に必ずよばれる関数 必ず文字列(Mai ver 1.0\0)のポインタを返すこと
	BOOL __declspec(dllexport) __stdcall MaiGetVersion(HGLOBAL* hg){
		char *c = "Mai ver 1.0";	//12文字 必ずこの文字列を返すこと
		*hg = GlobalAlloc(GPTR,strlen(c));
		strcpy((char*)*hg,c);
		return TRUE;
	}

	MaiGetVersionが成功した後、この関数で名前、ポート数を収得する
	BOOL __declspec(dllexport) __stdcall MaiGetName(HGLOBAL* hg, LONG* count){
		char *c = "テストプラグイン";
		*hg = GlobalAlloc(GPTR,strlen(c));
		strcpy((char*)*hg,c);
		*count = 2;
		return TRUE;
	}

	シミュレート開始前に呼ばれる
	BOOL __declspec(dllexport) __stdcall MaiInitialize(HWND handle,LONG port,CONNECTOR *connector);
	handle		Rz80のメインWindowのハンドル、Windowを作る場合に親にすると良い
	port		設定されたポート番号の最初の番号
	connector   コネクタ構造体のポインタ、割り込みなどに使う

	リセットボタンを押されたときに呼ばれる、または、シミュレーション開始直前
	BOOL __declspec(dllexport) __stdcall MaiReset();

	IN命令により呼ばれる
	BOOL __declspec(dllexport) __stdcall MaiToRz80(LONG port);
	port		IOの対象のポート番号
	出力する場合、connector->OUTDATABUS を書き換える
	
	OUT命令により呼ばれる
	BOOL __declspec(dllexport) __stdcall MaiFromRz80(LONG port,CONNECTOR connector);
	port		IOの対象のポート番号
	connector	入力されたデータは、 connector.DATABUS である

	シミュレーションを閉じるとき呼ばれる
	この関数が呼ばれた後、50ms以内に麻以を終了できる状態にしなければならない
	BOOL __declspec(dllexport) __stdcall MaiClose();

	typedef struct _CONNECTOR
	{
		BOOL M1;	//未対応
		BOOL MREQ;	//未対応
		BOOL IORQ;	//未対応
		BOOL RD;	//未対応
		BOOL WR;	//未対応
		BOOL RFSH;	//未対応
		BOOL BUSAK;	//未対応
		BOOL HALT;	//HALT状態だとTRUE
		ULONG CLOCK;	//未対応	リセットからのTサイクル数
		DWORD DATABUS;	//書き換え不可のデータバス

		BOOL WAIT;	//未対応
		BOOL INT;	//割り込むとき TRUEにする
		BOOL NMI;	//割り込むとき TRUEにする
		BOOL RESET;	//リセットするとき TRUEにする
		BOOL BUSRQ;	//未対応
		DWORD OUTDATABUS;	//書き換え可のデータバス
	}CONNECTOR;


●更新履歴                          
 2002/05/27 Rz80 v0.059β with "麻以" 
  ・ソフト内部の整理

 2001/11/17 Rz80 v0.058β with "麻以"
  ・オプション>設定を追加
  ・ 設定>アセンブラ>RAMの範囲設定 を追加
  ・ORGを書かなかったとき、RAMのスタート番地からアセンブルするようにした
  ・シミュレートはRAMのスタート番地から行うようにした

 2001/11/15 Rz80 v0.057β with "麻以"
  ・アセンブルリストにメニュー追加
  ・ 印刷機能付加
  ・ フォント変更追加
  ・ダイオードの表示"麻以"の安定化

 2001/10/21 Rz80 v0.056β with "麻以"
  ・ファイルを開くのバグ修正
  ・ファイルの最後に0x1Aが着いていた場合削除するようにした
  ・ファイル履歴を開くときも、保存するかどうか確認するようにした
  ・メモリダンプの表示方法を変更
  ・メニュー>オプション>フォント 追加

 2001/08/07 Rz80 v0.055β with "麻以"
  ・ファイル履歴を付加
  ・アセンブルエラーの表示方法を微妙に変更
	  
 2001/07/28 Rz80 v0.054β with "麻以"
  ・印刷機能付加
  ・シミュレーションをわずかに高速化
				   
 2001/07/26 Rz80 v0.053β with "麻以"
  ・削除が 削除(%D) になっていたのを修正
  ・メモリダンプをメモ帳に変更
  ・アセンブル後すぐにメモリダンプを表示しても全部00と表示されていたのを修正
  ・ダンプ表示中にアセンブルしたとき、すぐにダンプ内容を更新するようにした 
  ・検索、置き換え機能付加
  ・メニューの細かい表示を変更

 2001/07/25 Rz80 v0.052β with "麻以"
  ・演算子の間にスペースが有るとエラーが出たのを修正
  ・ORGにラベルと演算を使えるようにした 
  ・行にスペースしかないとき、エラーが出るのを修正
  ・アセンブルリストをメモ帳にした
	
 2001/07/22 Rz80 v0.051β with "麻以"
  ・Window位置を記憶するようにした
  ・ディレクトリも記憶するようにした

 2001/07/21 Rz80 v0.050β with "麻以"
  ・プラグイン選択機能を付加
  ・シミュレーション中はプログラムを編集出来無くした

 2001/06/01 Rz80 v0.047β with "麻以"
  ・エディタをメモ帳にした
  ・それに伴い、多数バグ混入のおそれ

 2001/05/28 Rz80 v0.045β with "麻以"
  ・シミュ>ADD HL,ssとEDで始まる4バイト命令が間違っているのを治した

 2001/03/02 Rz80 v0.043β with "麻以"
  ・"麻以"を追加、ダイオードの表示機能
  ・転送機能でCOMポートを選択できるようにした 

 2001/03/02 Rz80 v0.042β with "麻以"
  ・TK-85への転送機能を追加
  ・TK-85はC0H以上転送できないようにした(何故かエラーが出る)
  ・転送をマニュアル設定出来るようにした
  ・シミュレーターを実行中に終了するとエラーが出るのを治した

 2001/03/01 Rz80 v0.041β with "麻以"
  ・DLL"麻以"を追加、Babbage2号の"麻以"を作る
  ・リセット、INT,NMIに対応
  ・IN OUT命令に対応

 2001/02/28 Rz80 v0.040β
  ・DLLでプラグイン機能を付けようと試みる

 2001/02/27 Rz80 v0.034β
  ・ステップ実行で命令が表示されなかったバグを修正
  ・CP nをSUB nと表示していたのを修正
                  
 2001/02/24 Rz80 v0.033β
  ・シミュレート機能 I/O以外全命令対応

 2001/02/23 Rz80 v0.032β
  ・シミュレート機能
  ・ ED 以外で始まる全命令に対応

 2001/02/22 Rz80 v0.031β
  ・シミュレート機能
  ・ ED DF FF 以外で始まる全命令に対応
 
 2001/02/19 Rz80 v0.030β
  ・シミュレート機能 逆アセンブル機能を追加
  ・ ED DF FF CB 以外で始まる全命令に対応

 2001/02/18 Rz80 v0.029β
  ・シミュレート機能追加
  ・ ED DF FF CB 以外で始まる全命令に対応
  ・ Fレジスタも処理するようにした
  ・ フラグの状態を SZ-H-PNC で表示するようにした

 2001/02/14 Rz80 v0.026β
  ・シミュレート機能の速度改善(前回より6倍速)
  ・1バイト命令だけシミュレート機能付加(それ以外は無視)
  ・ DAAは出来ない
  ・ Fレジスタは処理結果を反映しない

 2001/02/13 Rz80 v0.025β
  ・さわりだけシミュレート機能付加(まだ使用不可)

 2001/02/13 Rz80 v0.024β
  ・ポケコン(PC-G803)に転送できるようにした
  ・転送をスレッド処理にし、転送状況を表示するようにした
  ・転送を中断出来るようにした

 2001/02/08 Rz80 v0.022β
  ・IMEで漢字変換時の色を変えた
  ・ステータスバーにヒントを表示するようにした

 2001/02/08 Rz80 v0.021β
  ・行にラベルしかないときのエラーを無くした

 2001/02/08 Rz80 v0.020β
  ・おもいっきりアルゴリズムを改造
  ・ラベルや数式のチェックを改造
  ・+-*/()を使えるようにした

 2001/01/18 Rz80 v0.011β
  ・MP-Z80に転送できるようにした

 2001/01/18 Rz80 v0.010β 
  ・オーバーフローはチェックしない事にした
  ・LD16bitでバグFIX
  ・ラベルチェックのバグFIX
  ・長いラベルのチェックが無くなっていたのを復活
  ・EQUは先に定義しないといけなくした
  ・他かなりバグFIX

 2001/01/17 Rz80 v0.009β
  ・JRとDJNZは直接移動数を入れるのではなく移動先を書く事にした
  ・+-の計算を出来るようにした 計算中に2バイトを超えるとエラー
  ・2進数でマイナス(16桁)の時正常に変換されていなかったのを修正
  ・ちょっとしたバグFIX

 2001/01/16 Rz80 v0.008β
  ・同じ名前のラベル定義だとエラーを出すようにした
  ・エラーを具体的に表示するようにした
  ・ちょっとしたバグFIX

 2001/01/15 Rz80 v0.007β
  ・見た目を大幅に変更
  ・メモリダンプでキャラクタ表示をするようにした
  ・専用ファイルの拡張子を .rz8 に決定
  ・メインメニュー、ポップアップメニュー追加
  ・メニュー項目の以下の機能に対応
  ・ ファイル 新規、開く、上書き保存、名前を付けて保存、終了
  ・  編集   元に戻す、やり直し、切り取り、コピー、張り付け、削除、全て選択
  ・ 実行   アセンブル、整形、アセンブルリスト、メモリダンプ
  ・ オプション(爆

 2001/01/14 Rz80 v0.006β
  ・見た目を大幅に変更
  ・アセンブルエラーはエディタの方に出るようにした

 2000/12/29 Rz80 v0.005β
  ・アセンブラ全命令対応
  ・ラベルの不具合はまだある
  ・アセンブルリストを出せるようにした
  ・エラーを表示するようにした
  ・エラー表示は行番号とエラー番号のみ
  ・ソースを整形出来るようにした

 2000/12/28 Rz80 v0.004α
  ・アセンブラを途中まで作る
  ・1バイト命令はアセンブル出来るようになる
  ・メモリダンプを付ける

 2000/12/25 Rz80 v0.002α
  ・とりあえずプロジェクトを作る
  ・何も出来ない

 2000/12/21 Rz80 v0.001α
  ・見た目を作る(描く(爆)
  ・とうぜん何も出来ない