DeMas – DeMアセンブラ

DeMの機械語をハンドアセンブルするのはつらいですね。筆者がサンプルコードを書くときに使ったDeM用アセンブラ「DeMas」を公開します。これで長いプログラムも楽に書けますね。

ダウンロード

近日公開予定(WOB/Arduino開発環境の中にも入っています)

準備

  • AVRStudio4*1のインストール
  • (WOBインストールフォルダ)\DeM\demas=DeMasフォルダ
  • (DeMasフォルダ)\demas.batの中のAvrasm2.exeとgawk.exeへのパス(Windows7環境でAVRStudio4を標準インストールした場合のパスが入っています)を確認し、必要ならば修正

*1 筆者はAVRStudio4.19で実績があります(ダウンロードには名前とメールアドレスの登録が必要です)。この中のAvrasm2.exeを使います。AVRStudioは最新のバージョン6だと入っていないので注意。5は…調べてません。また、Atmel AVR Toolchain 3.4.1 for Windowsというツールもあるようですが、こちらも試していません。

コーディング

ソースコードを拡張子”.s”のファイルとして記述します。文法はサンプルコードを参考にしてください(とりあえず。説明は徐々に拡充の予定)。テキストエディタにEmacsを使っている方は自動的にAssemblerモードになりますので編集が楽でしょう。

アセンブル

  1. ソースコードを拡張子”.s”でDeMasフォルダに置く(ここでは”source.s”とします)
  2. コマンドプロンプトで”demas.bat ソースコード”を実行
    > demas.bat source.s
  3. 拡張子.hexのHEXフォーマットファイルが出力される
  4. HEXフォーマットファイルをWOBに送信*2

*2 demas.batによりリストファイル(ここの例ではsource.declist)も同時に出力されますので、このファイルを見ながら手で入力することもできます。

Makeによるビルド

コマンドプロンプトで使えるmake.batも用意しました。もしCygwin環境を使うことができるなら、そのままmakeを使うことができます。

ビルドに使うMakefileをサンプルとして入れています。Makefile中の変数ASM_DIRおよびSRCの値を適切に書き換えてください。

仕組み

アセンブル時にソースコードの前に”demas.s”をインクルードしています。demas.sは先頭でさらに”demas_pp.s”をインクルードしています。これらはマクロ定義の塊になっており、ソースコード中のDeMのニーモニックをマクロ展開してすべてバイトデータに変換します。

このバイトデータの格納先はEEPROM領域です。DeMのコードは、WOBが高速で動作する必要がないためEEPROM上に置かれたままDeMインタプリタにより読み取られ実行されます。貴重なSRAMを節約するための窮余の策だったのですが、EEPROMの不揮発性がご利益となり、ユーザのプログラムが電源OFFでも消えないという利点をもたらしました。また、暴走してもプログラムが書き換わってしまう危険性がきわめて低いという点でも合理的です。