IchigonQuest では つうしん を用いて送受する際に独自の中間コードで送受します。
このページではこの中間コードの形式について説明しています。
IchigonQuest のアーカイブには reference.ja.txt のファイル、IchigonQuestコマンド仕様書 が含まれています。
この中間コード仕様の公式文章です。
ぼうけんしょ一つがバイナリーで 512 バイト固定になります。
これは ぼうけんしょ(プログラム)の長さに関係なく固定になります。
このページでは基本的にバイナリーで構成されている状態で説明をしています。
IchigonQuest へ送る場合は必ずバイナリー 512 バイト固定である事にご注意下さい。
1 バイトのコード(文字)を 0~9・A~F の 16 進数 2 文字に変換したものです。
16 進数 5A の 1 バイトコードであれば、「5A」という 2 文字に変換されます。
これは IchigonQuest そのものは考慮していませんが、Hex 形式に変換する事でテキストファイルとなり、
そのままプログラム投稿として行う事ができ、Kidspod; への投稿に採用されてきています。
単純に IchigonQuest のバイナリー 512 バイトを変換した場合は 2 倍 1024 バイトの文字となりますが、
IJUtilities や MicJack(MixJuice 上位互換)は終了後の FF ではじまる行以降を削除して生成します。
IchigonQuest へ送出する場合は不足しているところを FF ではじまる 8 バイトで埋めます。
1 行は 8 バイトで構成されます。512÷8=64 で、ぼうけんしょ 1 つの最大行は 64 行となっています。
行番号 01 8 バイト |
行番号 02 8 バイト |
: |
行番号 63 8 バイト |
行番号 64 8 バイト |
各行の 8 バイトは次のように構成されています。
ID | 種類 | 値 1 | 値 2 | 値 3 | |||
予備 | 値 3 | 値 2 |
値 1 |
||||
1 バイト | 1 バイト | 2 バイト | 2 バイト | 2 バイト |
それぞれ次の意味となっています。
1 バイト。じゅもん・どうぐ のコマンドが入っています。
1 バイトですが、ビット単位で更に分かれています。
種類内の値 1・値 2・値 3 はそれぞれ、次の値が入っています。
10 と 11 は予約扱いとなっています。
下位 8・7 ビットは現在 00 ですが、将来的に使われる事を想定し、00 固定である事を期待しないで下さい。
それぞれ 2 バイトで、下位 1 バイト・上位 1 バイトの順です。
値が入っていますが、種類によって値の意味が変化する事にご注意下さい。
使われていないところは現在 00 ですが、将来的に使われる事を想定し、00 固定である事を期待しないで下さい。
ここでの ID は 16 進数、値 1~値 3 は 10 進数の数値です。
種類・値 1~3 で空白のところは使用していないところです。(通常 16 進数 00 で埋めます)
種類で割り当てられているところは背景を変えています。
これに該当する値は 種類 が 2 進数 00 の場合は直接数値が入り、01 の場合は はこ の種類が入っている事にご注意下さい。
ID | 種類 | 値 1 | 値 2 | 値 3 | ||
値 3 | 値 2 |
値 1 |
||||
01 らいと・LED | 数値 | はこ | 消灯・点灯 (0|1) | ||||
02 あうと・OUT | 数値 | はこ | 出力状態 (0~63) | ||||
03 ぱるす・PWM | 数値 | はこ | OUT 端子 (2~5) | 幅 (0~2000) | |||
04 うぇいと・WAIT | 数値 | はこ | 長さ | 単位 (0|1) | |||
05 ごーとぅ・GOTO | 行番号 (番号-1) | |||||
06 いん・IN | 端子番号 (1~4) | |||||
07 あなろぐ・ANA | 端子番号 (0|2) | |||||
08 ぼたん・BTN | ボタン番号 (0~5) | |||||
09 = いれる・LET | 数値 | はこ | はこ | 入れる値 | |||
0A + たす・ADD | 数値 | はこ | はこ | 加える値 | |||
0B - ひく・SUB | 数値 | はこ | はこ | 引く値 | |||
0C * かける・MUL | 数値 | はこ | はこ | 掛ける値 | |||
0D / わる・DIV | 数値 | はこ | はこ | 割る値 | |||
0E % あまり・MOD | 数値 | はこ | はこ | 割る値 | |||
0F らんだむ・RND | 数値 | はこ | 最大 (0~32767) | ||||
10 ごーいふ・GOIF | 行番号 (番号-1) | 比較 (0~3) | 比較する値 | |||
11 えんど・END | ||||||
12 しーえるえす・CLS | ||||||
13 ぷりんと・PRINT | 数値 | はこ | キャラ | 数値 ※ | ||||
14 ろけーと・LC | 数値 | はこ | 数値 | はこ | X 座標 (0~31) | Y 座標 (0~23) | ||
15 すくりーん・SCR | 数値 | はこ | 数値 | はこ | X 座標 (0~31) | Y 座標 (0~23) | ||
16 えるらん・LRUN | ぼうけん (0~7) | |||||
17 びーぷ・BEEP | 周波数 (Hz) | 長さ (1/60 秒) | ||||
18 しーえるてぃ・CLT | ||||||
19 てぃっく・TICK | ||||||
1A あうとぴー・OUTP | 数値 | はこ | OUT 端子 (1~6) | 消灯・点灯 (0|1) |
※ 数値を入れた場合はそのコードのキャラクター、はこ を指定した場合は はこ に入っている数値を出力します。
プログラムの終端後は ID を FF で埋めます。
IchigonQuest は 8 バイトすべてを FF で埋め尽くしますが、
IJUtilities などでは ID 部を FF、他のところを 00 で埋めているものが見られます。
従って ID が FF であれば、他のところは無視し、ここでプログラムが終了していると判断すべきです。
それぞれ具体的な解説は じゅもん・どうぐ一覧 を参照して下さい。
IchigonQuest/じゅもん・どうぐ一覧 - GitHub で公開しています
ぼうけんしょのきろく より L チカ を解析してみます。Hex ファイルは次のとおりです。
010001000000000004003C000100000001000000000000000400E803000000000500000000000000FFFFFFFFFFFFFFFFFFF...
これを 8 バイト✕ 2 文字=16 文字毎に分けます。16 文字で 1 行分です。
FF はじまりがプログラムの終了なので、その後は破棄して構いません。
0100010000000000
04003C0001000000
0100000000000000
0400E80300000000
0500000000000000
FFFFFFFFFFFFFFFFF
更に 1 1 2 2 2 バイト毎なので、それぞれ 2 倍の 2 2 4 4 4 文字で空白を入れます。
01 00 0100 0000 0000
04 00 3C00 0100 0000
01 00 0000 0000 0000
04 00 E803 0000 0000
05 00 0000 0000 0000
FF FF FFFF FFFF FFFF
では解析してみましょう。次のようになります。値 1~3 は 下位・上位 の順になっている事にご注意下さい。
3C 00 なら 003C で、10 進数 60 となります。種類は全て 00 なので、理解しやすいでしょう。
種類は 16 進数のままでは分かりにくいので、2 進数に変換し、2 桁ずつにします。
行 | ID | 種類 (予約 値3 値2 値1) | 値 1 | 値 2 | 値 3 |
01 | 01 (らいと・LED) | 00 | 01 00 (1=点灯) | 00 00 | 00 00 |
02 | 04 (うぇいと・WAIT) | 00 (00 00 00 00=数値) | 3C 00 (数値 60) | 01 00 (1=1/60 秒単位) | 00 00 |
03 | 01 (らいと・LED) | 00 | 00 00 (0=消灯) | 00 00 | 00 00 |
04 | 04 (うぇいと・WAIT) | 00 (00 00 00 00=数値) | E8 03 (数値 1000) | 00 00 (0=ミリ秒単位) | 00 00 |
05 | 05 (ごーとぅ・GOTO) | 00 | 00 00 (0+1=行 1 へ) | 00 00 | 00 00 |
06 | FF (プログラムの終了) | FF | FF FF | FF FF | FF FF |
行 2 と 行 4 の うぇいと・WAIT は共に 1 秒なのですが、単位が違っていますね!? 指定の仕方を変えていたのです。
同じように 風船 も解析してみます。ぼうけんしょ と見比べてみると良いです。
ただし、こちらは 種類 も見る必要があるので注意を要します。
行 | ID | 種類 (予約 値3 値2 値1) | 値 1 | 値 2 | 値 3 |
01 | 09 (= いれる・LET) | 00 (00 00 00=数値 00) | 01 00 (1=はこ A) | 01 00 (数値 1) | 00 00 |
02 | 12 (しーえるえす・CLS) | 00 | 00 00 | 00 00 | 00 00 |
03 | 0F (らんだむ・RND) | 00 (00 00 00 00=数値) | 1F 00 (最大 数値 31) | 00 00 | 00 00 |
04 | 14 (ろけーと・LC) | 01 (00 00 00=数値 01=はこ) | 00 00 (0=はこ #) | 00 00 (数値 0) | 00 00 |
05 | 13 (ぷりんと・PRINT) | 00 (00 00 00 00=数値) | E3 00 (キャラクター ○) | 00 00 | 00 00 |
06 | 14 (ろけーと・LC) | 00 (00 00 00=数値 00=数値) | 00 00 (数値 0) | 17 00 (数値 23) | 00 00 |
07 | 13 (ぷりんと・PRINT) | 00 (00 00 00 00=数値) | 00 00 (キャラクター空白) | 00 00 | 00 00 |
08 | 04 (うぇいと・WAIT) | 00 (00 00 00 00=数値) | 05 00 (数値 5) | 01 00 (1=1/60 秒単位) | 00 00 |
09 | 14 (ろけーと・LC) | 01 (00 00 00=数値 01=はこ) | 00 00 (0=はこ #) | 00 00 (数値 0) | 00 00 |
10 | 13 (ぷりんと・PRINT) | 01 (00 00 00 01=はこ) | 01 00 (1=はこ A) | 00 00 | 00 00 |
11 | 05 (ごーとぅ・GOTO) | 00 | 02 00 (2+1=行 3 へ) | 00 00 | 00 00 |
12 | FF (プログラムの終了) | FF | FF FF | FF FF | FF FF |
MicJack を用いた Kidspod; 公開向けの IchigonQuest ぼうけんしょ は次の形式となります。
IJUtilities 0.9.9d6 よりこの形式に対応しています。ファイルは ASCII 形式の場合、次の形式で保存されます。
'IchigonQuest JOURNEY
(ぼうけんしょと入力手順)
[HEX]
(Hex データ)
1 行目「'IchigonQuest JOURNEY」はこのデータが IchigonQuest である事を IJUilities で判別させるために必要です。
ぼうけんしょと入力手順部分は省略できます。Hex データがあれば、この解読を優先します。
IJUtilities では IchigoJam BASIC に近い形式での保存にも対応していますが、ここでは考慮しません。
SkyBerryJAM は 栃木県立栃木工業高等学校 が管理する登録商標であり、
SkyBerryJAM は 栃木県立栃木工業高等学校 の商標です。
Raspberry Pi は
Raspberry Pi 財団 の登録商標です。
Raspberry Pi is a registered trademark or
trademark of
the Raspberry Pi Foundation.
"RISC-V" の商品名は RISC-Vインターナショナル が管理する登録商標です。
The “RISC-V” trade name is a registered trade mark of
RISC-V International.