cross platform X68000 disassembler (Human68k, Windows, Linux)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

146 lines
4.0 KiB

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
ソースコードジェネレータ テーブルファイル書式
────────────────────────────────────
'#'、'*'、';' から始まる行はコメント行。
テーブル開始アドレス
識別子 [オペランド表現式]
...
テーブル終了マーク
・テーブル開始アドレス
行頭から 16 進数でテーブルの開始アドレスを記述する。
'$'や'0x'などは付けない。
テーブルが記述できるのはテキスト・データセクション及び、限定的で
はあるが BSS 内である。
・識別子
次のいずれか。
dc.b 1 バイトのデータを .dc.b で出力する。
dc.w 1 ワードのデータを .dc.w で出力する。
dc.l 1 ロングワードのデータを .dc.l で出力する。
dc.s 単精度実数を .dc.s で出力する。
dc.d 倍精度実数を .dc.d で出力する。
dc.x 拡張精度実数を .dc.x で出力する。
dc.p パックドデシマル実数を .dc.p で出力する。
上記の命令は、オペランド表現式があればその式を、なければ pc(に相
当するアドレス)の示す値の出力する。識別子の先頭に'.'を記述しても
よい。
奇数アドレスに dc.w 以降の命令を置くことは可能だが、警告が表示さ
れる。
byte[式] (式)バイトのバイト列を .dc.b で出力する。
asciiz 0 で終わる文字列を .dc.b で出力する。
lascii 文字数 + 文字列を .dc.b で出力する。
SX-Window で用いられる形式。
ascii[式] (式)バイトの文字列を .dc.b で出力する。
even .even 疑似命令を出力する。
cr 改行する。
break 式 式の値が真(0 以外)ならテーブルを終了する。
byte、ascii、break 以外の識別子の後に [式] を付けた場合、式の値
だけ識別子を繰り返す。
・オペランド表現式
式または文字列。','で区切って複数の式または文字列を続けて記述す
ることも出来る。
式を { } で囲むと、式をアドレスと見なしてそのアドレスのラベルを
生成する。ソースコードには L?????? の形式、またはシンボル名に置
換されて出力される。{ } で囲まない場合は数値として $?????? の形
式で出力される。
文字列はそのまま出力される。
例)
.dc.w {peek.w(pc)+tabletop},"-",{tabletop}
.dc.w Lxxxxxx-Lyyyyyy
オペランド表現式は、文字列(上記の例で言えば"-")を普通の演算子と
見なした時の値が peek.?(pc) にならなければならない。
・式
式は C 言語の演算子のサブセットが使用できる。
算術演算子
+ - * / %
論理演算子
== != < <= > >= !
その他 ( )
定数
tabletop テーブルの先頭アドレス
pc 注目中のアドレス
関数
peek.b(式) 式のアドレスの指すバイト値
*(unsigned char*)式
peek.w(式) 式のアドレスの指すワード値
*(unsigned short*)式
peek.l(式) 式のアドレスの指すロングワード値
*(unsigned long*)式
ext.w(式) 式を signed char と見なし、unsigned
short に符号拡張した値を返す
(unsigned short)(signed char)式
ext.l(式) 式を signed short と見なし、unsigned
long に符号拡張した値を返す
(unsigned long)(signed short)式
定数や関数の返値は全て unsigned long として扱われ、演算も
unsigned long で行われる。よって、peek.?(x) < 0 は常に偽になる。
奇数アドレスからの peek.w()、peek.l() は可能だが警告が表示される。
BSS に対して peek.?() を使用した場合、その値は 0 になる。
数は 10 進数と、'0x' または '$'から始まる 16 進数が使える。
・文字列
"文字列" の形式で文字列を記述する。記号 '"' 自身や制御記号は含め
ることは出来ない。
・テーブル終了マーク
行頭から、以下のいずれかを必ず一つ記述する。
end 以上のテーブルが一つあることを指定する。
end[数] 以上のテーブルが記述した数の分だけあることを指定
する。数は 10 進数のみ。
end[] 以上のテーブルが複数個あり、テーブルの数は dis
に判断させることを指定する(break 文があればそれ
も考慮する)。
end[breakonly] 以上のテーブルが複数個あり、テーブルの数は break
文でのみ判断することを指定する。break 文を書かな
いと止まらないので注意すること。
テーブルの数が分かる時はなるべく end[数] を使う。end[] による自
動判断はテーブルの次のラベルのアドレスや、アドレスに依存している
値などを見て判断しているだけなので、間違えることがしばしばある。
特に文字列の自動認識時に不要なラベルを作ってしまい、それに引っ掛
かることが多い。break 文を書いても break する前に dis が勝手にテ
ーブルを終わらせてしまう時は end[breakonly] を使用する。
・正確な文法
ソースコードの eval.y を参照すること。
────────────────────────────────────