OBONO’s Diary

へっぽこプログラマの戯言

IchigoJam

IchigoJam R 向けに作った Wire Climber について、先月、

とツイートしたわけなのだが、発売日の3月19日に電波新聞社からは何も届かなかったので、宣言通り、さっさと Kidspod; にて公開した。

ただ、IchigoJam R も現時点でまだそこまで普及していないであろうと思い、無印の IchigoJam でも遊べるようにしたら、それはそれで需要があるかなと、勢いで無印向けのマシン語版も用意してみた。BASIC プログラムが展開されている 1kB のメモリ領域にマシン語書いて SAVE / LOAD ができるという技を知ったというのも理由としてあるんだけどね。
見ての通り、POKE 文の塊なわけで、写経するにはちょっと厳しいものがある。MixJuice を使ったり、シリアル経由で流し込むというのが現実的なところかな。

ところで、マシン語版を作成する中で、IchigoJam API を利用するためのヘッダファイル std15.h を使わせてもらったのだが、pset 関数を呼び出しても点が描画されなくて、小一時間悩んでしまった。

#define pset(x, y) ((IJFUNC_P2)(void*)(uint32_t)*(uint16_t*)0xD2)((x), (y))

どうも、第三引数で点を打つか消すかを指定する必要があるっぽい。なので、

#define pset(x, y, z) ((IJFUNC_P3)(void*)(uint32_t)*(uint16_t*)0xD2)((x), (y), (z))

として、z に 0 以外を指定するのが正しいと思われる。実際、そうすることで点を描画することができた。もし、使う人がいればご注意を。