asm2s

概要

asm2sは、SMYLE系プロセッサのデフォルトASM形式(ただしQVPの記述のために用いられている範囲)のソースファイルを topsqvp-elf_as形式のソーフファイルに変換するコンバータです。以下の機能をもっています。

  • 行を読み取ってラベル、命令、引数にパースする
  • 疑似命令やマクロ命令など互換性のない部分を変換する
  • 機械的に変換できない部分についてはWARNING!としてコメントアウトする
  • 読み取り途中でコメントを検出したならばコメント文字を変換し行末まで飛ばす。

リビジョン

asm2s v01r02

コマンドライン

python asm2s.py [option [option_parameter]]...

以下のようなオプションをつけて動作させることで所望の結果を得ることができます。

コマンドラインオプション

オプション 意味
-h ヘルプ表示
–ASM asm 入力ASMソースファイル
–S s 出力gas sソースファイル
-i INC fileモード
-v 処理の途中経過を詳細に出力
-V バージョンのみ表示して終了
-d デバッグ用オプション

構造

class asm2s.asmReader(fnam, oCls, opt)[ソース]

ASM File Reader Class.

ASMファイルを読み取ってパースするクラス

backCHR()[ソース]

LINE BUFFER, back char

1行バッファに1文字戻すメソッド

getCHR()[ソース]

LINE BUFFER, get char

1行バッファから1文字読み出すメソッド

getTOKEN()[ソース]

LINE BUFFER, get token

1行バッファの現在ポジションから1トークン読み出すメソッド 空白文字の読み飛ばしはしない 現在ポジションが行末に達していたら”EOL”を返す。 0, EOL 1, COMMENT 2, { 3, } 4, [ 5, ] 6, + 7, - 8, * 9, / 10, < 11, > 12, << 13, >> 14, <= 15, >= 16, == 17, != 18, : 19, $ 20, , 21, % 22, & 23, | 99, “string” 100, ID 200, LABEL 999, ERROR-Message

rLine(lin)[ソース]

Read Line method

読み取った1行を処理するメソッド 常にFalseを返す。 (エラーが定義されたらTrueを返す)

read()[ソース]

read method

ファイルから行をリードして処理するメソッド

setLine(lin)[ソース]

Set Line to line buffer

1行バッファを初期化するメソッド

skipSPACE()[ソース]

LINE BUFFER, skip space

空白文字とタブを読み飛ばすメソッド。読み飛ばした空白文字数を返す。

class asm2s.gasWriter(ofnam, incmode)[ソース]

GAS Writer Class.

asmReaderのパース結果を解釈し、gas形式に変換してファイルに書くクラス

checkAlias(lbl)[ソース]

check Alias

既知のAliasであればSanitized分類に落とす 既知でなければWarning分類に落とす いずれもコメント化する

checkEqu(lbl)[ソース]

check Equ

既知のEquであればSanitized分類に落としてコメント化する 既知でなければ.equ命令に形式変換する

checkID1()[ソース]

check ID1

最初の識別子を検査し、変換不要な場合はコメント化する 必要な場合は変換する. gasに変換する場合に問題が起こるケースもコメント化する

checkLabelID1()[ソース]

check Label + ID1

Label + ID1形式の特定の組み合わせをコメント化する 必要な場合は変換する. gasに変換する場合に問題が起こるケースもコメント化する

checkMacro(lbl)[ソース]

check Macro

既知で代替命令の存在するMacroであればSanitized分類に落とす 既知でなければ Macro変換保留扱いとしてマクロ引数へ進む

convHexFormat(arg, opt=False)[ソース]

convert hex Format

インテルHEX式の16進数表記であれば、C形式のHEXに置き換える. opt=Trueであれば数値として返す そうでなければ何もしない

detectHardwareLocation(arg)[ソース]

detect Hardware Location

事前定義されているハードウエアロケーションか否かを判定する

finishLineParser()[ソース]

finish line parser

行パーサを完了し、1行出力するメソッド.

initLineParser()[ソース]

initialize line parser

行パーサを初期化するメソッド.

lineParser(tkn)[ソース]

line parser

行パーサ

proccessARG(tkn)[ソース]

check ARG

引数について処理を施す

save()[ソース]

buffer Writer

バッファのライタ. 書き込み成功すれば真を返す。

writeLine(lin, opt=False)[ソース]

write line to buffer

行を直接バッファへ書き込むためのメソッド. opt=Trueなら行コメントとする

writePredef()[ソース]

write Predefined macros/definitions

writeRawToken(tkn)[ソース]

write Token(RAW) to buffer

生トークンをバッファへ書き込むためのメソッド. 0, EOL 1, COMMENT 2, { 3, } 4, [ 5, ] 6, + 7, - 8, * 9, / 10, < 11, > 12, << 13, >> 14, <= 15, >= 16, == 17, != 18, : 19, $ 20, , 21, % 22, & 23, | 99, “string” 100, ID 200, LABEL 999, ERROR-Message

writeToken(tkn)[ソース]

write Token to buffer

トークンをバッファへ書き込むためのメソッド. 書き込みトークンが予想外のものであれば偽を返す。