create every day - 福野泰介の一日一創

光るカセットテープに記録したい、カンサスシティスタンダード風IchigoJamプログラムの音声化

2017/12/06 23:55:00
#IchigoJam #maker 

PCN秋葉原Assemblageにて、光るカセットテープのミニ講習。

初めてのカセットテープの分解。テープをびろびろーっと出しても誰にも怒られませんよっ


カセットテープに、テープ状のWS2812Bを5つ貼るだけ簡単工作は、お昼休み中にできちゃいます。


ロボット芸人、髙橋ちゃんもマシン語打ち込み&カセットテープキラキラ成功!

せっかくのカセットテープ、録音させたくなりますね。
かつてカンサスシティスタンダードというカセットテープへの保存方法の標準が使われていた様子。
低い音1200Hzで0を、高い音2400Hzで1を表し、1秒間に300コの音でデータを表現するらしい。
とりあえず、IchigoJamのBEEP音で近い音、13と7を使って、プログラム領域(#C00)を鳴らしてみよう!

10 BEEP7,60:WAIT60 20 FORI=0TO1023:C=PEEK(#C00+I) 30 FORJ=0TO7:IF C&(1<<J) BEEP13,2 ELSE BEEP7,2 40 WAIT2:NEXT:NEXT:?

最初にピーっと高い音を1秒ならして、1byteずつ取得して、それを下位bitから順に音にします。
WAITでタイミングをとっているので、これで1秒間に30コ。1/10のスピードです。
RUN on IchigoJam web、ブラウザで動かす


PLAY文を使って300コへスピードアップする方法(ただし、画面広さの関係で数十byteのみ)

10 CLS:?"O5T30N7T18000"; 20 FOR I=0 TO 32:C=PEEK(#C00+I) 30 FOR J=0 TO 7:IF C&(1<<J) ?"D"; ELSE ?"N7"; 40 NEXT:NEXT:? 50 PLAY#900

BASICで実験してみて、うまくいけばマシン語化してパソコンやスマホに読み取らせるのもおもしろそう!
子供がつくったプログラムを、大人のスマホを通じて投稿とか簡単にできちゃうかも!?


秋葉原のAssemblage(アセンブラージュ)には、キラキラ動くかわいいものがたくさん!
ぜひのぞいてみてくださいっ

もっと楽するコンパイラ、WebAssemblyマシン語入門その3

2017/12/05 23:55:00
#asm #wasm #js 

IchigoJam web(ブラウザで動くIchigoJam)で使っているお気に入り技術、WebAssembly。
マシン語をバイナリで直接書いてみる第一回、初歩的なアセンブラ体験する第二回に続く第三回のテーマは、コンパイラです。

おさらいとして、前回のアセンブラで、param+10 を計算するプログラムを作ってみましょう。

正解はこちら

get_local $0 i32.const 10 i32.add end

paramが1の時、ちゃんと答は11と出ます。では、param+100 を計算するプログラムに変えてみてください。

おや、おかしいですね!?では、128にすると、今度はコンパイルエラーになってしまいます。

WebAssemblyのマシン語での数値は大きさによって1byteから5byteまで長さを変えて表します。最上位bitが1なら、次のbyteを読んで上位に追加していく仕組みになっています。 つまり、1byteで表せる数は、7bitで表せる-64〜63まで。100(2進数で1100100)はこの範囲を超えているので、上位bitを1にして、残りのbitを次のbyteで表すので、1 1100100 (e4) と 0 0000000 (00) となります。

WebAssemblyのコードを書き換えて試してみましょう。

20 0 41 e4 0 6a b

i32.const を表す 41 の後の 64 (=10進数の100) を、e4 に変えてその後ろに 0 を加えて「RUN」
ちゃんと答がでました!

このような計算をいちいち手でやらなくて済む方法は?・・・そうです、プログラムですね。
命令表から手打ちするのも面倒なので、短く楽にプログラムを書けるようにするソフトをつくりましょう。

コンパイラはじめのいっぽ
「P 3 +」と空白区切りで書いたら対応するアセンブリ言語を出力するものです。
※ P は、パラーメータ0を意味することにします

compilebtn.onclick = function() { var src = srcprg.value.split(" "); var asm = []; for (var i = 0; i < src.length; i++) { var s = src[i]; if (s == "P") { asm.push("get_local 0"); } else if (s == "+") { asm.push("i32.add"); } else if (parseInt(s) == s) { asm.push("i32.const " + s); } } asm.push("end"); srcasm.value = asm.join("\n"); }

簡単ですね。このようなソフトをコンパイラといいます。
掛け算とかいろいろ足したものがこちら「WebAssembly poor compiler」です。

WebAssembly poor compiler

「P 3 +」と入力し「COMPILE」「ASSEMBLE」「RUN」と順に押して、答が出してみましょう。

課題:パラメータを自乗して1を足すプログラムをつくってみよう!

アセンブラも上記、大きな数値にも対応するよう改良してあるので、プログラムを確認してみてください。

次はこのコンパイラをもう一歩進めて、もっと自然な数式で書けるように改良してみます。
待ちきれない人は、どんどん進めちゃってください!

WebAssemblyマシン語入門
- ブラウザだけでOK! 1+1からはじめる、WebAssemblyマシン語入門その1
- プログラミングはプログラミングで楽をする、WebAssemblyマシン語入門その2
- もっと楽するコンパイラ、WebAssemblyマシン語入門その3

- 連載、IchigoJamではじめる、ARMマシン語入門
1. はじめてのマシン語
2. ハンドアセンブルで超速計算!
3. マシン語メモリアクセスで画面超速表示!
4. マシン語でLEDを光らせよう!
5. 楽しさ広がるマルチバイトメモリアクセスとスタック
6. マシン語使いこなしTIPS
7. カジュアルに使うインラインマシン語
8. アセンブラを使って楽しよう
9. マシン語で高速SPI
10. マシン語を制するもの時間を制す
11. 画面をイチゴで埋め尽くす12の方法

links
- WebAssembly Advent Calendar 2017 - Qiita 参加!

IchigoJam RPi, a Third Party OS for Raspberry Pi can program the IchigoJam / Kids Coding 50th!

2017/12/04 23:55:00
#IchigoJam #KidsIT #rasppi #english 

A third party OS for Raspberry Pi "IchigoJam RPi" can connect and program the IchigoJam with LPC1114 via just 3 jumper wires.
ラズパイ用サードパーティーOS「IchigoJam RPi」はIchigoJamをジャンパーワイヤー3本で簡単につないで、プログラムできますよ!

Connect 3 wires after boot both IchigoJams. 起動してから3本つなぐ
1. RPi:6pin(GND) - IchigoJam:GND
2. RPi:8pin(TXD) - IchigoJam:RXD
3. RPi:10pin(RXD) - IchigoJam:TXD

Type followings on IchigoJam RPi つぎのように打つ

?"LED1

Your remote IchigoJam lighted! するとつないだIchigoJamが光る!


You can program also! プログラムもできちゃいます

?"1 LED1:WAIT10 ?"2 LED0:WAIT10 ?"3 GOTO 1 ?"RUN


Send #1B (=0x1b, code of ESC) to stop 止める時は#1Bを送信

?CHR$(#1B)

Unwire a wire if IchigoJam repeated errors. エラーがループしたらワイヤーを1本ぬく
You can change the no response mode "OK0" レスポンスなしモードは「OK0」

OK0

Make a VIDEO connector for Raspberry Pi Zero ビデオコネクターづくり

Just solder a 2P pin header and a composit connector
2Pピンヘッダーとコンポジットコネクターをはんだづけするだけ!


You can use the 4.3 inch mini monitor! 4.3インチのミニモニターが使えます!

How to use the IchigoJam RPi つかいかた
1. Download the OS, IchigoJam RPi (https://ichigojam.github.io/RPi/)

2. Write to SD 書き込み
3. Boot! 起動

You can find the "IchigoJam RPi" on the Raspberry Pi official DOWNLOADS page!
ラズパイ公式のダウンロードからも辿れます!

Enojoy programming and computing! プログラミングとコンピューティングを楽しもう!


photo 2016.12.11: Mr. Eben Upton(@EbenUpton), inventor of Raspberry Pi and inventor of IchigoJam! 「IchigoJam meets Raspberry Pi! Mr. Eben Upton's first IchigoJam BASIC program is...
We've released IchigoJam RPi with I-O DATA!
エベン氏と会って1年、アイ・オー・データ機器のイベントでついに IchigoJam RPi 発表!
Moblie Game Machine making workshop for Kids using IchigoJam RPi / I-O DATA FAIR 2017


photo from 「10 age kid who got PCN RaspberryPi award is creating a electric circuit with transistors as his own idea! Let’s spread Kids Programming! / PCNラズパイ賞を受賞した10歳の子は「最近はトランジスタが楽しい」と、オリジナルなモーター回路を設計中!IchigoJam RPi でますます広がる こどもプログラミング! – about yrm
Raspbery Pi Foundation supported our PCN Kids Programming Contest 2017 in Summer.
Thanks a lot!! ラズパイ財団からPCNこどもプロコンに特別協賛、感謝!


Today (4 December) is 50th anniversary of Kids Coding! なんと子供のコーディング50周年記念日!
Celebrating 50 years of Kids Coding


IchigoJam can connect Rwanda and us also. / IchigoJamがつないでくれたルワンダとの縁!
Programming for Rwandan kids! Open Teaching Materials

Programming for All Kids! - PCN / すべてのこどもたちにプログラミングするきっかけを!

地方公共団体サイト、97%に改ざん・盗み見リスク - 日経新聞一面で喚起された常時SSL(AOSSL)しないリスクと未来の情報発信

2017/12/03 23:55:00
#opendata 

日経新聞一面「中央省庁サイト、8割に改ざん・盗み見リスク:日本経済新聞」(詳細@ITPro
日本の地方公共団体、全区市町村1916サイトをチェックしたところ、93.1%が常時SSL(AOSSL、Always on SSL)に未対応でした。


日本の自治体「webの安全」対策率
日本の地方公共団体(自治体)のwebサイトをすべて独自に調べた結果による調査。(2016年11月の1.5%→2.8%、1.3%アップ)

常時SSL(AOSSL)は、オープンデータ活用も促進します。オープンデータを使ったアプリ開発時の障害、「データ活用に壁」と、コメント掲載。


地方公共団体の使用ドメインの信用度をチェックする「ドメインセンサス」3回目

安全な.lg.jpドメインが再びじわり増加し、709件(37.0%)。引き続き、信頼性の低いドメインが63.0%と多くが残存しています。

また、ドメイン移行時にWebサーバーがURLの変更を知らせるコード(301)を返し、すでにあるリンクからのアクセスがなくなるまで、開放しないことが重要です。手放してしまうと、フィッシング詐欺などに悪用されるリスクあり!
(過去調査、2016年3月17日2016年11月29日

webサイトを、誰にとっても安心できる、安全で、わかりやすく、どんなデバイスでもアクセスしやすくするのは大変です。 大小すべての地方公共団体がすべて完璧に対応するのを待つのは現実的ではありませんし、コスト的にも大いなる無駄です。

必要な機能やデータを常時SSLによって信頼性ある5つ星オープンデータとして提供し、世界共通の民間インターフェイスで使えるようにするのが近道です。
家計簿 Zaim 「わたしの給付金」と地方自治体の公式情報が連携 - 株式会社 Zaim
もらえる検索 - 自治体給付金オープンデータ活用アプリ、家計簿Zaim連携記念!

創ろう、世界最先端IT国家(閣議決定)

links
- ニュース解説 - 中央省庁の8割が非対応、常時SSL化の実態を独自調査:ITpro
- 中央省庁サイト、8割に改ざん・盗み見リスク:日本経済新聞
- codeforfukui/localgovjp: list of local government in Japan(日本の地方公共団体web一覧)
- Yahoo! JAPANサービスは常時SSL(AOSSL)に対応します - Yahoo! JAPAN

鎌倉x鯖江!つくろう地域資本主義の鯖江版。鎌倉市で一番多いのは何歳?

2017/12/02 23:55:00
#kamacon #sabae 

2014年から続くカマコンバレーと鯖江交流(@鯖江@鎌倉)、今回は、鯖江で実現!

鯖江市長訪問、鎌倉資本主義を掲げるカヤック柳澤さん他カマコンバレーメンバーと、Yahoo!JAPAN 中島さんも!

日本の強みは、多様性。それぞれの地域にそれぞれの強み。まだまだ眠っている強みが未発掘。
放っておくと埋もれ消えてしまう強み、外の目、中の目、多様な切り口で活かし、つなげて、活性化すべし。
過去からの延長ではダメだと多くの人が気づき出した今、子供、若者からシニアの方まで、みんなで創る好機到来!


鎌倉の年齢別人口 - Kamakura Open Data App

鎌倉市オープンデータの年齢別人口を使って、ルワンダとの比較。
鎌倉市で一番多い年齢は、45歳!ルワンダは0-4歳。


ルワンダの年齢別人口 - Rwanda Open Data App

日本に見る、世界の未来。

links
- カマコン(鎌倉)の皆さんと鯖江のものづくりツアー|きらきら星のつぶやき☆
- 「鎌倉資本主義」について まとめた際のメモを公開します。 | 面白法人カヤック
- 未来を選ぼう!市民が主役、未来創造シンポジウム in 鎌倉 x 鯖江
- 鎌倉市オープンデータポータル

福井高専 電子情報工学科1年生&Hana道場シニア、IchigoJamでプログラミングはじめのいっぽと新作ゲーム!

2017/12/01 23:55:00
#IchigoJam #KidsIT #senior 

後輩、福井高専電子情報工学科の42名の1年生全員、高専入学後初めてのプログラミング授業として、IchigoJamのはんだづけ&プログラミングを2コマ連続で体験してもらいました。

さすが高専生、はんだづけはお手の物!成功一番乗りは30分!
ただ、10人分ほど斎藤先生による修復作業があったとのこと。失敗は最大の学習。よい経験です!


完成した人から配布したプリント、はじめのいっぽ&ミニゲームズでどんどん試してもらいます。


2コマ目にちょっと食い込み、全員完成。入門スライドに添って、ゲームづくりを通じたアプリ開発体験。


この日は雨、鯖江駅から高専へのバスは大盛況。なんと30名乗車が0名になった瞬間をIchigoJam+sakura.io+乗降数記録パネルが押さえていました。
鯖江で実稼働している公共交通IoT クラウドEXPOにてスペシャルセッション at さくらインターネットブース / PubTra-IoT Special Session in Cloud Expo 2017


IchigoJamプリントへ、アクションゲームの新作追加!


ジャンプゲームIchigoJamプリント (PDF)
マリオみたいなゲームつくって!という子供から頻出するリクエストに応えられます。


電子情報工学科の先生、良い機会とサポート、ありがとうございした!


この日は、Hana道場でもシニア向けプログラミング教室!
プログラミング上達の近道は、自分でつくりたいものをつくって、シェアすること。
Twitter、Facebook、Hana道場、いつでも、どんなものでも大歓迎!

栃木県発のIchigoJam互換機「SkyBerryJAM」を使って、高校生が小学生へとプログラミングを伝えている様子が、NHKにて紹介されました。

【金セレ】高校生が教える “プログラミング” | おはよう日本 関東甲信越 | 2017年12月1日放送
コンピューターとプログラミングの楽しさ、どんどん広めていきましょう!
福井高専オリジナルのIchigoJamもぜひ挑戦を!

links
- IchigoJam作成とプログラミング体験 – 電子情報工学科
- IchigoJam Advent Calendar 2017 - Qiita

何曜日生まれですか? BASICで計算するツェラーの公式、IchigoJamプリント

2017/11/30 23:55:00
#IchigoJam #KidsIT 

鯖江発の産業をいかに世界へと広がるか?鯖江商工会議所、国際化委員会、懇親会ではBASICが話題!
生まれた曜日を計算するプログラムを作ったと、シャルマン 社長 宮地さんと、加藤吉平商店 当主 加藤さん!
何十年経っても色褪せない、プログラミング体験のインパクトがすごい!この体験を現代の子供達にも!

10 LET[0],"SUN","MON","TUE","WED","THU","FRI","SAT" 20 INPUT"Y?",Y 30 INPUT"M?",M 40 INPUT"D?",D 50 IF M<3 M=M+12:Y=Y-1 60 H=(Y+Y/4-Y/100+Y/400+(13*M+8)/5+D)%7 70 ?STR$([H])

こちらが、曜日を計算する「ツェラーの公式
閏年を含めて、きちんとこれで求まってしまうことがおもしろい!

IchigoJamプリント化したものはこちら。

なんようびうまれ?」(PDF)


Think globally, act locally! 攻める、鯖江商工会議所

ロボット芸人もIoT化!? 自分でつくる未来のIoT、Internet Week 2017

2017/11/29 23:55:00
#IoT #IchigoJam #web 

インターネットのこれから考えるInternet Week 2017」で登壇、担当テーマはIoT。

まずは、さくらインターネット、IoT事業推進室の山口さんからIoT頭出し!


大事をとって自宅から遠隔登壇のさくらインターネット、技術のトップ、江草さん!
特に不自由感じることなくパネルディスカッションできちゃう、インターネット時代。


INTERNET WEEK IoT と光る、電飾ボックスをデモとして置いての登壇。
たった75円で買えるシングルチップマイコンLPC810、利用用途様々なIoT、その利用に応じて適切なハコを用意してあげましょう。

IchigoJamでの、プログラムはこの通り。8x8で作っているアルファベットのドットパターンは、幅5ドット、高さ7ドットで収まるように作っていることを利用し、2行間引いた5x5表示をやってみたところ、視認性良好でした!
*OUT1に、5x5マトリクス状にしたWS2812Bを接続、ボタンを押すと輝度変更

1 'INTERNET WEEK IoT 10 POKE#700,102,32,240,181,114,182,8,36,36,2,9,25,11,76,128,37,11,120,255,34,34,96,3,39,10,38,43,66,1,208,10,39,3,38,1,63,253,209,0,34 20 POKE#728,34,96,1,62,253,209,109,8,239,209,2,49,1,56,234,209,98,182,240,189,4,0,1,80 90 V=10 100 S="INTERNET WEEK IoT " 110 FORK=0TOLEN(S)-1:C=ASC(S+K):GSB300:WAIT30:NEXT 120 GOTO 100 300 IF BTN() V=(V+40)%240 305 R=RND(V):G=RND(V):B=RND(V):IF R+G+B<V CONT 310 FORI=0TO4:N=PEEK(C*8+I+(I>0)+(I>3)):FORJ=0TO4 320 IF N&(64>>J) LET[I*15+J*3],R,G,B ELSE LET[I*15+J*3],0,0,0 350 NEXT:NEXT 360 U=USR(#700,0) 370 RTN

sakura.ioをつかって、スマホからの表示文字を更新できるようにするコードはこの通り。簡単ですね!(WAKE_OUTをIN1に接続、参考、myThings x sakura.io x IchigoJam で小学生でも簡単サーバー不要のIoTデバイスづくり、sakura.ioハンズオン(データ受信編)

100 IF IN(1)=0 CONT 110 POKE#800,#30,0,#30 120 U=I2CR(79,#800,3,#820,22) 130 C=[18]+ASC("A"):GSB300 140 GOTO 100

IoTを事業化するには、いかに安くできるか勝負!

まずはあらゆる業界・社会におけるちょっとした不便を、実際作って試してみること(イノシシオリ、バス乗客数把握、図書館空席、ネコトイレなど)。 そして、ちょっと便利を実現するために、必要最小限のコンピューターにしぼり、汎用品を使って小さく、低電力で量産メリットを出すこと。

とりあえず作って見るには、Macやスマホやラズパイを使うのもいいですが、シングルチップマイコン開発も意外と簡単で、楽しいですよ!特にIchigoJam、子供でも作れて、気に入ったらそのまま使い続けても安いので安心。 親子で挑戦もオススメです!(参考、こどもIoTハッカソンPCNこどもプロコン


パネル終盤、残り時間の提示と見せかけて「ここでボケて!」
さすがインフラを管理する技術の方が多い、インターネットウィーク、セキュリティに関するカチッとした質問がありました。 IoTがボットネット化、野生化・凶暴化してしまわない配慮は大事ですね!


PCNで会えた!ロボットを相方にお笑いする、髙橋ちゃん
paprikaをIchigoJamでプログラミングに挑戦し、思い通りの動きがプログラミングできてご満悦!


今回電飾に使ったWS2812B、PCN Assemblage 秋葉原には、斬新な独自円形スタイル!


こちらも斬新、ループ状にしてアイロンビーズと組み合わせた、七色電飾!(参考、色相環づくり


新宿駅のイルミネーション。
IoT化して、そこにいる人がスマホで自在に遊べる電飾とか、自分で作れちゃいそうな気がしてきますね!
鯖江駅前、飾っちゃいましょうか!?


すごい電飾例。

マシン語で作る!75円のかわいいARMマイコン、LPC810用エルチカプログラム

2017/11/28 23:55:00
#lpc810 #maker #asm 

小さくても立派な32bit ARM Cortex-M0+のCPU、NXP社製、LPC810、75円 @marutsu
最大動作周波数30MHz、秒間3000万回計算してくれます!

本ブログでも、暗闇で自転車を探すフラッシュライトにしてみたり、おもちゃに音を組み込んだりクリスマス手作りプレゼントや、PCGサウンドライブラリSoundCortexをつかってIchigoJamから三和音鳴らしたりと、活躍。

このかわいいマイコンLPC810をIchigoJamでクロスプロットフォーム開発できる環境を目指し、BASIC風表記なアセンブリ言語 asm15 で、まずは基本にして、コンピューター制御の本質、LEDをチカチカさせる「エルチカ」プログラムをつくってみます。

エルチカは、2ステップあります。まずは、LEDを光らせること。そして、思い通りの時間待たせること。

LPC810のピンをこのように並びで使います。

RESETLPC810RXD
TXDGND
PIO0_33.3V
PIO0_2ISP

LPC1114と同様、電源を入れた時や、RESETがGNDから復帰した際、ISPがGNDになっていると書き込みモードになり、RXD/TXDをつかって、USBシリアルとソフト(FlashMagicやlpc21ispなど)で書き込みます。


ちょっと横着して、PIO0_2にLEDの長い方、PIO0_3に短い方を差し込んでテストします。

DATA L #10000400 ' stack top DATA L #21 ' entry point DATA L 0,0,0,0,0 DATA L #EFFFFBDF ' VALID_CODE = 0x100000000-0x10000400-0x21 @ENTRY R0=[@SYSAHBCLKCTRL]L R1=#DF 'SWT, GPIO, I2C:off, FLASH, FLASHREG, RAM, ROM, SYS [R0]L=R1 R0=[@PINENABLE0]L R1=[@PINENABLE0_DATA]L [R0]L=R1 R0=[@GPIO_DIR0]L R1=`1100 ' PIO0_2 and PIO0_3 [R0]L=R1 R0=[@GPIO_B0]L R1=1 [R0+2]=R1 GOTO 0 @SYSAHBCLKCTRL DATA L #40048080 @PINENABLE0 DATA L #4000C1C0 @PINENABLE0_DATA DATA L #FFFFFFBF @GPIO_DIR0 DATA L #A0002000 @GPIO_B0 DATA L #A0000000

LPC1114はCortex-M0、LPC810はCortex-M0+とマシン語はほぼ一緒ですが、IOの扱い方が違います。
1. LPC810のRAMは#10000000からの1KBなので、スタック初期値を#10000400に設定
2. 書き込みチェック用コードの次、#21にプログラム本体をおく
3. SYSAHBCLKCTRLで、GPIO、SWT(スイッチマトリクス、IOを切り替えるモノ)を設定
4. PINENABLE0で、PIO0_2/PIO0_3をGPIOとして使うよう設定
5. GPIO_DIR0で、PIO0_2/PIO0_3を出力に切り替え
6. GPIO_B0で、PIO0_2に1を書き込むと光る!
7. そのまま実行を続けてしまわなないように GOTO 0 で停止させておく

asm15で、Start Addressを0に設定、「hex file」出力を選択し、USBシリアルで書き込みます。
*3はスキップしても大丈夫でしたが、念のため。(参考、LPC1114の場合

次に、IchigoJam BASICでいう、WAITコマンドを実現して、0.5秒ごとについたり消えたりさせます。

DATA L #10000400 ' stack DATA L #21 ' entry point DATA L 0,0,0,0,0 DATA L #EFFFFBDF ' VALID_CODE = 0x100000000-0x10000400-0x21 @ENTRY R0=[@SYSAHBCLKCTRL]L R1=#DF 'SWT, GPIO, I2C:off, FLASH, FLASHREG, RAM, ROM, SYS [R0]L=R1 R0=[@FLASHCFG]L R1=[R0]L R2=3 ' set 0b00 == no wait R2=~R2 R1&=R2 [R0]L=R1 R0=[@PINENABLE0]L R1=[@PINENABLE0_DATA]L [R0]L=R1 R0=[@GPIO_DIR0]L R1=`1100 ' PIO0_2 and PIO0_3 [R0]L=R1 R0=[@GPIO_NOT0]L R1=`100 ' PIO0_2 R2=[@WAIT_N]L @LOOP [R0]=R1 ' 1cycle single cycle I/O R3=R2 ' 1cycle R3-=1 ' 1cycle IF !0 GOTO -1 'wait R3*3+2 cycles GOTO @LOOP ' 2cycles @SYSAHBCLKCTRL DATA L #40048080 @FLASHCFG DATA L #40040010 @PINENABLE0 DATA L #4000C1C0 @PINENABLE0_DATA DATA L #FFFFFFBF @GPIO_DIR0 DATA L #A0002000 @GPIO_NOT0 DATA L #A0002300 @WAIT_N DATA L 2000000

Cortex-M0+は、Cortex-M0と比較しGPIOアクセスや、GOTOのサイクルが短くなっています。(2→1、3→2、詳細はマニュアル参照

起動時の動作クロックは、内蔵オシレーターの12MHz。ウェイト用の1ループにかかる時間は3cycles。よって、12M/3で400万回ループで1秒。0.5秒のウェイトのために、WAIT_Nに200万を設定すればOK!

GPIO_NOT0という指定したビットに対応するIOを反転させるという便利な機能をつかって、エルチカループ(LOOP)をつくります。

注意点は、FLASHCFGの設定でウェイトを外しておくこと。 初期状態ではFlash ROMへのアクセスにウェイトがついているため、思ったより遅い点滅に悩みました。


2.54mmピッチではんだづけ工作にも優しい、8ピンDIPパッケージ(Dual inline package)のLPC810は、マシン語でさくっと遊べちゃうところもかわいい!

ARMマシン語に興味もった方、「はじめてのマシン語 - IchigoJamではじめるARMマシン語」をどうぞ!

links
- [PDF]UM10601 LPC81x User manual - NXP Semiconductors
- LPCマイコン情報:LPC800 Cortex-M0+搭載-スイッチ・マトリックス,LPC824,LPC822,LPC810,LPC811,LPC812,LPC810M021FN8,LPC824M201,LPC822M101,LPC811M001,LPC812M101

容量削減かつ高速化、ひさびさのベンチマーク、IchigoJam 1.2 beta 55

2017/11/27 23:55:00
#IchigoJam 

2015年にIchigoJamとMZ-2000を比較したベンチマーク
1チップパソコンIchigoJamはどのくらい速いのか?ベンチマーク結果

10 CLT 20 A=0 30 I=1 40 A=A+1 50 I=I+1 60 IF I<=10000 GOTO 40 70 PRINT A 80 PRINT TICK()/60;"sec"

1万回の単純加算ループ、ver 0.9.3では164秒かかっていたものが、ver 1.2.3 では43秒と4倍速!
ただ、現在調整中のベータ版、beta 54で計測したところ、63秒と遅くなっていました。

思いついた容量削減法と合わせて、ボトルネックになる部分の最適化を図り、37秒まで高速化。
1982年製のSHARPのパソコンMZ-2000の記録、26秒にだいぶ近づきました。
VIDEO0コマンドで画面を消して実行すると、20秒!


ちょっと容量の余裕ができたので、もう少し微調整してみます。

IchigoJam-FAN / ファイル」からファームウェアのベータ版、ダウンロード可能です。
ご意見、ご要望、お待ちしています!

Tweet
クリエイティブ・コモンズ・ライセンス
この作品は「Creative Commons — CC BY 4.0」の下に提供されています。
CC BY 福野泰介 - Taisuke Fukuno / @taisukef / high-res profile image