IchigoJamのBASICプログラム上のバイナリデータが占有するプログラム容量を低減するためのツールを作成しました。本ツールによるプログラム書式を「B15形式」として提案したいと思います。
現状、81バイト以上のバイナリやマシン語を含むプログラムの配布などに適していると思います。
なお、まだテストが不十分につき不具合があるかもしれません。
開発の背景:C言語をIchigoJam用にコンパイルする
10月10日の朝、C言語で書いたプログラムをコンパイルして IchigoJam に転送可能な形式に変換するプログラムがFacebookのIchigoJam FANグループに投稿されました。
これを触っていて気づいたことがあります。それは、POKEで書かれたマシン語のプログラムの方が、同じ機能を持つBASICプログラムよりもプログラム用メモリーを多く消費してしまう場合があることです。
そこで、マシン語のサイズが大きくなってしまった場合のPOKE書式プログラムや自作文字フォントデータなどのバイナリデータを効率よくプログラムに埋め込むツールが必要と考え、その暫定版を作成しました。
C言語開発環境の続き:Windows での利用方法
上記で投稿されたC言語からのマシン語変換(poke文への変換)ツールはMac用でした。私も同じコンパイラを使用することでWindowsのCygwin環境でも動作することを確認しました。その手順の概要を以下に記しておきます。
なお、Pythonの部分(オブジェクトをpoke形式に変換するプログラム)については、プラットフォームにほとんど依存しませんが、使用するコンパイラによって生成されるバイナリデータが異なりますのでご注意ください。
今日の本題:メモリ内のデータをテキスト化する
前置きが長くなりましたが、このように転送したプログラムは、すぐに長くなってしまいます。16進数を文字として表示するのが無駄だからです。そこで、16進数では無くテキスト形式で記憶するようにしてみました。この方法でプログラム部分の容量を3分の一に低減することが出来ます(16バイトを1行に記録する条件・デコーダ含まず・従来78バイト⇒本方式26バイト)。
以下が実行画面です。
実行して、「3」を入力するとダンプリストが表示されます。「1」を押すとプログラムに変換します。ここでは画面に表示するだけです。図中の行番号11〜14が出力されたテキスト形式のプログラムですので、シリアル出力された内容を保存しておきます。ここではB15形式と呼ぶことにします。
次に、このB15形式プログラムに行番号96〜99の「B15 Decoder」を追加します。この形で保存しておけば、プログラム形式なので配布が簡単です。プログラムに要するメモリ容量も減らすことが出来ます。(ただし、行番号96〜99の追加による増加があるので、短いバイナリプログラムには適しません。)
エンコーダ/デコーダのプログラム
デコーダのみのプログラム
今後の課題と標準化
今回のエンコーダ(プログラム出力)はBASICで書きました。エンコーダ、デコーダの両方を作るのに一つのプラットフォームの方がスムーズだからと、どちらにしてもIchigoJam BASIC用のツールが必要と思ったからです。
まだデコーダのプログラムが長いです。もう少しフォーマットを見直して短くする必要があるでしょう。また、テストも不十分です。BASICの容量の都合上、各種のチェックを省いているので、色んな問題があるかもしれません。
順番としては、フォーマットが決まってからPythonで書いて、利便性が向上させるようなステップになります。
ところで、IchigoJam用のこういったフォーマットって、すでにあるのでしょうか。なければ、このB15形式を中心に改良したものをIchigoJam標準として貢献できれば幸いです。
プログラム用メモリ占有量の性能比較
本プログラムによるプログラム用メモリの低減効果は以下の通りです。従来方法はPOKEで16進数を使用した場合です。最新版の IchigoJam_bin2pokeでは10進数出力にも対応しており、もう少し容量削減することが可能です。
以上の結果から、81バイト以上のバイナリデータについては、本手法を用いることで小容量化が図れます。(80バイト以下の場合はpoke書式の方が小容量。)
補足(C言語float)
この方法ではC言語コンパイラでfloatやdoubleが使えないようです。実機で動かすと暴走してしまいます。浮動小数演算部は各オブジェクトのリンク時に生成されるらしく、オブジェクト単体で使う場合は未実装のままだそうです。(Kunihiro Aiharaさんによる情報)
補足(IchigoJam相対アドレスをC言語側で受け取る) [10/12 追加]
当ページを下記で紹介していただきました。
また、IchigoJam BASIC に相対アドレスをC言語側で受けれる仕組みが加わり、用途が大幅に拡大しました。(Version 1.1以降) 相対アドレスの割り当ては下記の情報も参照ください。 ライセンスについて
当ブログ上の情報およびプログラムはCC BYライセンスとします。自由に複製と改変が可能ですが、プログラムの再配布時は著作権表示が必要です。書式についてもCC BYといたします。権利表示は合理的であれば簡略化してもかまいません。(一例として「(C)2015 国野亘」や「(C)WataruKUNINO」といった表示と補足説明書やREADME、ウェブサイトなどの併用)。なお、Kunihiro Aiharaさんのプログラム IchigoJam_bin2pokeは2015/10/11現在Apache License Ver 2.0です。再使用時は最新のライセンス情報を確認してください。
ボクにもわかるIchigoJam用マイコンボード
|
この記事に
- >
- コンピュータとインターネット
- >
- コンピュータ
- >
- パソコン
当ブログの内容が下記で紹介していただきました。
http://fukuno.jig.jp/1173
また、相対アドレスをC言語側で受けれる仕組みが加わり、用途が大幅に拡大しました。(IchigoJam BASIC Version 1.1以降)
2015/10/12(月) 午後 1:12 [ ボク ] 返信する