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

電池ケースと組み込みIchigoJamでつくるイチゴトーン、こどもプロコン2016の冬!

2016/12/25 23:55:00
#IchigoJam #music #maker 

レッツ組み込み開発!
IchigoJamでつくった1ボタン楽器、イチゴトーンを、電池ケースに組み込んでおもちゃにしてみます。


材料は、単3x4本のスイッチ付き電池ケース、IchigoJamのCPU「LPC1114FN28」、ボタン(タクトスイッチ)、スピーカー、抵抗と線材少々。


BTN端子をVCCにつなぐ1MΩの抵抗(プルアップ抵抗)と、左右のVCCをつないでおきます。クリスタルは無くても平気。 プログラムを後で書き換えるなら、ピンソケットなどを付けておくと便利です。


電池ケースの半分のスペースを使います。ハンドドリルでボタンとスピーカー用の穴を開けて、中でCPUや電源を配線。


なかなかすっきりした見た目。おもちゃとしてはちょっと飾りっ気がないかも。


大きめボタンは子供にもわかりやすい!

CPUをLPC1114FDH28を使ったり、電源にボタン電池を使うともっと小さくできます。
逆に、大きなおもちゃなら、電源をコンセントから取ってIchigoJamをそのまま使って、ジャンパー線で配線すれば、はんだづけなしの簡単な工作でつくれるので、子供でも簡単にチャレンジできます!

こちら、こどもプロコン2016夏の受賞作品、じゃんけんゲームマシンIchigoJam Advent Calendar 2016より)

PCNこどもプロコン2016夏より)

欲しいおもちゃは作っちゃおう!
楽しいものができたら「PCNこどもプロコン2016冬」へ送ってくださいー

IchigoJam event in Silicon Valley! After 40 years from Apple-I

2016/10/30 23:55:00
#IchigoJam #KidsIT #english 

40 years ago, the world first personal computer Apple-I borned in Silicon Valley.
Apple-I starts computers for everyone including kids!
When I'm 8 years, I met dreamy machine, MSX a descendant of that.

I invented the $15 simplest personal computer "IchigoJam" for all kids.
Ichigo is a strawberry and 15(Ichi Go) in Japanese.

3 Nov, we are holding a BASIC programming workshop for kids using IchigoJam:
First BASIC Programming on IchigoJam for Kids - PCN Silicon Valley | Meetup


Let's start programming at a young age!
There are many computers in our lives.
If you can program, you get a great power!


These IchigoJam works are made by kids
(from PCN Kids Programming Contest 2016 Summer)


IchigoJam is the simplest computer such as Apple-I.
It has RAM4KB, ROM32KB, BASIC interpreter, Video output, Keyboard input.


IchigoJam can build your self about less than 1 hour by the first solder.
"Let's Start Programming! How to build an IchigoJam, your first computer"

After building, let's start programming in BASIC

IchigoJam BASIC ver 1.2.1 by jig.jp OK LED1 OK LED0 OK LED1:WAIT30:LED0 OK

"Let's make Game! My first programming by IchigoJam"

This is the first ever event in the Silicon Valley being held by the PCN<Programming Club Network> 3 members from Fukui, Japan. Also, one of the organizers is a UC Berkeley Computer Science graduate working in Palo Alto.

Apple I - IchigoJam

Apple IIchigoJam
CPUMOS 6502 @ 1MHzNXP LPC1114 @ 48MHz
RAM4KB4KB
Programming LanguageBASICBASIC
Graphics40x24 Text32x24 Text
Video outputNTSC compositNTSC composit
Keyboardexternal keyboardPS/2 keyboard
Storageexternal casette tapeFlash x 4 / external EEPROM
Price$666.66$15 (¥1,500)
Birth1976.4.112014.4.1
Apple I - Wikipedia


("Framed Apple I Computer Aluminium schematic" of Apple-I" signed by Woz and me)

Event Details
Date/Time: 3 Nov (Thursday) 7pm-9pm
Location: 2900 Lakeside Drive, Suite 270, Santa Clara, CA
Participants: any kids between 6-15 are welcome! Parents can watch or wait in the lobby.

What to bring? Nothing needed!
Please gather in the lobby by 7pm.

First BASIC Programming on IchigoJam for Kids - PCN Silicon Valley | Meetup

Connect kids all over the world! Kobe x Africa x Fukui / schematic of IchigoJam

2016/10/17 23:55:00
#IchigoJam #opendata #kobe #fukui #africa #english 

I got great meetings at "Business Seminar in Africa #2" in Kobe.
Thanks a lot to foreign students from Africa!

jig.jp business: development and providing the software service mainly for mobile
product: IchigoJam, the inexpensive personal computer to learn programming for kids and everyone!
comment to students: Let's discuss to create young creators!


photo) Koko, Didier, Hisamoto-san, me
Weth Kobe city mayer, Mr. Kizo Hisamoto, I had discussion at Kobe IT Festival 2014 about "opendata".
Kobe city is very closed to Africa, Rwanda. [link]
I met Koko at Sabae, and his friends Didier from Côte d'Ivoire! [link]


"African dreams come Kansai!"


communication time with foreign students


I talked over 20 students deeply. I'm glad to enjoy computing with IchigoJam!
IchigoJam is very easy to understand how computer works with BASIC programming.

LED1 OK LED0 OK WAIT120 OK LED1:WAIT60:LED0 OK 10 LED1:WAIT30 20 LED0:WAIT30 30 GOTO10 RUN

*"OK" is reply message from IchigoJam [link: How to create a game]
Let's control $1 32bit ARM CPU LPC1114, can calculate 50 million times a second!

Also IchigoJam's electronic circuit is very simple! [link: How to build an IchigoJam]

schematic of IchigoJam on "Upverter" online PCB CAD service

IchigoJam' spec is similar with Apple I born in 1976.
They have a 32x24 monochrome text TV screen, a keyboard and with BASIC!

"Framed Apple I Computer Aluminum Schematic" with Woz sign!!


photo) me, Muḥammad from Mauritania, Hara ict4 and PCN member at Fukui
I met Muhammad at Sabae too!
Hara go Tanzania Africa, almost every year!

Web and computer broke any borders.
If kids all over the world get own connected computer, they can create anything.
I want to guide them to the entrance with IchigoJam.

楽しく制するマシン語、ARMマシン語学習用VM on JavaScript

2016/09/27 23:55:00
#js #ARM #avm 

イマドキのBASICとしてIchigoJamが紹介サれている今月の「日経ソフトウェア」で見かけたマシン語の話題。 ドラゴンクエストのゲームデザイナー、堀井雄二氏はNEC PC-6001のBASICでプログラムを始め、速度を求めてZ80マシン語へ。ハンドアセンブルでマシン語プログラムを作ったそう。 「矢沢久雄のソフトウェアの基礎Q&A」では、基本情報技術者試験で使われる仮想マシン語CASLIIのススメ。 Z80ハンドアセンブルした小学生時代、CASLIIがJavaVMと似てると思った高専生時代が懐かしい。

私の一押しは、32bit CPU、ARM Cortex-M0のマシン語。IchigoJamで使っているLPC1114で使え、コンパクトで強力かつ、iPhoneなどスマホでも動きます。 (でも、本気で動かすなら64bit対応のARM64マシン語!)


連載、ARMマシン語入門と合わせて使えるシミュレーター「avm」をつくってみました。フラグなどがいい加減で、まだ表示がないので、連載その2までの対応です。

サンプルのマシン語プログラムは、10から1までをループしながら足し算するプログラム。たかだか100円ちょっとのCPUですが、54サイクル、1.12μ秒(約100万分の1秒)で計算するパワーをフルに使い切る感こそ、マシン語の醍醐味!

JavaScriptでつくったシンプルなバーチャルマシン(VM)「avm」、どうぞいろいろ改造してお使いください!
IchigoJamで学ぶARMマシン語入門」と合わせてどうぞ!

福井産極小OS「IchigoLatte」フリーエリアにEEPROM実装

2016/09/11 23:55:00
#KidsIT #IchigoLatte #lpc1114 

松田さん(PCN代表)開発、RAM4KBのコンピューター、LPC1114で動く極小JavaScriptエンジン搭載OS「IchigoLatte」が、いよいよ製品版に向けたベータ版完成とのこと。 IchigoJam Tと同様、小さなコンピューターFDH28に替わって空いたスペースに搭載された、ユニバーサル基板パターン「Latteキャンバス」が特徴!


IchigoJam同様、1MbitのEEPROMを外部保存として使えるので、くっつけてみます。


接続回路を元に、どうつなげて、はんだづけするかあれこれ考えるパズルっぽさが楽しい。


I2C用のプルアップは2.4kΩ、SCL、SDAのピン配置からこのようなつくりにしてみました。ちょっと面倒な被覆ジャンパーは1本に抑えられました。


無事、起動!コンソールの ls コマンドで一覧が取得できます。


サンプルで動かしたのは古籏一浩さんの「IchigoLatteを楽しもう」より「ラスタースクロールもどき」改(sin32→sin8)


emerge+さんの「アクリルケース for IchigoJam T」にも似合います(ボタン用パーツはつけていません)


アクリルケースの保護シートは、しばらく水につけておくとするするとはがれます!


コンピューターを操るための言葉、プログラミング言語は、時々刻々と進化します。 IchigoJamで入門言語BASICを学んだあとは、ちょっと大人なOS「IchigoLatte」でJavaScript入門もオススメです!
(回路とコンピューターは共通なので、OSを入れ替えればIchigoJam←→IchigoLatte、両方使えます)

BASICにJavaScriptに使いこなせるようなところを見せつけて、本格的なパソコンをゲットしよう!

Lenovo Japan留目社長Hana道場で未来談義。9/12はいよいよ「鯖江市地域活性化プランコンテスト」公開プレゼンテーション。 留目さんとは審査員でもご一緒します!ITのまち鯖江、次の一歩につながるプランは登場なるか!?(photo by Miki Takebe

会場は鯖江市誠照寺USTアリ、13時からスタート

参考リンク
- JavaScriptで電子工作!フリーな工作エリア「Latteキャンバス」を設けた製品版IchigoL... - about yrm
- IchigoLatte

掛け算もインクリメントも1クロック、BASICでカジュアルに使うインラインマシン語とツール紹介 - IchigoJamではじめるARMマシン語その7

2016/08/16 23:55:00
#IchigoJam #ARM 

じっくり取り組むマシン語も楽しいですが、手軽で便利なマシン語ならではの技を紹介します。

CPUには足し算、引き算、メモリアクセスなど基本的な機能の他に、CPUによってそれぞれ固有な機能があります。現代のパソコンやスマホに使われる高性能なCPUには、3Dグラフィックスや、音声、映像などの処理の高速化のために、4つの計算を同時に行うなどのSIMD命令が含まれます。ほとんどのスマホで使われているARMアーキテクチャー、Cortex-AにはNEONというSIMD機能が搭載されています。

電源が限られるモバイルにおいて、いかに無駄な電力消費を抑えつつ、サクサク軽快なアプリを提供するかが重要です。C、JavaScript、Swiftでは、CPU固有の機能を表現する方法がないので、マシン語を使って、コンピューターの性能をフルに引き出しましょう。誰かがつくった機能(ライブラリ)を使わせてもらうのもいいですが、自分でも作ってみたくもなるでしょう。(参考「iPhoneでのピクセル処理をNEON(ベクタ演算)を使って4倍高速化する」)

IchigoJamが使っている低電力CPU、LPC1114は、ARM Cortex-M0という、Cortex-Aと命令に互換性があるサブセット(一部)です。SIMD命令はありませんが、BASICやCでは扱えない特別な演算があるので、今回はそれらをカジュアルに使います。

Cortex-M0 マシン語表(抜粋)」に、特殊演算を追記しました。

※bic:ビットクリア、asr:符号付き右シフト、ror:右ローテート
※rev:byteオーダー反転、rev16:byteオーダー反転(2byteずつ)、revSH:符号付き16bitを反転32bit化
※abc:キャリー付き足し算、sbc:キャリー付き引き算

IchigoJam BASICには当てはまる演算子がないために、関数のような書き方にしていますが、これらの計算はすべて、通常の計算と同様、1サイクルで処理できます。IchigoJamの場合、48MHzで動作させているので1サイクルは約20ナノ秒で計算は終了します(iPhone6sは最大1.84GHzなので約40倍高速な0.1nsec)。

bic:指定したビット位置のみをクリアする。普通に書くと Rd = Rd & ~Rm と、2回の演算が必要。
ror:指定した数だけ右にビットシフトして、はみ出た分は上位ビットにセットする。
rev16:16bitの上位8bitと下位8bitを入れ替える(上位32bitも同様に)

I2Cで外部センサーから取得したビッグエンディアン(=最初に上位8bitがある)なデータの読み取りに便利そうな rev16 を実際使ってみます。

[0]=`1011101001 000 000 'R0=rev16(R0) [1]=#4770 ?USR(#800,1) 256 ?HEX$(USR(#800,#3412)) 1234

#4770は呼び出し元に戻るRETURNのマシン語です。(Z80でいう#C9)
同じコードをIchigoJam BASICで書くと、下記のように少し長くなるので、繰り返し使う場合に有利です。

N=#3412 ?N<<8&#FF00+N>>8

マシン語をいれておくメモリとして、PCG領域を借りて、下記のように書くこともできます。このように、別のプログラムでいろいろな便利な関数を用意しておき、メインのプログラムを呼び出すとメモリを有効に使えます。

10 POKE#700,#40,#BA,#70,#47:P=#700 20 ?HEX$(USR(P,#CDAB));HEX$(USR(P,#3412))

Cortex-M0 マシン語表(抜粋)」にサイクル数を追加しました。ほとんどの命令が1サイクルで終了することが分かります(LPC1114は掛け算も1クロック)。実行時間が正確に計算できるのもマシン語のいいところです!

ハンドアセンブルでコツをつかんだら、アドレス計算も自動でやってくれるARMアセンブラ搭載、Mac/Windows/Linux対応IchigoJam用ツール「IJUtilities」が便利です。C言語からIchigoJam BASIC用のコードを生成する「rohiniku/IchigoJam_bin2poke」の逆アセンブル機能を使った解析も勉強に便利!

ARMマシン語は、スマホでもそのまま活かせる究極の高速化テクニック。自分の書いたコードが実際どういうマシン語になるかだいたい想像できる程度には押さえておきましょう。

C言語やJavaScriptでお馴染みの「i++」という iに1足す演算子が、Swift3ではなくなってしまいます。MSXでZ80マシン語で1足す命令(INC)や1引く命令(DEC)を知っていたため、ごく自然に受け入れて今でもよく使っているだけにさみしいものがあります。Z80では1足す専用の命令、INCを使えば足し算命令ADDよりサイズが節約できました(機械語の手帳 ステート数表)。ただ、近年使われるよくARMは、1足すのも2足すのも255足すのも、速度もサイズも一緒。演算子削減の一因かもしれません。

ゲーム、スマホ、ロボット、クラウド、IoT、AIなど、奥深いプログラミングの世界も第一歩から!
福井新聞主催、PCN共催「福井県小中学生プログラミング・フェス2016」参加者募集中!

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

オセロ盤で学ぶ2進数アンプラグドワークショップ & あるくクマムシさんプログラム

2016/08/12 23:55:00
#KidsIT #IchigoJam 

コンピューターの得意技、計算と記憶。今回は「記憶」に迫ります。

オセロ盤を使った2進数アンプラグドワークショップ

記憶をどんどんシンプルにしていくと、雨かそうでないか、やったかやらなかったか、あるかないか、○か☓かなど「2つの内どちらか」という情報に行きつきます。この最小情報を表すデータ量を1bit(ビット)と呼びます。


おなじみのオセロのコマ、白を1、黒0というbitとして使ってみましょう。8x8のオセロ盤は64bitのメモリ(=記憶装置)。8bitのことを1byte(バイト)と言い換えることができるので、8byteのメモリでもあります。8Kbyte(キロバイト)の1024分の1、8Mbyte(メガバイト)の約100万分の1、8Gbyte(ギガバイト)の約10億分の1の容量ですね。

IchigoJamのCPU、LPC1114FN28/FDH28には、自由にすばやく書き換えできるRAM(ラム)と呼ばれるメモリが4KB、オセロ盤にして512コ分あります。このメモリ内に画面の状態や、文字のパターン、プログラム、計算途中の数などを記憶させ、コンピューターにどんどん書き換えさせることで、IchigoJamは動いています。

オセロ盤を使って、数を記憶させてみましょう。1とか2とか、ドットパターンで絵を描くのもあり!
でも、ひっくりかえすのが面倒なのと、桁数が増えてくると読み取りにくくなっていきますね。

ひっくり返したコマの個数で記憶するのもナイスアイデアです。
ずっと間違えにくくなりますし、0から64まで明確に表せます。
でも、もっと大きな数を記憶させることはできないでしょうか?
最大、いくつまで記憶させられるでしょう?

(時間をかけて、ここでいろいろ悩んでもらうといいです)

ビットの話を思い出してみましょう。
1bitで表せる数は0と1の2種類でした。では、2bit、2つのコマを使って表せる数は?
実は、2までではなく、0〜3の4種類いけます。00,01,10,11の4パターンあります。
では、3bitでは?4bitでは?やってみましょう!

1bit増える毎に表せるパターンは2倍になります。(普通の数値が1桁増える毎に10倍になるように)
2,4,8,16,32...8bitで256種類、16bitで65536種類、32bitで4294967295(約42億)種類...
答、オセロ盤を全部使った64bitでは、約1844京(18446744073709551616)まで記憶できます。

IchigoJamを使った2進数プラグドワークショップ

IchigoJamのメモリをいじって、自分の好きなキャラクターをゲーム画面上に登場させてみましょう!
早速、8x8にコマを敷き詰めたオセロ盤を使って絵を描きます。

bitで表す数のことを2進数と呼びます。IchigoJamやコンピューターでは8bit=1byteを基本の単位として使っています。描いた絵は1byteが8行、上から順にメモリに書き込んでいくとそのパターンをゲーム上で使うことができます。


2進数の読み方は2種類あります。1つ目は普通の数と同じように読む方法、一番右が1の位、ひとつ左が2の位、更に左が4の位で、一番左が128の位なので、その位が1の数を全部足すと読めます。例えば、10101111だと、128+32+8+4+2+1で、175となります。

もう一つの読み方は16進数を使う方法です。慣れてしまえばこっちのほうが簡単です。8bitを4bit2つに分けて読みます。10101111だと、1010と1111、それぞれ、8+2で10と8+4+2+1で15です。次に10から15をAからFに置き換えてつなげます。できた「AF」が16進数で175を表す数です。確かめてみましょう。16進数は1の位から始まって、ひとつ左は16の位。10*16+15で175です。

IchigoJamのメモリは文字のパターンからはじまっています。1文字8byteずつ256種類、2048byteの内、後ろ32コが書き換え可能です。文字コード255のパターンをのぞいてみましょう。

10 FOR I=0 TO 7 20 N=PEEK(255*8+I) 30 ?BIN$(N,8),HEX$(N,2) 40 NEXT 50 ?CHR$(255)

PEEKコマンドでメモリを1byte読みます。文字コード255のパターン8つをとりだし、2進数と16進数に変換して表示すると、イチゴパターンが表れます。

このパターンをオリジナルに書き換えてみます。

POKE255*8,0,#3E,#7F,#FF,#FD,#FF,#AA,0

イチゴに替わって、クマムシさんが登場しました!

パターンは最大32コまでつくれます。もうひとつパターンをつくって、アニメーションさせてみます。

10 POKE255*8,0,#3E,#7F,#FF,#FD,#FF,#AA,0 20 POKE254*8,0,#3E,#7F,#FF,#FD,#FF,#54,0 30 ?CHR$(255,LEFT);:WAIT30 40 ?CHR$(254,LEFT);:WAIT30 50 GOTO 30

ボタンを押したら歩くプログラムにしてゲームっぽくしてみます。

10 POKE255*8,0,#3E,#7F,#FF,#FD,#FF,#AA,0 20 POKE254*8,0,#3E,#7F,#FF,#FD,#FF,#54,0 30 ?CHR$(255,LEFT); 35 IF BTN()=0 GOTO 35 40 ?CHR$(254,LEFT); 45 IF BTN()=1 GOTO 45 46 ?" "; 50 GOTO 30


あるくクマムシさん動画クマムシさん

10秒ぴったりにゴールするゲーム、連打して速さを競うゲーム、障害物をジャンプするゲームとか、自分でつくったパターンでいろいろつくって自慢しよう!

参考教材
- 2しんすうをつくるBIN$(バイナリー) - IchigoJamプリント
- じぶんだけのキャラをつくる / はじめてのプログラミングその19


流れ星が見えた夜でしたが、撮影は失敗(ペルセウス座流星群ピーク

楽しさ広がるマルチバイトメモリアクセスとスタック - IchigoJamではじめるARMマシン語その5

2016/08/11 23:55:00
#IchigoJam #ARM 

IchigoJam BASICで扱える数は、メモリ節約のため16bitの整数(-32768〜32767)としていますが、CPUは32bitのLPC1114。マシン語を使えば、プラスマイナス約21億まで使った高い精度で高速に計算ができます。

その3では1byte単位のメモリアクセスをやりましたが、ARMマシン語には、IchigoJamの変数をマシン語で扱うのに便利な2byte単位や、32bitの大きな数をそのまま読み書きできる4byte単位のメモリアクセスも用意されています。

ARMマシン語表(メモリアクセス)

※[]の後の数が2だと2byte単位、4だと4byte単位で読み書き。u5/2は2で割った数を指定。

これを使って、IchigoJamの変数AとBを足した値をCにいれるマシン語プログラムをつくってみます。 (R1:IchigoJam BASIC上の仮想アドレスを実アドレスに変換するオフセット)

R0=8 R0=R0<<8 R0=R0+204 R0=R1+R0 '仮想メモリ #800+204 の変数Aの実アドレス位置を計算 R2=[R0+0]2 '変数Aの16bitの数をR2へ入れる R3=[R0+2]2 '変数Bの16bitの数をR3へ入れる R2=R2+R3 [R0+4]2=R2 'R2を変数Cへ入れる RET

これを「マシン語表」を見ながらハンドアセンブルして、実行します

[0]=`00100 000 00001000 'R0=8 [1]=`00000 01000 000 000 'R0=R0<<8 [2]=`00110 000<<8 + 204 'R0=R0+204 [3]=`0001100 000 001 000 'R0=R1+R0 '仮想メモリ #800+204 の変数Aの位置 [4]=`10001 00000 000 010 'R2=[R0+0]2 '変数Aの16bitの数をR2へ入れる [5]=`10001 00001 000 011 'R3=[R0+2]2 '変数Bの16bitの数をR3へ入れる [6]=`0001100 011 010 010 'R2=R2+R3 [7]=`10000 00010 000 010 '[R0+4]2=R2 'R2を変数Cへ入れる [8]=#4770 'RET =HEX$(`0100011101110000) A=100 B=555 R=USR(#800,0) ?C 655

うまくいきました!

R0からR3までの4つのレジスタだけではちょっと窮屈ですね。そんなとき便利なのがスタックです。メモリに書類を積むように一端保存しておき、必要になったら上から順番にレジスタに戻します。積むことをPUSH(プッシュ)、戻すことをPOP(ポップ)と呼びます。


ARMマシン語表(スタック操作)

※ひとまず LR、PC には 0 を指定して使ってください

PUSH R4,R5,R6,R7 と、スタックに保存しておけば、R4からR7までを思う存分に使ってもOK。RETする前に、POP R4,R5,R6,R7 としましょう。 (R4〜R7を保存しないといけない理由

[0]=`1011010 0 00010000 'PUSH R4 [1]=`00100 100 11111111 'R4=255 [2]=`0001100 100 000 000 'R0=R0+R4 [3]=`1011110 0 00010000 'POP R4 [4]=#4770 'RET ?USR(#800,100) 200

全部PUSHしておいてもいいですが、1レジスタに付き4byteのメモリと約20ナノ秒(48MHzの1周期)の時間が無駄になるので、必要なだけPUSH/POPするようにしましょう。また、重ねてPUSHすることで、どんどん途中の数を保存しておくこともできます。ただし、PUSHした数とPOPした数が合わないと暴走やフリーズの原因になるので注意しましょう。

やってみよう
1. PUSHしてPOPせずにRETするとどうなるかやってみよう
2. A+B*Cを計算してDにいれるマシン語プログラムをつくってみよう
3. A+B*Cを計算して[0]にいれるマシン語プログラムが2度目には動かない原因を探ってみよう
4. A*Bの数をCとDの2つの変数に結果をいれるプログラムをつくってみよう
5. 変数X,Yの場所に4x4のキャラを表示するプログラムをつくり、BASICと速度を比べてみよう

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

マシン語でLEDを光らせよう! - IchigoJamではじめるARMマシン語その4

2016/08/08 23:55:00
#KidsIT #IchigoJam #ARM 

やりたいことが遅くでできない時、速い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<<8 R3=R3<<8 R3=R3+`00111100 [R3+0]=R0 RET

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

R3=#50 `00100 011 01010000 R3=R3<<8 `00000 01000 011 011 R3=R3+1 `00110 011 00000001 R3=R3<<8 `00000 01000 011 011 R3=R3<<8 `00000 01000 011 011 R3=R3+`00111100 `00110 011 00111100 [R3+0]=R0 `01110 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と出ずにフリーズしてしまったら、それは残念ながらどこか打ち間違えて、暴走してしまったことになります。 あきらめて、本体の電源を切ってやり直しましょう。

(追記)当初、計算にレジスタR4を使っていましたが、ARMのABI(Application Binary Interface = 関数呼び出し規約)にて、破壊して使って良いレジスタはR0-R3までと分かり、R3に変更しました。(日本語解説、32ビットへの誘い

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

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

FaBo発売! 創って話して2度おいしい Maker Faire Tokyo 2016

2016/08/06 23:55:00
#maker #KidsIT #IchigoJam #FaBo 

2度目の参加、Maker Faire Tokyo 2016!

祝、FaBoの販売開始! FaBo Starter kit for IchigoJam のシリアル番号1000001 GET!

IchigoJam に重ねることで、LED、サウンド、スイッチ、温度計、明るさセンサー、三軸加速度計(I2C)、ボリュームをとっても簡単につなげます! (サンプルプログラム FaBo Starter Kit + IchigoJam by @openspc 古籏一浩さん)

佐々木さんとはガラケーアプリからの付き合い!

FaBoブースには、「なぜコンピューターは速いのか」で夢見たおもちゃ、AND、OR、NOTを物理的なモジュールの展示がありました。

PCNブース(A-03-05)に登場、巨大IchigoJam!(制作ナチュラルスタイル)
抵抗やコンデンサなどは取り外せて、組み立ての説明にも使えます!

裏面の配線。ちゃんとそれぞれのパーツに電気通ってます。

LED光ります!ボタン押せます!電源スイッチ効きます!(動画はこちら
4歳児でもできる、コンピューターにコマンド伝える「LED1、エンター」

今日も、たくさんの子供がプログラミングを体験してくれました。
コンピューターへの道へ誘ってくれたファミコン&マリオも展示。
すっごく食いつく子供が、ゲームの楽しさにスペックは関係ないことを証明してくれました。
ゲームが好き→つくってみたい!
このきっかけを逃すのはもったいない!

エデュケーション&キッズゾーンには、楽しそうなワークショップがたくさん!
レジンよりもっと手軽な「おゆまる」を使ったオリジナルLEDづくりワークショップ! by 乙女電芸部さん
電芸っていいですね!

kohacraftさんの大好きなマイコン、LPC1114を使ったマイコンと紙のワークショップが楽しそうでした!

同じくLPC1114FN28で、なんと電子ペーパーを独自に制御!これはやってみたい!

AgICさんの導電性接着剤ノーソルダー、はんだごていらずの接着を実現!IchigoJamの組み立てにも使える!?

ARMさんのブースにはモバイル業界でトップシェアを誇るARMが設計したスマホ以外のコンピューターの応用例展示。IchigoJamも合わせて並べてもらえました!iPhoneもAndroidも、ARMです。(→ARMマシン語入門 on IchigoJam

IchigoJamプレゼンの次は、東京高専学生を含む、国際ロボコン挑戦者による発表「ロボコンを再び国技に!」、熱い!

海を超え、世界を舞台に戦ってきた一輪車のタイヤを使った大きなロボット。こどもロボコンなど、挑戦の場、広げましょう!

懇親会では、楽しいモノ語り!仲間がいるってステキです。

なんと、Arduino創始者の一人、David Cuatiellesさんにも会えました!
IchigoJam meets Arduino

ニットのイチゴ帽子に抵抗でIchigoJamをくっつけ、お花LEDシールドがぐるぐる回るプログラムを作成!
つくったものウェアラブルにするの、オススメです!(動画はこちら

Maker Faire Tokyo 2016は、8/7 17:00まで!
PCNブースは、エデュケーション&キッズゾーン(A-03-05、入り口入って右側)です

Maker Faire Tokyo 2016 | PCN プログラミング クラブ ネットワーク
8/7は「おもしろフェスタ in サンドーム福井2016」にて、イチゴ帽子います!

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