2016-08-08
やりたいことが遅くでできない時、速いCPUに変えるのは簡単ですが、その分コストアップするので製品化する際の値段に直接響きます。 IchigoJamではじめるArmマシン語、待望(?)のその4、公開です!
8ビットマイコン時代に逆戻り? アセンブリ言語が人気上昇 - ITmedia ニュース

1列に並んだLEDをすばやく振ると文字や絵が浮かび上がるものをバーサライターと呼びます(海外ではPOV=残像)。

4つのLEDをIchigoJamのOUT1〜OUT4につないで・・・

こんなプログラムを打ち込んで、振ってみましょう!(動画 on Vine

10 LET[0],`0110,`1001,`1001,`0110:N=4 20 FOR I=0 TO N:OUT[i]:OUT0:WAIT1:NEXT 30 WAIT 5 40 GOTO20

10行のデータとデータの数(N)を変更するとパターンを変えられます。

この1列のLEDをモーターでぐるぐる回転させて、その上に文字や絵を浮かび上がらせたい場合、BASICではちょっと速度が足りないかもしれません。 そんな時、CPUパワーをフルに使えるマシン語を使います!

IchigoJamのCPU、LPC1114の説明書(ユーザーマニュアル)を開きます。(LPCマイコン情報:LPC1100 (X)L Cortex-M0搭載-低消費電力内)
LPC1114FN28とFDH28のピン配置で、OUT1〜OUT4は、PIO1_0〜PIO1_3であることがわかります。

続いて、メモリーマッピングを見るとそのピンの操作はGPIO PIO1として、#50010000にマッピングされていることがわかります。

GPIOの項目を見ると、#50010000のアドレスから書き換えたいピンをbitに変更して2bitずらしたところを足したメモリに書き込めばいいことがわかります。

つまり、OUT1〜OUT4の状態を変更するプログラムを擬似的に表すと

[#50010000+`111100]=R0

となります。

ただ、32bitのアドレスを値で指定してメモリを直接書き込む命令はないため、前回のマシン語表を見て、分解します。

R3=#50 R3=R3<<8 R3=R3+1 R3=R3<<16 R3+=`00111100 [R3]L=R0 RET

これをマシン語に変換します。

R3=#50 `00100 011 01010000 R3=R3<<8 `00000 01000 011 011 R3=R3+1 `00110 011 00000001 R3=R3<<16 `00000 10000 011 011 R3+=`00111100 `00110 011 00111100 [R3]L=R0 `01100 00000 011 000 RET `0100011101110000

できたマシン語を打ち込みます。
16bitの2進法をIchigoJamのメモリ#700から順番に書く、簡易モニターを使って打ち込んでみます。

10 A=#700 20 ?"AD:";HEX$(A) 30 INPUT N 40 ?"VAL:";HEX$(N,4) 50 POKE A,N:A=A+1 60 POKE A,N>>8:A=A+1 70 GOTO 20

できたら、呼び出してみましょう

?USR(#700,1) OK ?USR(#700,15) OK ?USR(#700,0) OK

OKと出ずにフリーズしてしまったら、それは残念ながらどこか打ち間違えて、暴走してしまったことになります。 あきらめて、本体の電源を切ってやり直しましょう。

- やってみよう
マシン語でPOVをつくってみよう
LEDやOUT5,6を使ってもっと大きなPOVをつくってみよう
IN1の入力をマシン語で読み取って、モーターで回りながら上を認識させてみよう(ヒント、GPIO0を読みだすと入力になる)

- 連載、IchigoJamではじめる、Armマシン語入門
1. はじめてのマシン語
2. ハンドアセンブルで超速計算!
3. マシン語メモリアクセスで画面超速表示!
4. マシン語でLEDを光らせよう!
5. 楽しさ広がるマルチバイトメモリアクセスとスタック
6. マシン語使いこなしTIPS
7. カジュアルに使うインラインマシン語
8. アセンブラを使って楽しよう
9. マシン語で高速SPI
10. マシン語を制するもの時間を制す
11. 画面をイチゴで埋め尽くす12の方法
12. レジスタ不足に上位レジスタとスタック操作
13. コンパイラはじめのいっぽ、EVAL実現法とマシン語生成
14. サイズを取るかスピードを取るか、割り算のアルゴリズムとマシン語実装
15. マシン語化で1万倍速!? セットで学ぶアルゴリズムとコンピューター

Tweet
クリエイティブ・コモンズ・ライセンス
本ブログの記事や写真は「Creative Commons — CC BY 4.0」の下に提供します。記事内で紹介するプログラムや作品は、それぞれに記載されたライセンスを参照ください。
CC BY / @taisukef / アイコン画像 / プロフィール画像 / 「一日一創」画像 / RSS