0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

これまでの(LPC1114を用いた) IchigoJam と IchigoJam R 両対応のマシン語

Posted at

先日、こどもパソコン IchigoJam の新製品の IchigoJam R が発表されました。

IchigoJam R & IchigoSand 発表、HHKB他USBキーボード対応するRISC-V版、Zen言語でかんたんマシン語両対応 zen4ij #IchigoJam #riscv #zen / 福野泰介の一日一創 / Create every day by Taisuke Fukuno

※IchigoJamはjig.jpの登録商標です。

さて、この IchigoJam R 、これまでの IchigoJam とはCPUの種類が違うため、これまでのマシン語が使えないようです。
上記の記事の「両対応」は「同じソースコードからそれぞれのマシン語を生成できる」という意味で、
同じマシン語を両方で使えるわけではありません。

しかし、動く機種を限ってしまうというのは不便ですので、なるべく避けたいです。
そこで、同じマシン語を同じ位置から実行することで、両方で動くようにできる方法を考えました。

両対応のマシン語

結論からいえば、例えば

00101111 10110111
11100xxx xxxxxxxx

というマシン語が使えることがわかりました。

これまでの IchigoJam では、1行目はR7 - #B7を、2行目はGOTO n11を表します。
これまでの IchigoJam のマシン語 (一部)
(Cortex-M0 Armマシン語表 (asm15表記、抜粋) より抜粋)
1行目は比較命令なのでフラグレジスタの値が破壊されますが、他の汎用レジスタ(PCは除く)の値には影響を与えず、
2行目のGOTOで(命令が対応する範囲の)任意の場所に制御を移すことができます。

一方、IchigoJam R では、この2行でR31 = n32 (lui) を表します。
IchigoJam R のマシン語 (一部)
(RV32C RISC-Vマシン語表 (asm15r、抜粋) より抜粋)
したがって、レジスタR31の値が破壊されますが、他の汎用レジスタの値には影響を与えず、
次の命令に進むことができます。
The RISC-V Instruction Set Manual, Volume I: User-Level ISA, Document Version 20191213 の Chapter 25 RISC-V Assembly Programmer's Handbook を参照すると、
このレジスタR31にあたるx31は Temporaries かつ Saver が Caller となっているため、
マシン語を呼び出してすぐ保存するべきような重要な情報は入っていないと考えられ、
この処理により破壊してしまってもまあ大丈夫でしょう。

したがって、このマシン語により、データの破壊を最小限にしつつ、これまでの IchigoJam では処理をジャンプさせ、
IchigoJam R では処理をジャンプさせない、ということが可能になります。
あとは、分岐後にそれぞれの仕様に沿ったマシン語を配置すればいいでしょう。

組み込み例

以下のコードでは、これまでの IchigoJam ではマシン語が0を返して「イママデノ ヤツ」を出力する一方、
IchigoJam R ではマシン語が1を返して「アタラシイ ヤツ」を出力します。

10 ' CPU ヲ ハンベツ スル
20 POKE#700,`10110111,`00101111 :' R7 - #B7
30 POKE#702,`00000001,`11100000 :' GOTO @TRAD
40 POKE#704,`00000101,`01000101 :' R10 = 1
50 POKE#706,`10000010,`10000000 :' RET
60 ' @TRAD
70 POKE#708,`00000000,`00100000 :' R0 = 0
80 POKE#70A,`01110000,`01000111 :' RET
90 IF USR(#700,0) ?"アタラシイ ヤツ" ELSE ?"イママデノ ヤツ"

実行結果 (これまでの IchigoJam)
実行結果(IchigoJam R)

結論

これまでの IchigoJam ではジャンプするが IchigoJam R ではジャンプしない命令を用いることで、
マシン語がどっちのCPUで実行されているかを判別し、
それぞれにあった処理に分岐させることができることがわかりました。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?