Browse Source

initial dis.w32 by rururutan, in Shift_JIS

master
vampirefrog 2 years ago
commit
f55b4c5a26
  1. 827
      ChangeLog.txt
  2. 340
      GPL.TXT
  3. 1469
      README.DOC
  4. 41
      README.W32
  5. 404
      dis_option.1
  6. 204
      include/doscall.mac
  7. 183
      include/fefunc.mac
  8. 254
      include/iocscall.mac
  9. 1123
      include/sxcall.mac
  10. 56
      labelfile.5
  11. 148
      src/Makefile
  12. 728
      src/analyze.c
  13. 41
      src/analyze.h
  14. 277
      src/analyze2.c
  15. 60
      src/avl/Makefile
  16. 744
      src/avl/avl.c
  17. 130
      src/avl/avl.h
  18. 464
      src/avl/avl.tex
  19. 4077
      src/disasm.c
  20. 163
      src/disasm.h
  21. 152
      src/disasmonly.c
  22. 127
      src/estruct.h
  23. 178
      src/etc.c
  24. 109
      src/etc.h
  25. 603
      src/eval.y
  26. 244
      src/fpconv.c
  27. 46
      src/fpconv.h
  28. 2848
      src/generate.c
  29. 57
      src/generate.h
  30. 201
      src/getopt.c
  31. 21
      src/getopt.h
  32. 77
      src/global.h
  33. 161
      src/hex.c
  34. 104
      src/hex.h
  35. 372
      src/include.c
  36. 30
      src/include.h
  37. 353
      src/label.c
  38. 71
      src/label.h
  39. 293
      src/labelcheck.c
  40. 316
      src/labelfile.c
  41. 21
      src/labelfile.h
  42. 758
      src/main.c
  43. 157
      src/offset.c
  44. 28
      src/offset.h
  45. 727
      src/option.c
  46. 21
      src/option.h
  47. 433
      src/output.c
  48. 46
      src/output.h
  49. 139
      src/ports/Makefile_Cyg_MinGW
  50. 139
      src/ports/Makefile_Cyg_MinGW.org
  51. 139
      src/ports/Makefile_Cygwin
  52. 139
      src/ports/Makefile_FreeBSD
  53. 139
      src/ports/Makefile_Linux
  54. 166
      src/ports/ports.txt
  55. 177
      src/search.c
  56. 360
      src/symbol.c
  57. 58
      src/symbol.h
  58. 362
      src/table.c
  59. 76
      src/table.h
  60. 18
      src/version.c
  61. 475
      table.doc
  62. 146
      tablefile.5

827
ChangeLog.txt

@ -0,0 +1,827 @@
2010-05-25(火) Tachibana
* dis version 3.16 として公開。
* ドキュメント類修正、src/ports/ports.txt 新規作成。
2010-05-23(日) Tachibana
* *.[ch]: 移植時にエラーや警告が出ないように調整。明示的なキャス
トや #include <~.h> の追加など。
* Makefile, fpconv.c: 従来は printf() が "%Lg"(long dobule) に対
応していれば HAVE_LDBL_DOPRNT を定義していたが、逆にして対応して
いない場合に NO_PRINTF_LDBL を定義するようにした。
過去ログ見てたら
> -DNO_LDBL_DOPRNT を -DHAVE_LDBL_DOPRNT に変更.
なんてのがあった……。
* labelfile.c (get_line): getline から名称変更。glibc に同名関数
があるため。
* labelfile.h (getline, COMMENT_CHAR, SYMBOL_TERMINATE_STRING):
宣言と定義を削除。
* main.c (loadfile): サイズが 0~1 バイトで、拡張子が .r 以外の
ファイルを指定した時にきちんとエラーに飛ぶようにした(従来は読み
込んでいないバッファを参照していたが、その後の読み込みでエラーに
飛ぶので結果的にはセーフ)。
* (loadfile): open() の第3引数 S_IRUSR を削除(O_CREAT 時にだけ必
要な引数)。該当部分の OSKDIS 用コードを削除して統合。
2010-05-17(月) Tachibana
* src/global.h: VOLATILE の定義を削除。
* src/etc.[ch] (err): 上記変更に対応。代わりに __attribute__
((noreturn)) を追加。
* src/table.c (read_tablefile): コメント行の記号に「;」を追加。
2010-05-16(日) Tachibana
* src/estruct.h (xheader, os9header): コンパイル環境によっては構
造体に余計なパディングが入ってしまい、正しく読み取れない不具合を
修正(gcc 拡張機能を使用)。
* (zheader): main.c から移動。
* (ctimez): ctime() がエラー(NULL)になった時に不正なアドレスに書
き込んでいたのを修正し、"(invalid time)" を返すようにした。
PD libc では常に有効なアドレスが返るが、規格上はエラー時に NULL
が返る。コンパイル環境によっては不正なタイムスタンプの場合などに
問題となる。
* src/include.c (search_and_readfile): dis_inc と include を初期
化しないまま参照することがある不具合を修正。
* src/main.c: QUICK_YES_NO 定義時のみ getch() を宣言するようにし
た。また __HUMAN68K__ 定義時に conio.h、未定義なら curses.h を読
み込むようにした(従来は __FreeBSD__ 定義時に curses.h)。
* (print_title): Cygwin/MinGW/Linux 対応。処理が長くなってきたの
で OSKDIS の表示形式を調整。
* src/option.c (usage): ヘルプを標準エラー出力ではなく標準出力に
表示するようにした。
* etc.h: __mc68000__ 定義時に __BIG_ENDIAN__ を定義するようにし
た。以後は __BIG_ENDIAN__ の有無だけを見る。ほとんどの環境で
Makefile でエンディアンを定義する必要がなくなったはず。
* etc.h (peekw, peekl), main.c (loadfile): 上記変更に対応。
2006-03-18(土) Tachibana Eriko <eririn@spica.freemail.ne.jp>
* dis version 3.15 として公開。
2006-03-15(水) Tachibana Eriko <eririn@spica.freemail.ne.jp>
* src/disasm.c (op04): -m680x0 指定時に link.w 命令を逆アセンブ
ルすると、68000 命令なのに .cpu 68020 が出力されてしまう不具合を
修正。
* README.DOC: ドキュメント修正。
2000-05-18(木) Tachibana Eriko <eririn@spica.freemail.ne.jp>
* dis version 3.14 released.
* analyze.c (analyze): 一昨日の変更が期待通りに動作していなかっ
たのを修正.
* disasm.c (op0f): fbra が条件分岐として扱われていた不具合を修正
(BCCOP から JMPOP に変更).
2000-05-16(火) Tachibana Eriko <eririn@spica.freemail.ne.jp>
* analyze.c (analyze): JMPOP/JSROP でメモリ間接アドレッシングの
ときは分岐先の解析を行わないようにした(JMPOP は絶対ショートも).
間接参照先のラベルを登録するようにした.
* 上記変更によりプログラム領域の検索中にバスエラーが発生すること
がある不具合を修正. ただし、対症療法なので、もしかしたらまだ発生
することがあるかも知れない.
* disasm.c (setEA): bd を省略すると (,d0.l) というように出力して
しまう不具合を修正.
version 3.13
-a--rw- 114214 1999-09-01 00:04:32 dis.x
その他:
環境変数 dis_header、dis_sxmac に空文字列が指定されていた場合は
無指定と見なすようにした.
generate.c の MIN_BIT(x) のマクロ定義を (((x) ^ ((x) - 1)) & (x))
から ((x) & -(x)) に変更.
LIBC をぱっちその14に、bison を version 1.27 human68k-1.1 に変
更.
version 3.12
-a--rw- 114212 1999-04-25 04:05:32 dis.x
出力ファイル関係:
"sr" が "ccr" になってしまう不具合を修正.
version 3.11
-a--rw- 114282 1999-01-03 01:35:18 dis.x
オプション関係:
-v --exclude-iocscall-mac でバスエラーになる不具合を修正.
出力ファイル関係:
-M で IOCS コールに(moveq の)コメントが付く不具合を修正.
version 3.10
-a--rw- 114336 1998-12-23 03:02:24 dis.x
本日の目玉:
FreeBSD 上で動作するようにした(リトルエンディアンも問題なし!!).
オプション関係:
--{in,ex}clude-fefunc-mac オプションを指定するとエラーになってい
た不具合を修正.
入力ファイル関係:
$dis_sxmac 読み込み時にメモリを破壊する不具合を修正.
アドレス境界情報のシンボル(*filename*)を無視するようにした.
出力ファイル関係:
-A によるコメントが cmpi.w 等に付かなかった不具合を修正.
moveq.l にもコメントを付けるようにした.
.data セクションがない場合に -S で正しくファイルが作成されなかっ
た不具合を修正.
-A で adda/suba を常に add/sub と表記するようにした. addq/subq
への最適化を防止する為、必要ならサイズを付ける. addi/subi も演算
先がデータレジスタでなければ同様に処理する.
-v -B で bra の後に空行が入らない不具合を修正.
--exclude-xxx-mac 指定時にヘッダ部分に .include (null) と出力さ
れてしまったので、何も出力しないようにした.
68030 の pmove、68040/68060 の plush や、MMU レジスタ bad0、bac0、
mmusr を使用した命令が正しく出力できなくなっていた不具合を修正.
その他細かい不具合を修正.
-x で相対オフセットテーブルにもコメントを付けるようにした.
FreeBSD 版では fstat() で出力先の同一検査を行うようにした.
解析関係:
chk2 及び cmp2 のアドレッシングモードが全てとなっていたのを制御
モードに修正.
-m68000 の場合にも tst 命令で 68020 以降で拡張されたアドレッシン
グを受け付けていた不具合を修正.
その他:
いろいろと高速化(したはず…).
不要になっていた stack.s を削除.
Makefile.bsd を追加.
version 3.00
-a--rw- 116854 1998-10-17 00:38:08 dis.x
オプション関係:
--include-XXX-mac=<file> 及び --exclude-XXX-mac オプション追加.
XXX は doscall、iocscall、fefunc のいずれか.
--header=<file> オプション追加.
-mcpu32 オプション追加.
出力ファイル関係:
テーブル末尾のラベルが二重に出力される不具合を修正.
同一アドレスに対し複数のセクションにラベルが定義されていた場合に
最後のセクションに全て出力されていた不具合を修正.
stack セクションの出力に対応(シンボルテーブルが存在する場合のみ).
テーブル関係:
テーブルの式に 0x から始まる 16 進数を記述できるようにした.
解析関係:
解析中にスタック溢れを監視してバスエラーが起きる前に強制終了する
ようにした.
CPU32 の命令セットに対応. ただし .cpu の切り換えは行わない.
その他:
ソースコードの大幅改修.
ソースコードデバッガ情報は全く再現できなかった. この事をドキュメ
ントに加筆.
バージョンを 3.00 にして開発終了とする.
version 2.85
-a--rw- 118966 1998-07-17 22:50:38 dis.x
オプション関係:
-z オプション指定時にファイル形式エラーになる不具合を修正. また、
アドレスの指定に $ や 0x を付けられるようにした(付けなくても 16
進数として扱いますが).
サブルーチンコール命令の直後に引数を置くプログラムを解析する為の
-G オプション作成.
出力ファイル関係:
ファイルが存在していた場合、r(rename) でファイル名を変更出来るよ
うにした.
二バイト半角文字の扱いを修正.
解析関係:
テーブル終了アドレスのラベル属性が消えてしまう不具合を修正.
その他:
-o オプションの説明を修正(デフォルトは 60 で、バイト数ではなく桁
数だった).
実行ファイルの読み込みバッファを 16 バイト余分に確保するようにし
た.
ドキュメント修正.
version 2.83
-a--rw- 118402 1998-06-03 01:01:46 dis.x
オプション関係:
外部定義シンボルの出力を指定する -s[num] オプション作成. -s2 な
ら .xdef も使いシンボルテーブルをほぼ完全に再現する. 従来の -s
オプションから機能が変わったので注意して下さい.
-m68008 を -m68000 と等価に扱うようにした.
隠しオプション --x、--r、--z 作成.
入力ファイル関係:
X/Z 形式実行ファイルを、先頭の 2 バイトの内容で判別するようにし
た(従来は拡張子).
シンボル関係の各種バッファを動的に確保するようにした. 定義数の上
限がなくなったので -s オプションを削除し、別の機能を割り当てた.
シンボルが多すぎるとメモリを破壊する不具合を修正.
未定義のシンボル属性を警告するようにした.
出力ファイル関係:
定数の外部定義に -C、-Z オプションが効くようにした. -s2 指定時は
外部定義のラベルも .xref で出力するようにした.
拡張精度実数値を実数表記で出力する場合、もし正確に変換できなかっ
たら内部表記で出力するようにした.
標準出力へ書き込む時は自動的に -q を指定するようにした.
解析関係:
BSS 以降もアドレス依存データや 0x4e75(rts) を検索していた不具合
を修正. BSS が細切れになるバグが直った筈.
-j オプション指定時は、奇数アドレスへの分岐を正しい命令として認
めるようにした(ただし分岐先はプログラムと見なさない).
末尾のラベルが削除されてしまい、不正なメモリを参照してソースコー
ドを出力し続けてしまう不具合を修正.
テーブル関係:
浮動小数点を出力する命令 .dc.s、.dc.d、.dc.x、.dc.p を新設. ただ
しオペランド表現式は記述できず、pc の値を出力するのみ.
byte、ascii、asciiz、lascii 以外の命令を BSS 内で使用できるよう
にした(何に使うのか知らないけど…).
各種バッファを動的に確保するようにした(定義数の上限がなくなった).
定義が多すぎるとメモリを破壊する不具合を修正.
ソースコード関係:
-DNO_LDBL_DOPRNT を -DHAVE_LDBL_DOPRNT に変更.
-DHAVE_STRTOX を追加.
他は多すぎるので省略.
その他:
配布規定を GPL に準拠するようにした.
README.DOC 修正. 今回の改良で残った不具合を仕様に変更.
dis_option.1 修正. -s の解説を変更、-P 削除.
tablefile.5 追加.
version 2.82
-a--rw- 116442 1998-05-14 21:09:40 dis.x
解析関係:
-v オプションを指定するとバスエラーが発生する不具合を修正.
ソースコード関係:
eprintf() の返値を void から int に変更.
version 2.81
-a--rw- 117732 1998-03-22 06:11:46 dis.x
オプション関係:
-Y オプションを新設. 指定した場合は、最初にカレントディレクトリ
からインクルードファイルを検索する.
入力ファイル関係:
識別子 READ_FEFUNC_H を定義してコンパイルすれば、fefunc.mac では
なく fefunc.h を読み込むようにした.
インクルードファイルに定義されたシンボル名によっては、認識されな
いことがある不具合を修正.
出力ファイル関係:
デバイスヘッダに参照されないラベルが出力される不具合を修正.
その他:
識別子 QUICK_YES_NO を定義してコンパイルすれば、上書き確認を
version 2.79 互換('y'のみで決定)になるようにした.
ドキュメント修正.
version 2.80
-a--rw- 117758 1998-02-11 02:38:22 dis.x
サポートの引き継ぎに伴ない、patchlevel ではなく version で管理す
るようにした.
出力ファイル関係:
ラベル/テーブルファイル名を省略した場合に、入力ファイル名から補
完するようになってしまっていたエンバグを修正.
fpconv_[sdx]()で±0.0を特別扱いして最初に処理するようにした(これ
により拡張精度で+0.0が内部表現で出力される不具合を修正).
拡張精度を内部表現で出力する閾値を大きくした.
その他:
タイトル行に作成年月日を表示するようにした.
READMEを削除し、全体のマニュアルとしてREADME.DOCを書き下した.
doscall.mac/iocscall.mac/fefunc.macも添付するようにした.
・備考
 version 2.80 以降は version 2.79 をベースにしています. それ以前の
version 2.78 patchlevel 1~5 のベースは version 2.78ですが、これは私が
version 2.79 が存在していることを知らなかった為です.
 version 2.78 patchlevel 1~5 は version 2.79 と version 2.80 のあいだ
のあたりに位置します.
version 2.78 patchlevel 5
-a--rw- 117576 1997-11-29 00:08:30 dis.x
入力ファイル関係:
インクルードファイルの疑似命令(equ/macro)が大文字だと認識出来な
くなっていたエンバグを修正.
定義が一つもなかった場合のエラーメッセージがおかしかった不具合を
修正. 一つもなくてもエラー終了しないようにした.
fefunc.dis/fefunc.hではなくfefunc.macを読み込むようにした.
-u1が指定されていなければ$sx_macを読み込まないようにした.
出力ファイル関係:
move16の絶対ロングアドレッシングに()が付かない不具合及び、--old-syntax
を指定するとハングアップする不具合を修正.
link命令のエリア長を16進数で出力するようにした.
解析関係:
andi/ori/eori to ccrがワードサイズと見なされていた不具合を修正.
その他:
READMEに導入の項を加筆.
dis_option.1に環境変数の項を加筆.
非LIBC環境でコマンドラインの出力が正しくない不具合を修正.
err()は必ず終了コード1でエラー終了するようにし、引数から終了コー
ドの指定を削除.
*_mac_pathをchar []ではなくchar*に変更.
ソースコード関係:
いくつかの魔法の数字を#defineで定義するようにした.
include.cを大幅に改変.
MakefileのLDFLAGSをLIBFLAGSに変更し、LDFLAGS = -Wl,-xを設定.
ほか若干の修正.
version 2.78 patchlevel 4
-a--rw- 118232 1997-11-13 03:07:00 dis.x
オプション関係:
数値の指定がおかしくないか調べるようにした.
-U指定時は-Xも自動的に指定されるようにした.
シンボルバッファ数のデフォルトを2048に変更.
--real/--inrealオプションを新設した. デフォルトは--real.
--old-syntax/--new-syntaxオプションを新設した. アドレッシング
表記を旧形式/新形式で出力する. デフォルトは--new-syntax.
-m680*0オプションに複数のMPUを指定できるようにした.
-m680x0で対応している全てのMPUの同時指定となる.
-m6888*、-m68851は-m680*0で打ち消されるようになったので注意.
.dcbで出力する最小バイト数を指定するオプション-W numを作成.
入力ファイル関係:
テーブルの記述でext.wa()などがエラーにならない不具合を修正.
テーブルの記述でdc.bなどを.dc.bと記述しても受け付けるようにした.
実行ファイルの読み込み時にエラーチェックを行なうようにした.
出力ファイル関係:
LIBC版でコマンドラインを内部変数_comlineから得るようにした.
-v指定時に--spが無視される不具合を修正.
-U指定時にSXCALLのコール名が大文字になってしまう不具合を修正.
-r指定時に文字列の16進数コメントの文字が変更できなかった不具合を修正.
OSK版で(d16,an)の出力が旧表記のままだった不具合を修正.
quadサイズの即値が正しく出力できない不具合を修正.
(d32.l,an,ix)のアドレッシングでbdがアドレス依存していなくてもラベル
に置換されてしまう不具合を修正.
一部の未定義命令でオペランドがラベルに置換されてしまう不具合を修正.
データブロックの出力中に-aのアドレス表示が更新されない不具合を修正.
cpush/cinv命令でアドレスレジスタ番号が正しく出力されない不具合を修正.
「bra @f; .ds.b 126; @@:」のbraにはサイズを付けないようにした.
サプレスされたアドレスレジスタは出力しないようにした.
(0,an,ix)は(an,ix)として出力するようにした.
$8000~$ffffの絶対ショートアドレッシングは(-d16)として出力するようにした.
サイズ".w"は不要になったので削除.
ラベルファイルを64ビット整数及び浮動小数点データに対応させた.
拡張精度/パックドデシマル型式浮動小数点の実数表記出力に対応.
ただし完全ではない.
解析関係:
複数のMPU命令を同時に受け付けるマルチMPUモードに対応.
「-m68030,68040」などとして指定する.
浮動小数点命令のデフォルトサイズを.wから.xに修正.
fmove/fmovem from/to fpcr命令のデフォルトサイズを.lに修正.
PDBcc、FBcc、PBcc、TRAPcc、FTRAPcc、PTRAPccのサイズ出力/抑制が
指定通りに行われなかった不具合を修正.
-m68020で movec cacrが逆アセンブル出来なくなっていた不具合を修正.
-m68010でrtdが逆アセンブル出来ない不具合を修正.
pmove crp,a0などを出力してしまう不具合を修正.
pflush命令の即値のエラーチェック/出力が正しく行われていなかった
不具合を修正.
長い命令の先頭の一部だけが実行ファイルの末尾に存在した場合、
ファイル末尾を超えてデータを読んでしまう不具合を修正.
OSK版でも68020以降の新設命令を出力可能にした.
ライブラリ関係:
libbinioのリンクをやめ、LIBCに対するパッチで対処するようにした.
これにより端末への出力はCRLF改行で、それ以外はLF改行で行われる.
libioctlと同じように、dis自身は全く関与せずに実現してます:-)
同梱の実行ファイルは改造したlibgccをリンクしています.
いくつかの不具合を修正しましたが、エンバグしているかも知れません.
LIBC/libhdiを改造してlong double対応の_doprnt()を作成した.
その他:
テーブルファイル解析中に、alloca()で確保したメモリをfree()で解放
しようとしていた不具合を修正.
SXCALLのコール名ポインタ配列は必要な時だけ確保するようにした.
ファイル名バッファを静的配列ではなくmalloc()で確保するようにした.
メッセージ修正.
ソースコード関係:
浮動小数点の変換を扱うfpconv.[ch]を作成.
ヘッダファイルが#includeする順番に依存していたのを修正.
int MPU_typeをmputypes MPU_typesに変更.
main.c:short FPCP_ID[16]をdisasm.c:char FPUID_table[16]に変更.
version 2.78 patchlevel 3
-a--rw- 113162 1997-09-02 02:18:26 dis.x
出力ファイル関係:
$dis_headerのファイルに'%'が含まれていた場合に正しく出力できなかった
不具合を修正.
定数シンボルの再現がおかしくなっていた不具合を修正.
浮動小数点のNaN、無限大が文字列として出力されてしまっていたので、内部
表現で出力するように修正.
実効アドレス表記(abs.[wl])を(abs).[wl]に修正.
ビットフィールド命令のオペランドが出力されなくなっていた不具合を修正.
-S指定時に付加する拡張子を小文字にした.
シンボル名の多重定義に対応. これに伴いラベルファイルの形式を拡張.
.dc.?はゼロサプレスせずに出力するように変更. ただし最小単位のデータ
はサプレスされる.
.dc.w及び.dc.lも.dcb.?に変換されるようにした.
.dcb.? len,$00は.ds.? lenとして出力するようにした.
解析関係:
-m68000指定時にビットフィールド命令が.w (an)と出力されるversion 2.78
からの不具合を修正.
命令中のアドレス依存検査を正しく書き直した.
ラベルファイルの出力より先にラベルチェックを行うように変更.
表示関係:
"bindコマンド等"→"unbindコマンド等".
バージョンから"(Eriko ver.)"を削除.
オプション関係:
-Sを指定すると-Tも指定されてしまっていた不具合を修正.
-m68008を認識しないようにした.
ソースコード関係:
etc.cにLIBC互換のeprintf()を作成(LIBCがあるならLIBCのものを使用).
可変長引数を受け取る関数はstdarg.hを参照して正しく宣言するようにした.
nearadrs()のバイナリサーチの条件式がおかしかったのを修正.
なるべくsetDn()を使うようにした.
関数の定義を新しい形式に書き換えた.
staticな関数はファイル先頭で定義してプロトタイプ宣言を削除した.
小さい関数、一度しか呼ばれない関数はinline関数にした.
その他いろいろ.
version 2.78 patchlevel 2
-a--rw- 113046 1997-08-07 07:12:36 dis.x
68060対応:
未実装整数・浮動小数点命令をsoftware emulationとして認識します.
新設命令lpstop、plpar、plpawに対応.
新設制御レジスタbuscr、pcrに対応.
表示関係:
Target MPU、MMU、FPCPの表示を変更した.
オプション関係:
命令セットを変更するオプションを作成.
-P num software emulation命令を有効にする.
-R numと同じように指定する.
+1 未実装浮動小数点命令を有効にする.
+2 未実装整数命令を有効にする.
デフォルトは3.
--fpsp FPSP命令を有効にする(68040/68060).
--no-fpsp 〃 無効にする.
--isp ISP命令を有効にする(68060のみ).
--no-isp 〃 無効にする.
--no-fpu FPU命令を無効にする.
(-m68030~68060では-m6888xを指定しなくても
FPU命令が有効になってしまうので、その対策)
--no-mmu MMU命令を無効にする.
(-m68030~68060では-m68851を指定しなくても
MMU命令が有効になってしまうので、その対策)
--no-fpuと--no-mmuは-m680x0のあとに指定すること.
それ以外は-Pと同じように使用可.
--(no-)fpspと--(no-)ispはもう片方の設定は変更しない.
例)-P0 --fpspで浮動小数点命令のみ有効.
# 68060専用のプログラムだがFPU/MMU命令は使ってないことが分っていて、
# データ領域との判別をより正確にしたい場合などは -m68060 --no-fpu
# --no-mmu と指定すればよい.
出力ファイル関係:
拡張精度及びパックドデシマル形式の即値が0サプレスされるバグを修正.
FPU IDに1以外が指定された場合は.fpidを出力するようにした.
複数即値オペランドのfmovem.l #imm,#imm[,#imm],fpcrlistが正常に逆
アセンブルできなかったのを修正.
-U指定時に.include .cpu .fpid .equが大文字にならないのを修正.
movepのディスプレースメントに".w"が付いていたが、これは不要なので
付かないようにした.
ラベルファイルにシンボル名を追加すると、そのラベルが必ず外部定義に
なってしまうのを修正.
一部の実効アドレス形式で--spが効かなくなっていたのを修正.
解析関係:
「データ領域の中からプログラム領域を捜しています(1).」や「ラベル
チェック中.」で無限ループに陥る不都合を修正(AVL_delete()のバグ).
シンボルテーブルやラベルファイルでシンボル名が無視されるようになって
いた不都合を修正.
-g指定時もシンボルテーブルを読み込むようにした.
ワードサイズの再配置情報を通常のロングロードサイズと同等に扱うようにした.
ソースコード関係:
fprintf(stderr,...)をeprintf(...)に変更.
fputc(c,stderr)をetc.cに作成したeputc(c)に変更.
fputc()の第一引数をcharにcastしていたのをやめた.
パーサジェネレータを自分で移植したGNU Bison version 1.25に変更.
add_symbol()で行っていた定数シンボル登録の振り分けをmake_symtable()
で行うようにした.
ラベル行とオペランド中のラベルの生成ルーチンを独立させた.
make_symbol()の第三引数(コロン付加モード)を削除.
ライブラリ関係:
avl.c: AVL_delete()で節を削除すると子が迷子になるバグを修正.
option.c: XCの独自関数strbpl()を使わないようにした.
version 2.78 patchlevel 1
-a--rw- 118978 1997-06-29 00:50:46 dis.x
表示関係:
Target FPCPの表示形式を若干変更した.
Target MPU/FPCPの表示から'MC68***'の'MC'を削除した.
-m68851、-m68030、-m68040指定時はTarget MMUとして表示するようにした.
オプション関係:
コマンドラインより先に環境変数dis_optを評価するようにした.
これにより-Q削除(ただし互換性の為、指定されても無視する).
-Cオプションの初期値を-C0から-C2に変更した.
-mオプションの初期値を-m68030から-m68000に変更した.
バージョンを表示するオプション--versionを作成した.
使用法を表示するオプション--helpを作成した.
なお、-?はgetoptの仕様上エラーになる.
入力ファイル関係:
X形式実行ファイルのヘッダ確認は、先頭2バイトが'HU'かどうかで
行うようにした(次の1バイトは予約領域、その次の1バイトはロードモード).
64バイト未満の不当なX形式実行ファイルがエラーにならないで異常な
ソースを生成してしまう不都合を修正した.
テキストデータとして読み込むファイル(label、table、include、headerの四種)
は明示的にテキストモードでオプションするようにした.
include fileのマクロ/定数名に':'が付いていても認識するように修正.
出力ファイル関係:
-vオプションによる出力で"undefined inst."の後にゴミが付く不都合を修正した.
.cpu疑似命令や定数の外部定義リストの直後の空行が二行になるように修正した.
残っていた旧アドレッシング表記を新表記に改めた.
単精度浮動小数点小数がラベルに変換されてしまう不都合を修正した.
浮動小数点小数の先頭に"0f"を付けるようにした.
上書き確認はfgets()で"yes"の入力を待つように変更した. それ以外の文字列が
入力された場合(空文字列も含む)は"no"とみなし中断する.
libbioio.aをリンクした関係上、常にLF改行で出力されるようになった.
解析関係:
最初のシンボル登録時に不当なアドレスを参照する不都合を修正した.
SCSIDRV.SYSに-dオプションを付けるとバスエラーになる不都合を修正した.
10進数テーブルが文字列";毀"にならないようにした. 但し.dc.lにはならない.
-m68020 -m68851指定時に以下のMMU命令が逆アセンブル出来ない不都合を修正.
レジスタtcを使用した命令
pmove (d16,pc),mmureg
ソースコード関係:
avlライブラリを../avlから./avlに移動した.
ソースファイルの改行コードをLFにし、TAB幅を8桁に変更した.
option.cの不正なコメントを修正、analyze2.cのコメント中の"/*"を削除.
labelchange()の返値は使用しないようになっていたのでvoid型にした.
hex.hで宣言されている関数のプロトタイプがhex.cで定義されている実体と
違っていたのを修正.
option.hから存在しないhelp()のプロトタイプを削除.
ライブラリ関係:
-DLIBCを不要にした.
strncmpi()はlibcのstrnicmp()を使うように変更.
libhdi.a、libhmem.a、libbinio.aをリンクするようにした.
────────────────────────────────────

340
GPL.TXT

@ -0,0 +1,340 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Library General
Public License instead of this License.

1469
README.DOC
File diff suppressed because it is too large
View File

41
README.W32

@ -0,0 +1,41 @@
ソースコードジェネレータ for X680x0 version 3.16
[これは?]
個人的に必要になったのでdisをWIN32にportingしました。
disはX68000では標準的な逆アセンブラです。
オリジナルソースは桑島技研ARCHIVES(http://kuwa.xps.jp/x68k/KGARC/kgarc.html)
から取得してください。
3.16で立花さんが、MinGW版の修正を取り込んで下さったので、
今回はMakefileの変更以外はコンパイルしたのみです。
バイナリはMinGW32 + m4 + bisonでコンパイルを行いました。
[使い方]
X68000版とまったく同じです。:-)
[謝辞]
素晴らしいプログラムを作成されたK.Abe/R.ShimiZu/Tachibana Eriko各氏に感謝致します。
[変更履歴]
2007/08/27 初版
2008/04/10 Zファイルの解析に失敗していたので修正。
パディングを考慮せず構造体を定義してそのまま読むという元のコードの潜在問題。
修正が面倒なのでgccの拡張機能使って逃げました。
2008/05/22 解析元ファイルのタイムスタンプがおかしいとクラッシュするのを修正。
ctimeの戻りを見ていない元のコードの潜在問題。
2009/12/02 -X/-Uオプションが効かないと報告を受けたので修正。
2014/11/29 3.16ベースに変更
[ライセンス]
オリジナルと同等でお願いします。
[連絡先]
EMAIL: tsato@vesta.dti.ne.jp
URL: http://www.vesta.dti.ne.jp/~tsato/

404
dis_option.1

@ -0,0 +1,404 @@
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
ソースコードジェネレータ オプション一覧
────────────────────────────────────
-a[num] num 行ごとにアドレスをコメントで入れる
(num を省略すると5行ごと)
-b num 相対分岐命令のサイズの出力
(0:自動 1:常に省略 2:常に付ける)
相対分岐命令のオペコードにサイズを付けるかどうかを指定し
ます.
通常(-b0 指定時)は、ショートブランチで届く距離をワードブ
ランチ、またはワードブランチで届く距離をロングブランチし
ている場合にサイズを付けます.
なお、-b2 を指定しても fdbcc 命令には絶対にサイズが付き
ません(アセンブラの仕様によります).
-c ラベルチェックを行わない
命令の中を指すラベルを探さないようにします. 通常は指定す
る必要はありません. 指定した場合、正常なソースを出力でき
ない場合があります.
-d デバイスドライバの時に指定
デバイスヘッダの構造を認識します. デバイスドライバでなけ
れば指定しないで下さい.
-e[file] ラベルファイルの出力
ラベルファイルを出力します. ファイル名を省略した場合はソ
ースファイル名の拡張子を .lab に変更したファイル名で出力
します.
-f バイト操作命令の不定バイトのチェック($00 or $ff ?)をしな
通常は、バイトサイズの即値の上位バイトは通常 $00 か $ff
であるので、それ以外であったら未定義命令と見なします(値
が正なら$00、負なら$ffになります).
このオプションを指定した場合はそのチェックを行ないません.
指定した場合は再アセンブルしても同じコードにならない場合
があります.
-g[file] ラベルファイルを読み込む
ラベルファイルを読み込みます. ファイル名を省略した場合は
ソースファイル名の拡張子を .lab に変更したファイル名から
読み込みます.
-h データ領域中の$4e75(rts)の次のアドレスに注目する
データ領域中に$4e75(rts)を発見した場合、その次のアドレス
を何らかのラベル(大抵はプログラム)として認識します.
-i 分岐先で未定義命令があってもデータ領域と見なさない
通常は、未定義命令を含むサブルーチン(と思われるもの)に分
岐した場合は分岐元自体がデータ領域と見なします. このオプ
ションを指定すればそのチェックを行わずに無条件に命令と見
なします.
-j アドレスエラーが起こるであろう命令を未定義命令と見なさな
通常は実行時にアドレスエラーが起こるであろう命令は未定義
命令と見なしますが、このオプションを指定した場合はそのチ
ェックを行ないません.
-k 命令の中を指すラベルはないものと見なす
命令の中を示すラベルが見つかった場合、そこは命令ではなく
データと解釈します. 元々命令の中を指すラベルがなければソ
ースの質が良くなる場合がありますが、そのようなラベルがあ
れば逆に悪くなります.
-l プログラム領域が見つからなくなるまで何度も捜すことをしな
通常はデータ領域からプログラム領域を見つからなくなるまで
探しますが、このオプションを付けると一度しか探しません.
付ける必要はありません.
-m 680x0 逆アセンブル対象のMPUを指定(x=[0],1-4,6)
逆アセンブルする命令セットを選択します. -m68040~68060
指定時は内蔵コプロセッサ・MMU 命令も使用可能になります.
-m68000,68030 のように複数の MPU を指定すると、指定した
全ての MPU の命令セットが同時に使用可能になります. また、
-m680x0 を指定すると選択可能な全ての MPU の命令セットが
採用されます.
-m 68851 68851命令を有効にする(-m68020 指定時のみ有効)
外付けMMU命令を逆アセンブル可能にします.
このオプションは -m680*0 オプションによってクリアされる
ので、それより後に指定して下さい.
-m 6888x[,ID] 有効なFPCPとそのIDを指定(68881/68882 ID=[1],2-7)
-m68020~68030 を指定している場合に、外付けコプロセッサ
命令を逆アセンブル可能にします. -m68881 と -m68882の機能
は全く同じです.
IDの指定を省略した場合は1と見なされます.
-m68881 -m68882,2 のように複数のIDを指定することも出来ま
す.
このオプションは -m680*0 オプションによってクリアされる
ので、それより後に指定して下さい.
-n num 文字列として判定する最小の長さ. 0なら判定しない(初期値=3)
文字列として判定する最小のバイト数を指定します. 短い文字
列の判定に失敗する場合、または判定を行いたくない時に使用
します.
-o num 文字列領域の桁数(1≦num≦80 初期値=60)
文字列領域を出力する際の、ソースファイルの一行あたりの桁
数を指定します.
-p データ領域中のプログラム領域を判別しない
通常は、一度データ領域と判定した場所からプログラム領域が
なかったか調べますが、このオプションを指定するとそれをし
ません. 付ける必要はありません.
-q[num] メッセージを出力しない
([0]:通常 1:テーブルに関する情報も出力しない)
解析中/ファイル出力中のメッセージを表示しません. 指定す
ればその分処理が速くなります.
-r 文字列に16進数のコメントを付ける
-s[num] シンボルテーブルの出力([0]:しない 1:[通常] 2:全て)
外部定義シンボルを再現します. -s1 指定時は定数シンボルの
み、-s2 指定時はアドレス値も出力します.
-u[num] 未使用の A,F line trap を未定義命令と見なさない
(num=1 SX-Window 対応)
A line trap や doscall.mac 及び fefunc.mac などで定義さ
れなかった F line trap を未定義命令と見なさないようにし
ます.
-u1 指定時は環境変数 dis_sxmac に設定してある SX-Window
のファンクションコール定義ファイルを読み込み、DOSコール
等と同様のマクロ出力を行ないます.
-v 単なる逆アセンブルリストの出力
-w num データ領域の横バイト数(1≦num≦32 初期値=8)
データ領域を出力する際の、ソースファイルの一行あたりのバ
イト数を指定します.
-x 実際のオペコードを16進数のコメントで付ける
-y 全てのデータ領域をプログラム領域でないか確かめることをし
ない
通常は、一度解析した後サイズの分らないデータがプログラム
でないか解析します.
このオプションを指定すると、データの終わりがリターン命令・
分岐命令などである領域のみを解析します. プログラム領域を
データとして残すことが有りますが、逆にデータ領域をプログ
ラムにすることも無くなる可能性もあります.
-z base,exec 実行ファイルを base からのバイナリファイルとみなし、exec
から解析する
アドレスに依存したバイナリ形式の実行ファイルを解析します.
実行開始アドレスが分らない時は、ファイル先頭アドレスと同
じ値を指定してみて下さい.
-A cmpi, movea 等を cmp, move 等にする
ただし、演算先がデータレジスタの cmpi、ori、andi、subi、
addi、eori は "i" なしの命令とオブジェクトコードが異なる
ので、そのままで出力されます. また、addi と subi で即値
が 1 ~ 8 の場合、addq や subq に最適化されるのを防ぐ為、
即値にサイズが付きます.
-B bra の後でも改行する
通常は rts、rte、rtr、jmp、DOS _EXIT、_EXIT2、_KEEPPR、
SXCALL __TSExit(ExitToShell)の後に一行空行を入れますが、
このオプションを指定すると bra の後にも空行を入れます.
-C[num] ラベルの後のコロン
(0:付けない 1:全てに1つ [2]:通常 3:全てに2つ)
ラベル定義行に付けるコロンの数を指定します. 通常は内部定
義(static)のラベルには一個(':')、外部定義(extern)のラベ
ルには二個('::')付きます.
内部定義か外部定義かの区別は、実行ファイルのシンボルテー
ブルにラベル定義が出力されているかどうかです.
-D データセクション中にもプログラムを認める
データセクションに分岐するプログラムに対応します. そのよ
うなプログラムでは「pc が有効なセクションを外れた」と表
示されるので、このオプションを指定してみて下さい.
-E バイト操作命令の不定バイトの書き換えチェックをしない
通常は、不定バイトを書き換えるような命令は未定義命令と見
なしますが、このオプションを指定した場合はそのチェックを
行ないません.
-F dbra, fdbra を dbf, fdbf として出力する
-G サブルーチンコール命令の直後に引数を置くプログラムを解析
する.
-I 命令の中を差すラベルのアドレスを表示する
命令の中を指すラベルが現われた時に、その旨を表示します.
・「命令の中を差すラベル(X -> Y+?)」
アドレス X が命令の中を指していたため、Y+? に置き換えま
した.
・「命令の中を差すラベル(X) -> データ領域に変更しました
(Y-X)」
-k オプションの影響、またはアドレス X が不定バイトを指し
ていた為に Y から X までの領域をデータ領域に変更しました.
そこが本当はプログラム領域であった場合は -E オプションを
指定してみて下さい.
-K char char をコメントキャラクタとして用いる
-L char char をラベル名の先頭文字として用いる
実行ファイルのシンボルテーブルやラベルファイルでラベル名
が与えられなかったラベルは、'Lxxxxxx'(x は16進数値)とい
う形式でラベル名が生成されますが、先頭文字 'L' を任意の
文字に変更します.
-M cmpi, move, addi.b, subi.b #imm および pack, unpk にコメ
ントをつける
imm が表示可能な ASCII 文字の場合にコメントを出力します.
-N サイズがデフォルトなら付けない
-R num 未使用フィールドのチェック項目の指定
(ビット指定, 初期値=15)
+1 mulu.l, muls.l, ftst.x における未使用レジスタフィールド
+2 拡張アドレッシングでのサプレスされたレジスタフィールド
+4 サプレスされたインデックスレジスタに対するスケーリング
+8 サプレスされたインデックスレジスタに対するサイズ指定(.l)
-S[num] 出力ファイルを num KB ごとに分割する
(num を省略すると 64KB)
実行ファイルの約 num KB ごとにソースファイルを分割して出
力します. ソースファイルには以下のような拡張子が付加され
ます.
テキストセクション .000 .001 ~ .009 .00a ...
データセクション .dat
ブロックストレージセクション .bss
-T[file] テーブル記述ファイルを読み込む
テーブル記述ファイルを読み込みます. ファイル名を省略した
場合はソースファイル名の拡張子を .tab に変更したファイル
名から読み込みます.
-U ニーモニックを大文字で出力する
-V num バックトラックの原因の表示
(0:しない [1]:プログラム領域 2:全ての領域)
解析した領域がプログラムと認められなかった時に、その理由
とアドレスを表示します.
-W num 同一データを .dcb で出力する最小バイト数.
0なら圧縮しない(初期値=64)
データを .dc.? で出力する場合、全てのデータが同一の値で
あれば .dcb.? により圧縮して出力されますが、一定のサイズ
より小さい領域は例え同一値であっても圧縮されません. この
オプションでそのサイズの閾値を変更出来ます.
-X 16進数を大文字で出力する
-Y カレントディレクトリからも include ファイルを検索する
カレントディレクトリにあるインクルードファイルを優先して
読み込みます.
-Z[num] 16進数をゼロサプレスする([0]:通常 1:省略可能な'$'を省略)
--include-XXX-mac=file
include ファイルの指定(XXX = doscall,iocscall,fefunc)
標準の include ファイルの代わりに file を読み込みます.
--exclude-XXX-mac
include ファイルを読み込まない
include ファイルを読み込まず、ファンクションコールの逆ア
センブルも行わないようにします.
--header=file ヘッダファイルの指定(環境変数 dis_header より優先)
標準のヘッダの代わりに file の内容を出力します.
--(no-)fpsp 未実装浮動小数点命令を[有効](無効)にする
--(no-)isp 未実装整数命令を[有効](無効)にする
通常は、システムによってソフトウェアエミュレーションされ
ることが保証されている命令は実在する命令と見なされますが、
このオプションを指定した場合は未定義命令と見なします.
--no-fpu 内蔵FPU命令を無効にする(-m68040~68060の後に指定)
--no-mmu 内蔵MMU命令を無効にする(-m68030~68060の後に指定)
通常は -m680*0 オプションで指定した MPU によっては、自動
的に内蔵 FPU/MMU 命令が有効になります. これらのオプショ
ンを指定するとそれらの命令を対象命令セットから除外します.
逆アセンブルするファイルにそれらの命令が含まれていないと
分っている場合、このオプションを指定することで命令セット
を限定し、解析の手助けをすることが出来ます.
このオプションは -m680*0 オプションによってクリアされる
ので、それより後に指定して下さい.
--sp a7 レジスタを'sp'と表記する(標準では --a7)
オペランド中のレジスタ a7 の表記を sp に変更します.
movem 命令のレジスタリストに表われる a7 は変更されません.
--old-syntax アドレッシングを旧表記で出力する(標準では --new-syntax)
通常は 68020 以降で定められたアドレッシング表記で出力し
ますが、このオプションを指定した場合は 68000 の表記で出
力します. ただし、68020 以降でしか使用できないアドレッシ
ングでは常に新しい表記で出力します.
--(in)real 浮動小数点を[実数表記](内部表現)で出力する
命令のオペランドやデータとして浮動小数点を出力する場合の
表記を選択します. --real を指定すると「0f1.23e+10」といっ
た実数表記、 --inreal を指定すると「!4048f5c3」といった
内部表現で出力します.
非数や無限大、非正規化数、未使用ビットがセットされている
データの場合は実数表記が不可能なので常に内部表現で出力さ
れます.
標準状態では --real が指定されています.
--overwrite ファイルを無条件で上書きする
--version バージョンを表示する
--help 使用法を表示する
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
ソースコードジェネレータ 環境変数一覧
────────────────────────────────────
dis_opt デフォルトのオプションを指定します. コマンドラインの指定
より先に解釈されますが、-m680*0 など上書き指定できるもの
を除き取り消すことは出来ません.
dis_include doscall.mac、iocscall.mac、fefunc.mac を検索するディレク
トリ名を設定します. dis_include で指定されたパスに存在し
なければ環境変数 include を見ます.
include 環境変数 dis_include で指定されたパスに各ファイルが存在
しなかった場合に検索するディレクトリ名を設定します.
include で指定されたパスにも存在しなければ dis.x はエラー
終了します.
dis_sxmac SX-Window 用のインクルードファイルのファイル名をフルパス
で設定しておけば、-u1 オプション指定時にそのファイルが読
み込まれます. この環境変数を設定しなければ -u1 を指定し
た時でもファイルが読み込まれないだけで、エラーにはなりま
せん.
dis_header 出力ファイルの先頭に出力される .include 部分を書いたファ
イルをフルパスで設定しておけば、そのファイルの内容を代わ
りに出力します.
────────────────────────────────────

204
include/doscall.mac

@ -0,0 +1,204 @@
.nlist
* doscall.mac
* RUKA assembler macro for X680x0/Human68k(v3)
* version 1.16 2000/03/03 Tachibana Eririn.
.ifndef __doscall_mac__
__doscall_mac__:=1
* Macro --------------------------------------- *
DOS: .macro callno
.dc callno
.endm
* DOS Call Number ----------------------------- *
_EXIT: .equ $ff00
_GETCHAR: .equ $ff01
_PUTCHAR: .equ $ff02
_COMINP: .equ $ff03
_COMOUT: .equ $ff04
_PRNOUT: .equ $ff05
_INPOUT: .equ $ff06
_INKEY: .equ $ff07
_GETC: .equ $ff08
_PRINT: .equ $ff09
_GETS: .equ $ff0a
_KEYSNS: .equ $ff0b
_KFLUSH: .equ $ff0c
_FFLUSH: .equ $ff0d
_CHGDRV: .equ $ff0e
_CHDRV: .equ $ff0e ;=_CHGDRV
_DRVCTRL: .equ $ff0f
_CONSNS: .equ $ff10
_PRNSNS: .equ $ff11
_CINSNS: .equ $ff12
_COUTSNS: .equ $ff13
_FATCHK: .equ $ff17
_HENDSP: .equ $ff18
_CURDRV: .equ $ff19
_GETSS: .equ $ff1a
_FGETC: .equ $ff1b
_FGETS: .equ $ff1c
_FPUTC: .equ $ff1d
_FPUTS: .equ $ff1e
_ALLCLOSE: .equ $ff1f
_SUPER: .equ $ff20
_FNCKEY: .equ $ff21
_KNJCTRL: .equ $ff22
_CONCTRL: .equ $ff23
_KEYCTRL: .equ $ff24
_INTVCS: .equ $ff25
_MAKEPSP: .equ $ff26
_PSPSET: .equ $ff26 ;=_MAKEPSP
_GETTIM2: .equ $ff27
_SETTIM2: .equ $ff28
_NAMESTS: .equ $ff29
_GETDATE: .equ $ff2a
_SETDATE: .equ $ff2b
_GETTIME: .equ $ff2c
_SETTIME: .equ $ff2d
_VERIFY: .equ $ff2e
_DUP0: .equ $ff2f
_VERNUM: .equ $ff30
_KEEPPR: .equ $ff31
_GETDPB: .equ $ff32
_BREAKCK: .equ $ff33
_DRVXCHG: .equ $ff34
_INTVCG: .equ $ff35
_DSKFRE: .equ $ff36
_NAMECK: .equ $ff37
_MKDIR: .equ $ff39
_RMDIR: .equ $ff3a
_CHDIR: .equ $ff3b
_CREATE: .equ $ff3c
_OPEN: .equ $ff3d
_CLOSE: .equ $ff3e
_READ: .equ $ff3f
_WRITE: .equ $ff40
_DELETE: .equ $ff41
_SEEK: .equ $ff42
_CHMOD: .equ $ff43
_IOCTRL: .equ $ff44
_DUP: .equ $ff45
_DUP2: .equ $ff46
_CURDIR: .equ $ff47
_MALLOC: .equ $ff48
_MFREE: .equ $ff49
_SETBLOCK: .equ $ff4a
_EXEC: .equ $ff4b
_EXIT2: .equ $ff4c
_WAIT: .equ $ff4d
_FILES: .equ $ff4e
_NFILES: .equ $ff4f
_V2_SETPSP: .equ $ff50
_V2_SETPDB: .equ $ff50 ;=_V2_SETPSP
_V2_GETPSP: .equ $ff51
_V2_GETPDB: .equ $ff51 ;=_V2_GETPSP
_V2_SETENV: .equ $ff52
_V2_GETENV: .equ $ff53
_V2_VERIFYG: .equ $ff54
_V2_COMMON: .equ $ff55
_V2_RENAME: .equ $ff56
_V2_FILEDATE: .equ $ff57
_V2_MALLOC2: .equ $ff58
_V2_MAKETMP: .equ $ff5a
_V2_NEWFILE: .equ $ff5b
_V2_LOCK: .equ $ff5c
_V2_ASSIGN: .equ $ff5f
.ifndef _V2_MALLOC3
_V2_MALLOC3: .equ $ff60 ;060turbo.sys
_V2_SETBLOCK2: .equ $ff61 ;�V
_V2_MALLOC4: .equ $ff62 ;�V
_V2_S_MALLOC2: .equ $ff63 ;�V
.endif
_V2_FFLUSH_SET: .equ $ff7a
_V2_OS_PATCH: .equ $ff7b
_V2_GETFCB: .equ $ff7c
_V2_GET_FCB_ADR:.equ $ff7c ;=_V2_GETFCB
_V2_S_MALLOC: .equ $ff7d
_V2_S_MFREE: .equ $ff7e
_V2_S_PROCESS: .equ $ff7f
_SETPSP: .equ $ff80
_SETPDB: .equ $ff80 ;=_SETPSP
_GETPSP: .equ $ff81
_GETPDB: .equ $ff81 ;=_GETPSP
_SETENV: .equ $ff82
_GETENV: .equ $ff83
_VERIFYG: .equ $ff84
_COMMON: .equ $ff85
_RENAME: .equ $ff86
_FILEDATE: .equ $ff87
_MALLOC2: .equ $ff88
_MAKETMP: .equ $ff8a
_NEWFILE: .equ $ff8b
_LOCK: .equ $ff8c
_ASSIGN: .equ $ff8f
.ifndef _MALLOC3
_MALLOC3: .equ $ff90 ;060turbo.sys
_SETBLOCK2: .equ $ff91 ;�V
_MALLOC4: .equ $ff92 ;�V
_S_MALLOC2: .equ $ff93 ;�V
.endif
_FFLUSH_SET: .equ $ffaa
_OS_PATCH: .equ $ffab
_GETFCB: .equ $ffac
_GET_FCB_ADR: .equ $ffac ;=_GETFCB
_S_MALLOC: .equ $ffad
_S_MFREE: .equ $ffae
_S_PROCESS: .equ $ffaf
.ifndef _TWON
_TWON: .equ $ffb0 ;(v)twentyone.sys
.endif
.ifndef _MVDIR
_MVDIR: .equ $ffb1 ;dos_mvdir.r
.endif
.ifndef _VMALLOC
_VMALLOC: .equ $ffe0 ;swapper.sys
_VMFREE: .equ $ffe1 ;�V
_VMALLOC2: .equ $ffe2 ;�V
_VSETBLOCK: .equ $ffe3 ;�V
.endif
.ifndef _VEXEC
_VEXEC: .equ $ffe4 ;vmexec.sys
.endif
_EXITVC: .equ $fff0 ;not DOS Call
_CTRLVC: .equ $fff1 ;�V
_ERRJVC: .equ $fff2 ;�V
_DISKRED: .equ $fff3
_DISKWRT: .equ $fff4
_INDOSFLG: .equ $fff5
_SUPER_JSR: .equ $fff6
_BUS_ERR: .equ $fff7
_OPEN_PR: .equ $fff8
_KILL_PR: .equ $fff9
_GET_PR: .equ $fffa
_SUSPEND_PR: .equ $fffb
_SUSPEND: .equ $fffb ;=_SUSPEND_PR
_SLEEP_PR: .equ $fffc
_SEND_PR: .equ $fffd
_TIME_PR: .equ $fffe
_CHANGE_PR: .equ $ffff
* End of File --------------------------------- *
.endif
.list

183
include/fefunc.mac

@ -0,0 +1,183 @@
.nlist
* fefunc.mac
* RUKA assembler macro for X680x0/Human68k(v3)
* version 1.15 1999/05/16 Tachibana Eririn.
.ifndef __fefunc_mac__
__fefunc_mac__:=1
* Macro --------------------------------------- *
FPACK: .macro callno
.dc callno
.endm
* FEfunc Call Number -------------------------- *
__LMUL: .equ $fe00
__LDIV: .equ $fe01
__LMOD: .equ $fe02
__UMUL: .equ $fe04
__UDIV: .equ $fe05
__UMOD: .equ $fe06
__IMUL: .equ $fe08
__IDIV: .equ $fe09
__RANDOMIZE: .equ $fe0c
__SRAND: .equ $fe0d
__RAND: .equ $fe0e
__STOL: .equ $fe10
__LTOS: .equ $fe11
__STOH: .equ $fe12
__HTOS: .equ $fe13
__STOO: .equ $fe14
__OTOS: .equ $fe15
__STOB: .equ $fe16
__BTOS: .equ $fe17
__IUSING: .equ $fe18
__LTOD: .equ $fe1a
__DTOL: .equ $fe1b
__LTOF: .equ $fe1c
__FTOL: .equ $fe1d
__FTOD: .equ $fe1e
__DTOF: .equ $fe1f
__VAL: .equ $fe20
__USING: .equ $fe21
__STOD: .equ $fe22
__DTOS: .equ $fe23
__ECVT: .equ $fe24
__FCVT: .equ $fe25
__GCVT: .equ $fe26
__DTST: .equ $fe28
__DCMP: .equ $fe29
__DNEG: .equ $fe2a
__DADD: .equ $fe2b
__DSUB: .equ $fe2c
__DMUL: .equ $fe2d
__DDIV: .equ $fe2e
__DMOD: .equ $fe2f
__DABS: .equ $fe30
__DCEIL: .equ $fe31
__DFIX: .equ $fe32
__DFLOOR: .equ $fe33
__DFRAC: .equ $fe34
__DSGN: .equ $fe35
__SIN: .equ $fe36
__COS: .equ $fe37
__TAN: .equ $fe38
__ATAN: .equ $fe39
__LOG: .equ $fe3a
__EXP: .equ $fe3b
__SQR: .equ $fe3c
__PI: .equ $fe3d
__NPI: .equ $fe3e
__POWER: .equ $fe3f