Z80逆アセンブラ hoja for Java ver 2.01

     2016年3月3日
     現在配布のJava版はエラーが出て異常終了する場合がある不具合があります。
     NovosoftのC2JというC言語ソースからJavaソースに変換するツールを使って作りました。
     ツールを介しているので原因を特定することも治すこともできません。
     純粋なJavaブログラムと少し異なりC言語の関数のライタイムライブリのJavaクラスファイルを呼び出して動作する仕組みになっています。
     ツールを使わずに全て手作業でJavaに書き直して作ったプログラムも作っています。
     動作確認後、現在のプログラムと差し替える予定です。
     動作確認でバグが見つかれば差し替えないかも知れません。



  対応OS    Javaアプリケーション用のJava VMが動作するOS。
                例えば、Microsoft Windows XP以降、Linux、Mac OS Xなど。
		hoja.classとihex.classはJDK 1.4で作成。
		その他のクラスは2003年未満のJDKで作成と推測されます。
                従って、割と古いJava実行環境でも動作します。
                コマンドラインで実行します。
                WindowsではDOS窓とかMS-DOSプロンプトと呼ばれるウィンド
              ウ上で実行します。
                JavaアプレットではないのでWEBブラウザからは動作しません。

  ライセンス  GNU General Public License Ver 2(GPL Ver 2)
        NOVOSOFTのC2J Converterのランタイムライブリを同梱して
       いるため、そのライセンスであるGPLに合わせます。
        NOVOSOFTはGPLと公表していますがバージョン表記が見当た
       りません。
        C2J Converterのリリース時に最新だったGPLのバージョンと
       判断しました。

   特徴        ラベル対応で、文字列をある程度判別し未定義命令対応など
          高機能なZ80逆アセンブラです。
            表示のみではなく、アセンブラにかけられる状態のコードを
          出力できるのが特徴です。

   機能        バイナリファイルまたは、インテルHEXファイルのZ80 CPUの
              コードを逆アセンブルします。
            逆アセンブルした内容は標準出力に出力します。
            ザイログニーモニックで出力します。
            アセンブラにかけられる状態のリストを出力します。
           ラベル付きリストの出力ができます。
	    スタート、終了番地の指定ができます。
                ファイル読み込み開始位置の指定ができます。
            MSXのbloadファイルにも対応。
                文字列を一部判別できます。
                判別する文字列は、半角カタカナ、シフトJIS全角もオプショ
              ン指定により判別できます。
                未定義命令をコメント部分に表記します。
                コメント部分にダンプ出力できます。
                JR命令の相対番地表記と絶対番地表記が選べます。
                メッセージは全角表示と半角ローマ字表示の両方できます。
                (アルファベット半角表示は、日本語と英語が混じっていて、
              まともな英語になっていなかったり、日本語をそのままローマ
              字で書いていたりします。
                ローマ字で、日本語と英語の混ざったメッセージが出力され
              ても驚かないでください。)

  ダウンロードhojajava201.zip

  ファイルの内容

        ./hoja-java/hoja.class           hoja メインjava class
        ./hoja-java/ihex.class           hoja サブjava class
        ./hoja-java/hoja.java            hoja メインソース 
        ./hoja-java/ihex.java            hoja サブソース 
        ./hoja-java/c2japp.class         NOVOSOFT C2Jランタイム
        ./hoja-java/c2jconv.class        NOVOSOFT C2Jランタイム
        ./hoja-java/c2jctype.class       NOVOSOFT C2Jランタイム
        ./hoja-java/c2jio.class          NOVOSOFT C2Jランタイム
        ./hoja-java/c2jlocale.class      NOVOSOFT C2Jランタイム
        ./hoja-java/c2jmalloc.class      NOVOSOFT C2Jランタイム
        ./hoja-java/c2jmath.class        NOVOSOFT C2Jランタイム
        ./hoja-java/c2jmbyte.class       NOVOSOFT C2Jランタイム
        ./hoja-java/C2JRTBase.class      NOVOSOFT C2Jランタイム
        ./hoja-java/readme-utf8.txt この説明ファイル

 
    hoja のバージョンについて

       2.0未満のバージョンはMS-DOS、MSX-DOS、CP/Mで動作していました。
       hoja ver 2.0 から UNIX(Linux)版と、MS-DOS版となり今まで非公開で
     あったソースファイルが公開されました。
       1997年6月に、WINDOWS 95/NT版も出ました。
       2.01は、Java版、UNIX版、MS-DOS版、WINDOWS 95/NT版、があります。
       1998年を最後に長らく開発を中断していましたが何かを思い出したか
   のように2014年2月にJava版を投入しました。
    開発中断期間が十五年か十六年という長い期間あったわけです。
       MSX-DOS、CP/M両用版は今のところバージョンアップの予定はありませ
     ん。(現在 ver 1.51)
       hoja ver 2.0 は前バージョンの hoja をUNIX系OSに移植したものです。
       コマンドオプションの指定方法がUNIX風に変わりました。
       2.0未満のバージョンで存在した出力ファイルの指定オプションは削除
     されました。
       出力ファイル指定は、リダイレクト機能のない、MSX-DOS及び CP/Mのた
     めにあったもので、UNIXではリダイレクトでファイルに落とせるので不要
     な機能になったからです。
       ラベル解析能力は2.0未満のバージョンよりも、あがっています。
       インテルHEXファイルにも対応するようになりました。
       ダンプオプションは半角カタカナ無効、有効の2種類に増えました。
       文字列判別はシフトJIS全角もできるようになりました。
       また、大きなファイルは分割しないと逆アセンブルできませんでしたが
     分割せずに部分逆アセンブル可能となりました。



   使い方

      ターミナル、DOS窓などでの入力方法は以下のようになります。
      かぎ括弧内はオプションで省略でき、かぎ括弧は入力しません。
      オプションの与え方はUNIX風です。

  java hoja [-[oesSl] <16進数値>] [-AHmudhkKCnigb] 入力ファイル名


  インストール、設定など

      Java実行環境をインストールしていないは別途インストールします。
      java.exeがあるパスを環境変数PATHに追加します。
      zipファイルを解凍し、拡張子.classがあるパスを環境変数classpathに
   追加します。
      環境変数への追加方法はOSに依存します。


                        使用例


         abc.comというファイルを逆アセンブルして画面に表示させる。
        ($マークはコマンドプロンプトで、違う場合もあります。)

    $ java hoja abc.com


        abc.comというファイルを逆アセンブルして	def.asmというファイルを
        作り、def.asmに出力する。
        (一般的なシェルでなかったり、設定によっては使えません。)

  $ java hoja abc.com > def.asm



    abc.comというファイルを逆アセンブルして def.asm というファイルを
        作り、def.asmに出力する。
        300H番地から6afH番地までを逆アセンブルする。
        (番地はロードされるターゲットのメモリの範囲内)

  $ java hoja -s300 -e6af abc.com > def.asm




 オプション
      {-A -N -H -m -o -s -S -e -u -d -h -l -k -K -C -n -i -g -b}
          xxx には 16進数の数値を指定します。
          16進数指定のないオプションは -idu のようにまとめても -i -d -u 
          のように分割してもどちらでもかまいません。
          また、16進数指定のオプションは -o 200 のように離しても -o200の
          ようにくっつけてもどちらでもかまいません。

        -A        エラーメッセージ、説明などを半角アルファベットで出力。

        -N        エラーメッセージ、説明などを全角で出力。(全角版のみ)

        -H        入力ファイルをデフォルトのバイナリではなくインテルHEX
                ファイルを読み込む。
                  拡張インテルHEXファイルも読み込めますが、アドレスが、
                ffffHを越える部分は読み込み不能です。
                  また、たいていのインテルHEXファイルには対応しています
                が、情報を得ることができなかったレコードタイプ3番から5番
                のレコードが入っているインテルHEXファイルには対応してい
                ません。
                  対応しているレコードタイプは、0から2番です。
                  現バージョンでは、モトローラヘキサファイルには対応して
                いません。
                  ヘキサファイルはアドレス情報も含むために、連続したコー
                ドであるとは限りません。
                  ばらばらにコードが配置され、未定義の空間が空いている可
                能性もあるということです。
                  複数の領域に配置された場合に、hojaは ORG疑似命令を複数
                出力し、未定義の空間を逆アセンブルするような無駄なことは
                しません。
                  -s,-e オプションとの併用は可能ですが、-Sオプションとの
                併用はできません。


        -m        ORG値が100Hの場合、マイクロソフト社、M80アセンブラ用の
                リストを出力します。
                  といっても"ASEG"と".Z80"を冒頭に出力するだけです。
                  なんでもないようですがASEG指定しないで M80で再アセンブ
                ルしても元どおりにはアセンブルされないので注意してくださ
                い。
                  ORG値が 100Hでない場合はこのオプションをつけて再アセン
                ブルしても元のバイナリにはもどりません。

        -o xxx    逆アセンブルする時"ORG xxxH"と出力しますが、その xxxに
                入る番地を指定します。
                  16進数の値を指定します。
                  デフォルトは100Hです。
                  例えば -o72A  というように指定します。
                  -b オプション、-H オプションとの併用はできません。
                  なぜなら、インテルhexファイルも、bloadファイルもすでに
                ORG情報を持っているからです。

        -s xxx    逆アセンブルスタート番地を指定します。
                  20A番地から始める場合は -s20a と指定します。
                  この番地とはプログラムが実際にメモリにロードされた時の
                メモリの番地を指します。(Z80 CPUから見た番地)
                  直接ターゲットのメモリを読むという意味ではなくファイル
                を読みます。(もちろんターゲットはつながってなくてよい)
                  ファイルの先頭からの位置の数値を指定するのではありませ
                ん。
                  逆アセンブルされるプログラムファイルのロード先頭番地は
                デフォルトで100H番地となっています。
                  100H番地で始まらないプログラムは -o で変更しないと実際
                とは違う番地から開始します。
                  100H番地でスタートするCOMファイルの11Hバイト番目から逆
                アセンブルする場合は -s110 と指定します。
                  (□ロから数えると10H番目からになります。 前バージョン
                のドキュメントには10H番目からと書いていました。)
                  16進数の値を指定します。

        -S xxx    ファイルの先頭から指定したバイト数だけ無視します。
                  このオプションはバイナリファイルのみ有効でヘキサファイ
                ルには使えません。
                  -sオプションの指定がない場合はそのままファイル読み込み
                開始位置の指定になります。
                  他のオプションがない場合は、12A00Hバイトのファイルに、
                -S12000 を指定すると最後のA00H分が逆アセンブル領域となり
                ファイルの12A01Hバイト目がORG指定のアドレスになります。
                  バンク切替え等をしているプログラムは FFFFHを越える場合
                がありますが、このオプションで部分逆アセンブル可能です。
                  (-Sオプションをつけても領域が64Kを越える場合は -eオプ
                ションが必要)
                  -s,-eオプションとの併用もできます。
                  16進数の値を指定します。

        -e xxx    逆アセンブル終了番地を指定します。
                  5b4H番地までにする場合は -e5b4 と指定します。
                  この番地とはプログラムが実際にメモリにロードされた時の
                メモリの番地を指します。(Z80 CPUから見た番地)
                  直接ターゲットのメモリを読むという意味ではなくファイル
                を読みます。(もちろんターゲットはつながってなくてよい)
                  ファイルの先頭からの位置の数値を指定するのではありませ
                ん。
                  逆アセンブルされるプログラムファイルのロード先頭番地は
                デフォルトで100H番地となっています。
                  100H番地で始まらないプログラムは -o で変更しないと実際
                とは違う番地で終了します。
                  100H番地でスタートするCOMファイルの11Hバイト番目まで逆
                アセンブルする場合は -e110 と指定します。
                  (ゼロから数えると10H番目までになります。 前バージョン
                のドキュメントには10H番目までと書いていました。)
                  65535 - ORG指定値(-oオプション)バイトより 大きなファイ
                ルを逆アセンブルする場合は  -eオプションで逆アセンブル領
                域を狭くするこにより、逆アセンブル可能になります。
                  Z80 CPUから見たコード最終番地がFFFFH以内に収まっていな
                いと逆アセンブルできません。
                  16進数の値を指定します。

        -u       JR命令の番地表記を絶対番地表記とします。
                  例えば"JR	300H"のようになります。
                  100H でスタートしないプログラムは -oオプションで実行開
                始番地を設定していないと間違った番地を指します。
                  (ヘキサファイルの場合、-oオプションは必要なし)
                  この絶対番地表記は多くのアセンブラでエラーとなりますの
                でアセンブラにかける場合は注意してください。
                  デフォルトでは"JR	$+21D"のような相対表記です。

        -d        コメント部分にダンプ表示します。
                  16進数値、アスキー文字をダンプします。
                  1バイトの半角カタカナはダンプされません。

        -h        コメント部分にダンプ表示します。
                  16進数値、アスキー文字に加え、 1バイトの半角カタカナも
                ダンプします。

        -l xxx    ラベル処理のための配列の大きさを指定します。
                  この指定により最大処理ラベル数が変わります。
                  0〜FFFFH までの16進数の値を指定します。
                  デフォルトは最大にしてあります。
                  (2.0未満のバージョンは小さくしてあり、変更不可でした)
                  -l0 とゼロを指定するとラベルは全くつけません。
                  指定値が小さいほど逆アセンブル速度が速くなります。
                  ただし、指定値が小さいと最大処理ラベル数は減ります。
                  ここで指定する値はファイルサイズより大きいものを指定し
                ても意味はありません。
                  ファイルサイズより大きな値の場合はプログラムが自動的に
                ファイルサイズと同じ値に縮めてしまいます。
                  プログラム内部の話になりますが、ロケーションカウンター
                の記録配列の値の指定です。
                  ロケーションカウンター(ニーモニックの先頭番地)の数が
                がファイルバイト数を越えることはないからです。

        -k        1バイトの半角カタカナの文字列も判別しようとする。

        -K        シフトJIS全角の文字列も判別しようとする。

        -C        -h オプションによって表示される1バイトコード半角カタカ
                ナ及び、-K オプションによって表示されるシフトJIS全角と、
                1バイトコード半角カタカナをEUCコードに変換して出力する。  
                  このオプションによりターミナルが EUCであってもシフトJI
                S全角と1バイトコード半角カタカナを表示できます。
                  このオプション指定時に文字列が出力された場合は、コード
                がEUCに変換されていますので再アセンブルする際はシフトJIS
                に変換してからでないと元のバイナリにはなりません。
                  半角カタカナもEUC2バイトコードから 1バイトコードに変換
                してからでないと再アセンブルしても元のバイナリになりませ
                ん。

        -n        文字列を判別しない。

        -i        8080 CPUのコードのみ逆アセンブルし Z80拡張コードはDEFB
                疑似命令などで処理します。
                  ニーモニックはザイログのままです。

        -g        デフォルトではDEFB疑似命令使いますがをDB疑似命令を使う
                ようにします。
                また、-bオプション時のDEFW疑似命令はDW疑似命令に変わりま
                す。(-bオプションを指定しない場合はDEFW疑似命令が出力さ
                れることはありません。)

        -b        MSXのbloadファイル用のリストを出力します。
                  具体的には先頭の7バイトをDEFB命令などで出力します。
                このオプションは、bloadファイルの先頭7バイトの情報を逆ア
                センブルの情報に使いますので、-sオプションとの併用はでき
                ません。
                  また、ヘキサファイルにはこのオプションは使えません。



        出力例	


        出力例	その1(オプション未使用時)

	ORG	100H
	PUSH	BC		;100
	LD	HL,Z0000	;101
Z0002:	LD	A,(HL)		;104
	PUSH	HL		;105
	CP	00H		;106
	JR	Z,Z0001		;108
	LD	E,A		;10A
	LD	C,02H		;10B
	CALL	05H		;10D
	POP	HL		;110
	INC	HL		;111
	JR	Z0002		;112
Z0001:	POP	HL		;114
	POP	BC		;115
	RET			;116
Z0000:	DEFB	0DH,0AH,'ookami wa nikusyoku',0DH,0AH	;117
	END


        出力例	その2( -d -m オプション使用時)

	.Z80
	ASEG
	ORG	100H
	PUSH	BC		;100	C5 		.
	LD	HL,Z0000	;101	21 17 01 	!..
Z0002:	LD	A,(HL)		;104	7E 		~
	PUSH	HL		;105	E5 		.
	CP	00H		;106	FE 00 		..
	JR	Z,Z0001		;108	28 0A 		(.
	LD	E,A		;10A	5F 		_
	LD	C,02H		;10B	0E 02 		..
	CALL	05H		;10D	CD 05 00 	...
	POP	HL		;110	E1 		.
	INC	HL		;111	23 		#
	JR	Z0002		;112	18 F0 		..
Z0001:	POP	HL		;114	E1 		.
	POP	BC		;115	C1 		.
	RET			;116	C9		.
Z0000:	DEFB	0DH,0AH,'ookami wa nikusyoku',0DH,0AH	;117
	END



          細かい説明

   上のが出力例ですが右側のコメントの数字は16進であらわしたロケーショ
    ンカウンターです。
    出力された逆アセンブルリストを再アセンブルすると基本的にバグがなけ
  れば逆アセンブルしたファイルと同じファイルができるはずですが、冗調な
  コードを生成するアセンブラでは同じファイルとなりません。
   アセンブラはニーモニックを忠実にコード変換すると思われがちですが、
  ニーモニックにはないのに NOP命令コードを挿入するものもあります。
   冗長なコードを生成するアセンブラ使用による再アセンブル失敗を逆アセ
  ンブラ hoja のバグと勘違いされないよう願います。
   MACRO80はデフォルトでは先頭に勝手にNOP命令コードを 3つも挿入します
    。(ASEG疑似命令指定をするとされません。)
   SMALL-MACはデフォルトでは先頭に"JP 103H"というコードを勝手に挿入し
    ます。
   またCP/M用のセルフアセンブラでアセンブルした場合は必ずファイルサイ
    ズが 128バイトの倍数となり、もとのファイルサイズと異なることもありま
  す。
   できれば再アセンブルする場合はアブソリュートアセンブラでされること
  をおすすめします。
   リロケータブルアセンブラでは上記などの理由で問題が起こることが考え
  られるからです。

    "JR $-10D"のような相対表記がデフォルトですが-uオプションにより
    "JR 130H"のような絶対番地表記をできます。
   しかし、JR命令の絶対番地表記は多くのアセンブラではエラーになります
    のでアセンブラにかける場合は注意してください。

    未定義命令はアセンブルすることを考えてコメントとして出力しますので
    アセンブルエラーになる心配はありません。(アセンブラによりますが)
   Z280に同じ命令がある場合はZ280のニーモニックを使用していますが、無
    いものは適当なニーモニックにしています。
   未定義命令のニーモニックは未定義であることを、はっきりさせるために
  アスタリスク(*)を先頭に付けています。
   もちろんZ80のには正式な未定義命令のニーモニックはありません。
   未定義命令は例えば次のように出力されます。

	ORG	100H
	ADD	A,A		;100
	DEFB	0DDH,067H
	;*LD	IXH,A		;101
	DEFB	0FDH,061H
	;*LD	IYH,C		;103
	DEFB	0DDH,07CH
	;*LD	A,IXH		;105
	DEFB	0FDH,04DH
	;*LD	C,IYL		;107
	DEFB	0DDH,064H
	;*LD	IXH,IXH		;109
	DEFB	0FDH,06DH
	;*LD	IYL,IYL		;10B
	ADD	A,A		;110
	END

   IXHはIXレジスタの上位バイトを、IXLはIXレジスタの下位バイトをあらわ
    します。
   IYHはIYレジスタの上位バイトを、IYLはIYレジスタの下位バイトをあらわ
    します。
   IXとIYは16ビットレジスタで 8ビットに分解できないというのがたてまえ
    ですが実際にはできるようです。
   しかし、未定義命令は CPU製造会社側で動作保証されていませんので必ず
    しも動作するという保証はないことに注意してください。
  (ただし、Z280では定義されていたりする。)

   "SLL"未定義命令は SRL の反対の動作をします。
   "IN F,(C)"未定義命令はIN A,(C)で変化するレジスタがAからFに変わった
  ものです。
   "SLL"と"IN F,(C)"のみ Z280でも定義されていません。

      ニーモニックに変換できないデータはDEFB疑似命令で処理します。
      hoja は中間ファイルを作らずメモリのみで処理します。
      最大逆アセンブル領域は64Kで、最終メモリ番地は64Kに収まっていないと
    いけません。この制限は hoja の制限ではなく Z80 CPU の制限です。
   大きなファイルも -S,-eオプションで逆アセンブル領域を狭くすることに
    より逆アセンブルできます。(ただし、開始番地、終了番地はFFFFH以下)
      -S,-e オプションを使えば、部分逆アセンブルのためにファイルを分割す
    る必要はありません。
      2.0未満のバージョンは、バグと手抜きにおいて、いかなる場合でもファイ
    ルサイズが64Kを越えるものは分割しないと逆アセンブルできませんでした。
 
   文字列の判別ですが、デフォルトでは英数字で半角片仮名は判別しません。
   半角片仮名はオプションをつけることにより判別しますが誤った判別をす
    る確率が高くなります。
   文字列の判別は完全ではありませんが、文字列ではないのに文字列と間違
  える確率は低いです。
   完全に文字列を判別する逆アセンブラはこの世にありませんので完全でな
  いということでがっかりしないでください。



          対応する未定義命令の全リスト

	DEFB	0DDH,07CH 	;*LD	A,IXH
	DEFB	0FDH,07CH 	;*LD	A,IYH
	DEFB	0DDH,07DH 	;*LD	A,IXL
	DEFB	0FDH,07DH 	;*LD	A,IYL
	DEFB	0DDH,044H 	;*LD	B,IXH
	DEFB	0FDH,044H 	;*LD	B,IYH
	DEFB	0DDH,045H 	;*LD	B,IXL
	DEFB	0FDH,045H 	;*LD	B,IYL
	DEFB	0DDH,04CH 	;*LD	C,IXH
	DEFB	0FDH,04CH 	;*LD	C,IYH
	DEFB	0DDH,04DH 	;*LD	C,IXL
	DEFB	0FDH,04DH 	;*LD	C,IYL
	DEFB	0DDH,054H 	;*LD	D,IXH
	DEFB	0FDH,054H 	;*LD	D,IYH
	DEFB	0DDH,055H 	;*LD	D,IXL
	DEFB	0FDH,055H 	;*LD	D,IYL
	DEFB	0DDH,05CH 	;*LD	E,IXH
	DEFB	0FDH,05CH 	;*LD	E,IYH
	DEFB	0DDH,05DH 	;*LD	E,IXL
	DEFB	0FDH,05DH 	;*LD	E,IYL
	DEFB	0DDH,067H 	;*LD	IXH,A
	DEFB	0FDH,067H 	;*LD	IYH,A
	DEFB	0DDH,060H 	;*LD	IXH,B
	DEFB	0FDH,060H 	;*LD	IYH,B
	DEFB	0DDH,061H 	;*LD	IXH,C
	DEFB	0FDH,061H 	;*LD	IYH,C
	DEFB	0DDH,062H 	;*LD	IXH,D
	DEFB	0FDH,062H 	;*LD	IYH,D
	DEFB	0DDH,063H 	;*LD	IXH,E
	DEFB	0FDH,063H 	;*LD	IYH,E
	DEFB	0DDH,064H 	;*LD	IXH,IXH	
	DEFB	0FDH,064H 	;*LD	IYH,IYH	
	DEFB	0DDH,065H 	;*LD	IXH,IXL	
	DEFB	0FDH,065H 	;*LD	IYH,IYL	
	DEFB	0DDH,026H,099H 	;*LD	IXH,099H
	DEFB	0FDH,026H,099H 	;*LD	IYH,099H
	DEFB	0DDH,06FH 	;*LD	IXL,A
	DEFB	0FDH,06FH 	;*LD	IYL,A
	DEFB	0DDH,068H 	;*LD	IXL,B
	DEFB	0FDH,068H 	;*LD	IYL,B
	DEFB	0DDH,069H 	;*LD	IXL,C
	DEFB	0FDH,069H 	;*LD	IYL,C
	DEFB	0DDH,06AH 	;*LD	IXL,D
	DEFB	0FDH,06AH 	;*LD	IYL,D
	DEFB	0DDH,06BH 	;*LD	IXL,E
	DEFB	0FDH,06BH 	;*LD	IYL,E
	DEFB	0DDH,06CH 	;*LD	IXL,IXH
	DEFB	0FDH,06CH 	;*LD	IYL,IYH
	DEFB	0DDH,06DH 	;*LD	IXL,IXL
	DEFB	0FDH,06DH 	;*LD	IYL,IYL
	DEFB	0DDH,02EH,099H 	;*LD	IXL,099H
	DEFB	0FDH,02EH,099H 	;*LD	IYL,099H
	DEFB	0DDH,084H 	;*ADD	A,IXH
	DEFB	0FDH,084H 	;*ADD	A,IYH
	DEFB	0DDH,085H 	;*ADD	A,IXL
	DEFB	0FDH,085H 	;*ADD	A,IYL
	DEFB	0DDH,08CH 	;*ADC	A,IXH
	DEFB	0FDH,08CH 	;*ADC	A,IYH
	DEFB	0DDH,08DH 	;*ADC	A,IXL
	DEFB	0FDH,08DH 	;*ADC	A,IYL
	DEFB	0DDH,094H 	;*SUB	IXH
	DEFB	0FDH,094H 	;*SUB	IYH
	DEFB	0DDH,095H 	;*SUB	IXL
	DEFB	0FDH,095H 	;*SUB	IYL
	DEFB	0DDH,09CH 	;*SBC	A,IXH
	DEFB	0FDH,09CH 	;*SBC	A,IYH
	DEFB	0DDH,09DH 	;*SBC	A,IXL
	DEFB	0FDH,09DH 	;*SBC	A,IYL
	DEFB	0DDH,0A4H 	;*AND	IXH
	DEFB	0FDH,0A4H 	;*AND	IYH
	DEFB	0DDH,0A5H 	;*AND	IXL
	DEFB	0FDH,0A5H 	;*AND	IYL
	DEFB	0DDH,0ACH 	;*XOR	IXH
	DEFB	0FDH,0ACH 	;*XOR	IYH
	DEFB	0DDH,0ADH 	;*XOR	IXL
	DEFB	0FDH,0ADH 	;*XOR	IYL
	DEFB	0DDH,0B4H 	;*OR	IXH
	DEFB	0FDH,0B4H 	;*OR	IYH
	DEFB	0DDH,0B5H 	;*OR	IXL
	DEFB	0FDH,0B5H 	;*OR	IYL
	DEFB	0DDH,0BCH 	;*CP	IXH
	DEFB	0FDH,0BCH 	;*CP	IYH
	DEFB	0DDH,0BDH 	;*CP	IXL
	DEFB	0FDH,0BDH 	;*CP	IYL
	DEFB	0DDH,024H 	;*INC	IXH
	DEFB	0FDH,024H 	;*INC	IYH
	DEFB	0DDH,02CH 	;*INC	IXL
	DEFB	0FDH,02CH 	;*INC	IYL
	DEFB	0DDH,025H 	;*DEC	IXH
	DEFB	0FDH,025H 	;*DEC	IYH
	DEFB	0DDH,02DH 	;*DEC	IXL
	DEFB	0FDH,02DH 	;*DEC	IYL
	DEFB	0CBH,037H 	;*SLL	A
	DEFB	0CBH,030H 	;*SLL	B
	DEFB	0CBH,031H 	;*SLL	C
	DEFB	0CBH,032H 	;*SLL	D
	DEFB	0CBH,033H 	;*SLL	E
	DEFB	0CBH,034H 	;*SLL	H
	DEFB	0CBH,035H 	;*SLL	L
	DEFB	0CBH,036H 	;*SLL	(HL)
	DEFB	0DDH,0CBH,099H,036H 	;*SLL	(IX-103D)
	DEFB	0FDH,0CDH,099H,036H 	;*SLL	(IY-103D)
	DEFB	0EDH,070H 	;*IN	F,(C)


        ソースファイルについて

       Java版以外は全てC言語(K&R もしくはほぼK&R)で作られています。
       Java版も一度C言語ソースをNOVOSOFTのC2J ConverterというC言語から
   JavaへのトランスレーターでJavaソースに変換してからJavaソースを変
   更という形で作りました。
       NOVOSOFTのC2J Convererにはバグがあり、コンパイルできないJavaソ
   ースを出力したり全角文字が文字化けするソースを出力したりしたので
   C言語のみで作成することはできずJavaソースをいじるしか方法がありま
   せんでした。
    従って、Javaソースに完全対応するC言語ソースは存在しません。
    Java版のソースは、Javaソースしかないと言えます。
    Javaソースにある程度対応するC言語ソースはhoja Ver 2.01 UNIX版
   のソースで、UNIX版に同梱しています。
       最初に8ビットパソコン用のC言語コンパイラのBDS Cを用いたため、内
   部変数を極力使わず外部変数を多く使うソースのなごりが今も残っています。
       BDS Cコンパイラは内部変数を使うと目に見えて低速化する特徴があっ
   たからです。
    


        配布、改変などの制限について

        NOVOSOFTのC2J Converterのランタイムライブラリを同梱していて、
   そのライブラリがGPLなので、GPLのライセンスに従います。
        NOVOSOFTはGPLとしていますがバージョンの記述が見当たりません。
    NOVOSOFT C2J Converterのリリース時のGPLの最新バージョンは2でした。
    GPLは改変も再配布もできますが、再配布する場合はソースの公開義務
   が発生します。


        NOVOSOFT C2J Converterとそのランタイムライブラリについて

    hoja for Javaでは、Javaソースの作成にNOVOSOFT C2J Converterを使
      用しました。
        http://tech.novosoft-us.com/product_c2j.jsp
    さらにC2J Convertのランタイムライブラリを同梱して利用しています。


      hoja に対するバグ報告、質問、意見などは下記までメールください。

                admin@nabeta.tk


                     2014年2月25日           大場正輝
鍋田辞書サイトのトップページ