Skip to content

Releases: kg68k/dis

4.03 (2023-10-26)

25 Oct 15:42
Compare
Choose a tag to compare
  • テーブルファイルで演算子の||&&が同じ優先順位になっていたエンバグを修正。
  • gcc 13でビルドできるように微調整。
  • doscall.mac、fefunc.mac、iocscall.macをruka-macro 3.0.0に更新(定義内容は変更なし)。

2024-11-10: Windows (x64)版バイナリ(dis403_win.zip)を追加しました。

  • ソースコードに変更はありませんが、Visual StudioのCMakeモードでビルドしてあります。
  • doscall.mac、fefunc.mac、iocscall.macを更新しています。

v4.01

21 May 16:38
Compare
Choose a tag to compare
  • テーブル内にラベルがある場合に内部エラーが発生する不具合を修正。
  • テーブルがセクション境界を跨いでしまう不具合を修正。

v4.00

23 Apr 11:47
Compare
Choose a tag to compare

変更点は多岐にわたりますが、基本的にはdis 3.16からそのまま置き換えて使えます。

新機能(オプションスイッチ)

  • 環境変数DIS_OPTからオプション設定を取得する。
    未設定の場合は従来と同じくdis_optを参照する。
  • -Q 環境変数dis_optを参照しない(dis 2.79のオプションを復活)。
  • --deterministic 決定論的逆アセンブル。
  • --strip-include-path .includeにパス名を付けない。
  • --reltbl-zero=num 相対オフセットテーブルのオフセット値として0を認める。
    既定で1(先頭のみ認める)。

新機能(命令の解析)

  • 実効アドレス(bd.l,pc)、([bd.l,pc])でベースディスプレースメントがアドレス
    依存している場合は未定義命令とみなす。
  • ビット演算命令のバイト即値の上位バイトのチェックを削除。
    (btst #-1,d0などを未定義命令とみなさないようにした)
  • FMOVEM.Xで<ea>とモードの不一致を未定義命令とみなす。
  • 下記命令の未使用レジスタフィールドのチェックを追加。
    • CINVA、CPUSHA (-R1)
    • 68040/68060のPFLUSHA (-R1)
    • 68851/68030のPFLUSHA (<ea>)
    • PFLUSH FC,MASK (-R1)
    • PTEST FC,,#0 (-R1)
    • FMOVECR (<ea>)
    • FMOVE.P FPm,<ea>{Dn} (k-Factor未使用ビット)
    • FMOVE.<fmt> FPm,<ea> (k-Factor)

新機能(データ構造の解析)

  • -d指定時にデバイスヘッダの循環を検出して解析を打ち切る。
  • ラベルファイルで小文字で指定したアドレスの解析を、全てのラベルを登録した
    後に変更。
  • データ直前の$ffffをDOS _CHANGE_PRではなく.dc -1として認識する。

新機能(相対オフセットテーブルの解析)

  • 相対オフセットテーブル末尾のnopを検出する。
  • 相対オフセットテーブルの解析をデータ領域解析後に変更。
  • 相対オフセットテーブルとして判定した領域はプログラムとして判定されない
    ようにした。
  • 自動認識する相対オフセットテーブルのパターンを追加。
    LEA + MOVE + JMP|JSR
    LEA + MOVE + PEA
    LEA + ADDA
    MOVE + LEA|PEA

新機能(アセンブリ表記)

  • BSS内でサイズが判明している領域を下記の.ds疑似命令で出力する。
    .ds.d(=quad)、.ds.s、.ds.d、.ds.x、.ds.p
  • 出力ソースコード冒頭コメントの16進数を$つき8桁に変更。
  • プログラムとデータの切り換え時に空行を出力する。
  • DOS _KILL_PRの直後に空行を出力する。
  • -B指定時にFBRAの直後にも空行を出力する。
  • -N指定時に.dc.w、.dcb.w、.ds.wのサイズを削除する。
  • -v指定時に-M、-Nオプションに対応。
  • -a指定時にラベルと.end疑似命令をコメント対象から除外。

新機能(その他)

  • -m6888x,2/3と-m68040/68060の併用をエラーにする。
  • -m6888x,4と-m68060/cpu32の併用をエラーにする。
  • -zで奇数アドレスの指定をエラーにする。
  • --helpでタイトルを標準エラー出力ではなく標準出力へ出力する。
  • --helpで表示する使用法を機能別に分類した。
  • ラベルファイル(-e)が開けない場合はエラー終了する。
  • ラベルファイルの属性文字列に'H'(HIDDEN属性)を追加。
  • ヘッダファイル(--header、$dis_header)が開けない場合はエラー終了する。
  • ファイル出力バッファを1MiB~16KiBの可変サイズに変更。
  • 出力ファイルの上書き確認を実行ファイル読み込み前に早めた。
  • 表示文字列を改善。

不具合修正(命令の解析)

  • CAS2命令が逆アセンブルできない不具合を修正。
  • PLPA命令が-m68040で逆アセンブルできてしまう不具合を修正。
  • PTEST命令が-m68060で逆アセンブルできてしまう不具合を修正。
  • 実効アドレス(bd,zpc)で、bdがアドレスに依存しない定数のときもプログラム
    内のラベルとして登録してしまう不具合を修正。

不具合修正(データ構造の解析)

  • データ領域を解析してプログラム領域として判別し、かつその解析で直後の
    ブロックのデータ形式が判明して更新した場合、それが反映されずにプログラム
    領域かどうかの解析を行ってしまう不具合を修正。
  • 相対オフセットテーブルの末尾を自動検出した場合、その直後のプログラム
    領域がデータ領域になってしまう不具合を修正。

不具合修正(アセンブリ表記)

  • 実効アドレスの文字列化でエンバグしていた部分を修正。
  • FDNEGがFRNEGと出力される不具合を修正。
  • 68040以降で追加された浮動小数点命令で.cpuが出力されない不具合を修正。
  • .dc.pが-Wオプションを無視して.dcb.pとして出力される不具合を修正。
  • -0.0が内部表現で出力される不具合を修正。
  • 非正規化数が0f0として出力されることがある不具合を修正。
  • 相対オフセットテーブルの解析後にテーブル内の半端な位置にラベルが登録
    されると、余分にオフセット値を出力する不具合を修正。
  • -s2指定時にプログラム範囲外のシンボルが定義されない不具合を修正。
  • -S指定時に.endだけが別ファイルに出力されることがある不具合を修正。

不具合修正(テーブルファイル)

  • -qが未指定だとテーブルに関するメッセージが表示されない不具合を修正。
  • .dc.b、.dc.wでオペランド表現式の値が識別子のサイズより大きい場合に
    上位桁が無視される不具合を修正。
  • ロングワード指定されていないアドレス依存部によりテーブル数を自動判断
    した際に、そこまでの半端なデータをテーブルに含めてしまう不具合を修正。
  • .evenで$00でないバイト値を受け付ける不具合を修正。
  • テーブル数の自動判断時に0個(テーブルではない)と判断した場合に終了しなく
    なる不具合を修正。
  • テーブル解析中にPCが進まないと終了しなくなる不具合を修正。

OSKDIS版の変更点

  • 動作環境をOS-9/X680x0からHuman68kに変更。
  • dis 2.79までとdis 3.16までに発生したコンパイルエラーを修正。
  • psectとcpu疑似命令の間に改行がない不具合を修正。
  • L00xxxx(a6)形式のラベルがゼロサプレスされる不具合を修正。
  • Excptエントリを解析せずにプログラム領域として登録する不具合を修正。
  • オプション設定の既定値を-W0 --old-syntaxに変更。
  • ワードテーブルのオフセット値0の項目をdc 0として出力する。

ソースコード上の変更

  • XCコンパイラ向けの記述を削除。
  • 移植性の向上(ただし浮動小数点の文字列化は環境に依存する)。
  • disasmonly.c: generate.cに統合した。
  • ea.[ch]: 実効アドレスの処理を新規作成した。
  • eval.[ch]: テーブル行の構文解析・評価を新規作成した。
    手書きのパーサに差し替えたことで、bisonが必要なeval.yを廃止。
  • fpu.[ch]: 浮動小数点命令の処理を新規作成した。
  • human.[ch]: Human68k実行ファイル用の処理を分離した。
  • mmu.[ch]: MMU命令の処理を新規作成した。
  • opstr.[ch]: オペコード文字列の処理を新規作成した。
  • osk.[ch]: OSKDIS用の処理を分離した。
  • output.[ch]: ファイル出力処理を作り直した。
  • address型をM68K上のアドレス値(4バイト)専用とし、実行環境上でファイル
    内容を指すポインタは新設したcodeptr型に分離した。