DCASM v0.40                              by tenk* バイナリ・データ生成を目的として、  68kアセンブラでの dc.b dc.w dc.l のみ, と、  x86アセンブラでの db dw dd のみ をサポートしたマクロアセンブラです。  xdef された外部ラベルを、C言語の .hのごとく、 #define ラベル アドレス の形で生成することができます。  マクロ機能は、#include #define #if #macro #rept #ipr 等 で、拙作 acpp のプリプロセス機能を内臓しています。 □使いかた usage> dcasm [-opt] filename(s) ファイル名が複数指定された場合、一連のテキストとして順に読みこむ. 出力ファイル名は最初のファイル名の拡張子を.binにしたもの オプション: -iDIR ヘッダファイルの入力ディレクトリの指定 -oFILE 結果を FILE に出力. -eFILE エラーを FILE に出力 -b デフォルトのエンディアンをB=ビッグ, L=リトルにする -a<0|2|4> 2:dc.w,dc.lでアドレスを偶数, 4:dc.w偶数 dc.l四の倍数 0:調整無 -rFILE 一番目に読込むファイルを指定 (ルール/マクロ定義の記述ファイルを想定) -dNAME[=STR] #define名定義 -uNAME #undefする -hFILE xdefされたラベルを#define形式でファイルに出力する -y 文字列中, C言語の\エスケープシーケンスを有効 -y- 無効 -s ;をコメント開始文字でなく複文用のセパレータとして扱う -m 命令(文法)ヘルプ表示 -v[-] 途中経過メッセージを表示する -v-しない @FILE レスポンス・ファイル指定 ■ 文法関係 □コメント  ; か * か // か rem で始まり行末までか /* */ で囲まれた範囲。  ただし ; はオプションで、文を区切るセパレータになり、その場合は コメントにならないです。 □数値 10進数数値 0..9か_で構成される文字列. _は無視. 16進数数値 C言語風0x0, インテル風0h, モトローラ風$0 2進数数値 C言語風拡張0b011、インテル風 011h 表記. モトローラ風表記%011 8進数数値 指定できない □演算子  演算順位を含め、ほぼCと同じで下記のものがあります。 () + - ! ~ * / % + - << >> > >= < <= == != & ^ | && || また、アセンブラとして、  ソース行頭アドレス値 を示す $ または 単項* がある。 □ラベル定義 LBL: ラベル LBL を定義 LBL: equ N ラベル LBL の値を N にする  equ であっても、ラベルを指定するには必ず : が必要ということは 注意してください。 (逆に:があれば行頭空白があってもラベルと認識します)。 □外部ラベル xdef LBL と指定したラベルは、.h ファイルに#define定義で出力する。 □dc. db dw dd  1バイト/2バイト/4バイト整数列のデータ生成する □ds. N N個の領域を確保(0埋め) □stri  stri の次から、違う命令が現れるまでを、文字列データとして 生成する。dc.b "文字列" の特殊タイプ、といえるが、"文字列" の中とは違い、#define した名前が有効なので、結構、注意して 使わないと駄目だろう。 (アドベンチャゲームを作っているおり、スクリプトコンバータを 作る暇なく端折ってこのツールででっち上げるために用意したもの だったりします^^; だもんで、そういう使い方もできるかもしれま せん……が、スクリプトコンバータはエラーチェックをちゃんと するものを素直に作ったほうが結局時間/労力ともにお徳というの が結論です:-) □ org N  アドレスを Nにする。  アドレスまでの隙間は0で埋められる。 □even  アドレスが偶数になるよう調整(隙間は0埋め) □align N  アドレスがNバイト単位になるよう調整 □auto_align 2|4  2  dc.w,dc.lでアドレスを偶数(68Kの事情を想定)でアライメント  4  dc.w なら偶数、 dc.l 4の倍数でアライメント □エンディアンの指定 big_endian ビッグ・エンディアンにする little_endian リトル・エンディアンにする □end  ソースの終わり(なくてもよい) □#マクロ命令  #if,#elif,#elif,#endif  #define,  #macro,#endm  #rept,#endr  #ipr,#endi 等の条件アセンブルやマクロ命令ありがある。 詳しくは、別配布の acpp.exe のマニュアルを参照のこと。 ■制限等。  もともとサンプル的に急場ででっち上げたもので、 アセンブラとして考えた場合、生成中のリスト出力が できないという、結構致命的な仕様になっています。  また、オンメモリでソース読みこみ、かつ、生成、と いう仕様で、結構、メモリ食いです。  そのくせ、速くないです。とくに、名前の管理を ハッシュ等の工夫したものでなく、avl木のみでやっている せいもあって、ラベル数が増えると結構時間食うかも しれません。 ■履歴 v0.4 2000/09  filn.c ルーチンの修正変更に伴う更新。  -erFILE を -eFILE に、  -eb を -bb に、  -l を -bl  に変更。 ■ 配布条件等 フリーソフトウェアです。 パソ通/インターネット等での非営利配布ならば 作者に連絡不要で再配布していただいてかまいません。その他の場合(雑誌 紹介とかディスク配布で同梱したいなど)事前に相談ください、ってことで。 営利配布は自由でない(要相談)ですが、営利利用(仕事場で業務に使うとか) はもちろん構いません。 ソースについては、下記条件を満たす限り、改造するなり流用するなり 自由で連絡不要ですし、流用の場合はマニュアル等に明記する必要は ないです。ただしソース公開の場合はソースの配布条件をどこかに書い てください。 ・dcasm.exe の直接の改造物ならば、バージョンナンバーを原作者とは 別ものと見分けられるようにすること。 ・ルーチンの流用/改造では、最低限、流用ルーチンは、作者と同じ条件 を継続すること。 ・変更/追加等してその特許や著作権等で他者のプログラミングを制限し ないこと。変更箇所かどうかに関わらず他者のプログラミングを制限 するプログラムへのルーチンの流用を行わないこと。 他人のプログラミングを邪魔しないのであれば、別に市販ソフトだろ うとシュアウェアだろうと流用してよいです。 ・自分の変更を独り占めにしたいなら、公開しないこと。また、他者が 同様なコトを行っていても権利を主張しないこと。 なお、配布ファイル中の実行ファイルは Borland社の bcc32 v5.5 でコン パイルしてあります。 当然のことながら無保証です。作者はなんら義務を負いません。 利用者の責任で用いてください。 (バグがありましたら、連絡くださると助かります。でも、取れるとは 限らないですし、すぐさまデバッグにかかれるかどうかも不明です) ■おわり  自分では、ちょっとした、データ構造を持つデータを 作る場合に、ちょこちょこと使っているので、 全くの駄目すぎ、ではないでしょうけれど、ヘビーには つかっていないので、いろいろ問題は残っているでしょう。 (とくに自分の場合は、自分で危険と思われる機能は さけて使用したりするので……#ifの不具合なんて長いこと 放置されっぱなしだったし……ってとりきれたかどうかなんて あまり確認できてないしで)   by tenk*   NBB00541@nifty.ne.jp