公開日:2024/07/27
31st Season
#31-2 Moscoviumの開発環境(付録)
このページは、本HPで作成したオリジナル16ビットCPUコアMoscoviumをBlocklyで開発するための、Blockly.XML→Moscovium.ASM変換スクリプトマニュアルです。
詳細については、以下リンクから本文を参照してください。
本文へ戻る。
Blockly.XML to Moscovium.ASM translator Manual
================================
BlocklyDuinoページで作成したXMLファイルの対応は、廃止しました。
本ページは、時代遅れの参考記事です。
================================
|
現在、Google Blocklyデモ環境のエディタを使用可能ですので、こちらの記事「#31-6 Moscoviumの開発環境(カスカス)」をご確認ください。 |
概要
オリジナル16ビットCPUコアMoscoviumのプログラムを、Blocklyで開発できる様になりました。
Google Blockly公式HP(別ウインドウが開きます)
Blocklyは、Google社が提供する、グラフィカルにブロックを組み上げることでプログラムを開発できる、ビジュアルプログラミング開発環境です。
BlocklyDuino
BlocklyDuinoページ(下図、およびリンク)が出力する、XMLファイルを読み込み、Moscoviumアセンブラソースリスト(ASM)ファイルに変換する、スクリプトを提供します。
変換スクリプトはこちらからダウンロード可能です。
※スクリプト(.olv)の実行には拙作Olive+をWindowsにインストールしてください。
変換手順
Blockly.XMLからMoscovium.ASMソースリストへの変換は、いたって簡単です。
アセンブラ言語に比べて抽象度の高いBlocklyを使ってプログラムを組むことができるのは、大きな優位となるはずです。
変換に対応したブロック
以下図に、Blockly.XML→Moscovium.ASM変換スクリプトが対応可能なブロック種を示します。
上図は、変換に対応しているブロックを、いい加減に組み合わせたものです。プログラムとしての意味は無いので、ブロックの種類だけに着目して見てください。
以下、各ブロックについて、簡単に説明します。
- Logic
- ifブロック
- 「★」アイコンをクリックすると、else ifやelse等の組み合わせを指定可能です。
- if/else if/else等の処理内容(do)を空にすると、エラーになります。
- 比較ブロック
- 数値または、文字列の比較を実行します。
- 数値比較の場合、コメント中に指定する変換オプションによって、符号付整数比較"@int@"または、浮動小数比較"@float@"、を実行します。
- 2数共、符号付整数型あるいは浮動小数型と見なしますので、揃えて使ってください。
- 浮動小数比較では、比較結果がNaNにならないことを確認してください。
- 論理演算ブロック
- 複数の比較結果などを組み合わせることができるブロックです。
- and/or論理演算を選択できます。
- notブロック
- false/trueブロック
- 真理値false/trueを指定可能なブロックです。
- Loops
- repeatブロック
- doに指定したプログラム列を指定回数繰り返すループです。
- count withブロック
- 指定した変数をfrom値からto値まで1ずつ増加しながら実行するループです。
- whileブロック
- 指定した条件が真(true)の間、実行し続けるループです。
- break/continueブロック
- ループ内から抜けたり(break)、ループの先頭に戻ったり(continue)する、ループ制御ブロックです。
- Math
- 数値ブロック
- 数値を指定可能なブロックです、
- 0xa1等の16進数値も入力可能ですが、自動的に10進数値に変換されてしまうようです。
- Type Castブロック
- 指定した値を、int型または、float型に変換するブロックです。
- int型への変換:
- 引数は、強制的に浮動小数と見なし、これを符号付整数に変換して返します。
- 一般に、float型の値の範囲の方が、int型の値の範囲よりも広いため、全ての数値を変換する事はできません。
- 範囲を超えていたとしても、エラーなどは発生しませんので、ご注意ください。
- float型への変換:
- 引数は、強制的に符号付整数と見なし、これを浮動小数に変換して返します。
- 数値演算ブロック
- +(加算)/−(減算)/×(乗算)/÷(除算)/%(剰余算)の、各数値演算を実行します。
- コメント中に指定する変換オプションによって、符号付整数演算"@int@"または、浮動小数演算"@float@"、を実行します。
- 2数共、同じ型(符号付整数型あるいは浮動小数型)と見なしますので、揃えて使ってください。
- constrainブロック
- 指定した数値Xを、low値からhigh値までの間に制限して返します。
- X≦lowの場合、lowを返します。
- X≧highの場合、highを返します。
- それ以外の場合、そのままXを返します。
- Text
- Variables
- setブロック
- 指定した変数に値を設定するブロックです。
- デフォルトの「item」変数を配置した後で、「Rename variable...」として、新規変数を作成できます。
- 文字列変数を使う場合のみ、String型を選択してください。
- 一度、String型に設定した変数は、一貫してString型として使用してください。
- それ以外の型を指定しても動作に影響なく、無視しますので、int型を指定する事を推奨します。
- 全ての変数はグローバル変数です。
- 変数参照ブロック
- 変数値を参照するブロックです。
- 全ての変数はグローバル変数です。
- Function
- 関数ブロック
- 関数を作成するブロックです。
- 「★」アイコンをクリックすると、引数変数を指定可能です。
- 引数変数も含め、全ての変数はグローバル変数です。
- ローカル変数は使用できないので、注意してください。
- In/Out
- LOW/HIGHブロック
- 汎用I/Oポートの出力レベル(LOW/HIGH)を指定するブロックです。
- DigitalWriteブロック
- Arduino IDEのdigitalWrite()関数と同様、指定した汎用I/Oポートへ、指定したレベルの値を出力します。
- 汎用I/Oポートは、0〜15までの数値で指定でき、こちらのピン配置表のport_iop[0]〜port_iop[15]に対応します。
- DigitalReadブロック
- Arduino IDEのdigitalRead()関数と同様、指定した汎用I/Oポートの電圧レベル値を読み出します。
- 汎用I/Oポートは、0〜15までの数値で指定でき、こちらのピン配置表のport_iop[0]〜port_iop[15]に対応します。
- Time
- millisブロック
- リセット解除後からの経過時間をミリ秒単位で返します。
- microsブロック
- リセット解除後からの経過時間をマイクロ秒単位で返します。
- delayブロック
- delayMicrosecondsブロック
- Serial
- Serial Availableブロック
- UART8N1ユニットに1バイト以上の受信データがあった場合に、1を返します。
- 受信可能なデータが存在しない場合は0を返します。
- Serial Printブロック
- 文字列をシリアルモニタ(UART8N1ユニット)へ送信します。
- 文字列の代わりに、数値を引数として渡した場合、数値を符号付整数値と見なして、10進数文字列に変換して、送信します。
- 浮動小数や、16進数文字列などには非対応です。
- Serial Printlnブロック
- Serial Printブロックと同じ動作の後、改行コード(CR+LF)を送信します。
- Serial Readブロック
- シリアルモニタ(UART8N1ユニット)から1バイトのデータを読み出します。
非対応のブロックを使用すると、Blockly.XML→Moscovium.ASM変換スクリプトがエラー終了します。
変換オプション
Blocklyエディタの「右クリック ⇒ Add comment」で追加できるコメント中に、変換オプションを指定することができます。
以下に、変換オプションの仕様を示します。
変換オプション仕様:
- Blocklyのコメント(<comment>〜</comment>)中にテキストで指定します。
- ブロックの「右クリック ⇒ Add comment」で追加できるコメントです。
- "@"<translator_options>"@"
- コメント中の"@"から"@"までの間が変換オプション<translator_options>です。
- 1つのコメント中、最初に見つかった"@"〜"@"が有効です。
- <translator_options>=<translator_option>[","<translator_option>[","……]]
- カンマ(,)で区切って、複数の変換オプション<translator_option>を指定可能です。
- <translator_option>=
- "Mc": Moscovium 16ビットモード
- Moscovium/Moscovium-SS/Nihonium/Nihonium-SSで動作可能なアセンブラソースリストを出力します。
- "Nh": Nihonium 32ビットモード
- Nihonium/Nihonium-SSで動作可能なアセンブラソースリストを出力します。
- Moscovium 16ビットモードと、Nihonium 32ビットモードを選択します。
- 一度指定したら、同じプログラムの中で、重複して異なるモードを指定することはできません。
- オリジナル8ビットCPUコアTennessineは、対象外です(Blocklyの適応不可)。
- "int": 符号付整数モード
- "float": 浮動小数モード
- 変数や数値、演算等を符号付整数として扱うか、浮動小数として扱うかを切り替えます。
- "@Mc@"+"@float@"では、半精度浮動小数となり、Moscovium+H-FPUコプロセッサが必要です。
- "@Nh@"+"@float@"では、単精度浮動小数となり、Nihonium+S-FPUコプロセッサが必要です。
- プログラム中何度でも指定可能です。
- ブロックの定義順番に従い、"@int@"または"@float@"オプションが指定されてから、次の"@int@"/"@float@"オプションが指定されるまでの間、有効となります。
- 変換開始時のデフォルトモードは、符号付整数モード"@int@"です。
- "cstr_siz=<size>": 文字列のバッファサイズを<size>バイトとします。
- C言語文字列(NIL'\0'終端)なので、最後のNILバイトを含めて、<size>バイト以内で使用してください。
- 本オプションが複数回指定された場合、最後に指定された<size>が有効です。
- 明示的に指定しなかった場合のデフォルトは、"@cstr_siz=64@"です。
- <translator_option>の大文字小文字は区別しません。
- 未定義のオプションを指定する事は禁止です。
- 例)
- @Nh,cstr_siz=256@
- Nihonium 32ビットモード指定。
- 文字列バッファサイズ256バイト。
- @int@
- @float@
ブロック毎に"@int@"/"@float@"オプションを切り替える事で、符号付整数演算と、浮動小数演算を混在する事が可能です。
改訂履歴
日付 |
項目 |
備考 |
2024/08/31 |
BlocklyDuino対応終了 |
廃止 |
2024/07/27 |
Blockly.XML→Moscovium.ASM変換スクリプトマニュアル |
作成 |