
11年前の今日、
IchigoJamを発表。想像以上の反響により製品化。
おかげさまで、たくさんの人に使っていただいています!

「4月1日はIchigoJamの誕生日。 - Hana道場」
鯖江のHana道場ではこどもから大人まで幅広くプログラミングの楽しさを学べます。

「IchigoJam O | PCN プログラミング クラブ ネットワーク」
PCNから「IchigoJam O」登場!田んぼでプログラミング教材とも連携する、田んぼの除草ロボット「Okaki」を使った恐竜の里、勝山で採れた無農薬米「ディノヒカリ」が当たる、#IchigoJamO ハッシュタグ付き投稿キャンペーン付き!

NXP社のLPC1114との出会いがなければ誕生していなかったIchigoJam。LPCシリーズの後継、MCXシリーズの開発ボード「FRDM-MCXA153」をMacに接続!

Windows/Mac/Linuxに対応する統合開発環境「MCUXpresso IDE」をダウンロードし、開発ボード「MCXA1XX / frdmmcxa513」を選択して、プロジェクトを新規作成。IchigoJamのオープンソースを組み込みます。
LEDを接続するには、ichigojam-io.h を下記のように編集
S_INLINE void IJB_led(int st) {
if (st) {
GPIO_PortClear(BOARD_LED_GPIO, 1u << BOARD_LED_GPIO_PIN);
} else {
GPIO_PortSet(BOARD_LED_GPIO, 1u << BOARD_LED_GPIO_PIN);
}
}
IchigoJamのBASICのコードと、MCXのコンピューターがつながります!
青い虫マークのデバッグ実行ボタンを押すと、コンパイルして転送がすぐ終わり、サクッとステップ実行できて快適です!

USBシリアルで使えるので、ナチュラルスタイルの「DirectApps」や、「IchigoTerm」が使えます。
MCU-LINKで始まるものを選んで、接続!

LED1でつきました!
ついでに、USRコマンド、マシン語も実装しておきましょう。
usr.h を下記のように編集
extern uint64 __aeabi_uidiv(uint numerator, uint denominator);
#define FUNC_DIVU __aeabi_uidiv
inline int IJB_usr(int ad, int n) {
if (ad >= OFFSET_RAMROM && ad < SIZE_RAM + OFFSET_RAMROM) { // b10 limit:0x800 -> 0x1000
int (*f)(int, void*, void*, void*) = (void*)(ram + ad - (OFFSET_RAMROM - 1));
void* mem = (void*)((uint)ram - OFFSET_RAMROM); // R1
void* rom = (void*)CHAR_PATTERN; // R2
void* fdiv = (void*)FUNC_DIVU; // R3
_g.err = ERR_SEGMENTATION_FAULT;
n = f(n, mem, rom, fdiv); // 1.2.2b31
_g.err = 0;
} else {
command_error(ERR_ILLEGAL_ARGUMENT);
}
return n;
}
MCX-A153は、Cortex-M33とLPC1114よりちょっと上位のコンピューターですが、マシン語は上位互換なので、LPC1114版と同じコードが使えました。

GitHubの「IchigoJam-firm」のIchigoJam_MCXを読み込むことで、MCX版IchigoJamオープンソース開発に参加できます!

「はじめてのマシン語 - IchigoJamではじめるArmマシン語その1」を見て、1+1をマシン語で計算させてみました。マシン語が使えれば、こっちのもの。レジスタを直接いじって何でもできちゃいますね!(参考、マシン語でLEDを光らせよう! - IchigoJamではじめるArmマシン語その4)
みんなでつくろう、IchigoJam!
コンピューターの活躍の場は広大です。
links
- IchigoJam 10才、IchigoJam OSSを使った IchigoJam console β とITブートキャンプ in 神山