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

What's IchigoJam? Thanks for coming to PCN booth at Maker Faire Bay Area

2017/05/20 23:55:00
#makerfairebayarea #IchigoJam #KidsIT 

Programming Club Network (PCN) our mission is programming for every kids in the world.

What's this?
IchigoJam is $15 computer to learn programming for kids. It's inexpensive, very simple architecture, circuit as simple as kids can build on the breadboard.

Like Raspberry Pi?
Yes but simpler. You don't need to install OS. It boots a second and any time you can shutdown.

Like Arduino?
Yes but you don't need another PC. IchigoJam is self development PC. You have to prepare a TV, a keyboard(PS/2) and a micro USB.

Like Comodore 64 / Apple-II?
Yes! You and your kids can enjoy computing! And you can control Inputs and Outputs very easilly!

LED 1 OK LED 0 OK 10 LED1:WAIT30 20 LED0:WAIT30 30 GOTO10 RUN

Why IchigoJam?
Ichigo means strawberry in Japanese. Also "Ichi" is "One", "Go" is "Five" in Japanese. So $15 computer like Raspberry Pi.

What's CPU?
32bit ARM Cortex-M0 "LPC1114" by NXP. 4K RAM and 32K Flash ROM. The size of OS is just 24KB. You can save 1KB 4 programs in BASIC on it's CPU.

Where can I buy?
At PCN online shop. "PRODUCTS | PCN Programming club network"


Thank you for visiting PCN booth!







This demo program in BASIC makes big fun to kids!


Welcome to PCN booth! (Zone #2 at #makerfairebayarea )

IchigoJam Zero the World's Lightest PC 0g 150yen for IchigoJam Things!

2017/04/01 00:00:00
#IchigoJam #IoT #maker #english 

重さ0g、150円の世界最軽量、最安値のパソコン「IchigoJam Zero」と「IchigoJam Things」をリリース!
I released the world's lightest 0g/150yen PC "IchigoJam Zero" and "IchigoJam Things"!

Finger Size! 指の上サイズ! (photo human ver.)


Weight: 0g (IchigoJam Zero) / 9g (Raspberry Pi Zero)


IchigoJam ZeroRaspberry Pi Zero
CPUNXP LPC1114 @ 48MHzARM1176JZF-S @ 1GHz
RAM4KB512MB
UART115,200bps (default)115,200bps (default)
I2Cx1x2
GPIOx11x22
Video outputNTSC composit
(needs 2 registers 470/100)
HDMI / NTSC composit
(needs 2 wires)
KeyboardPS/2 keyboard
(needs 2 wires)
USB keyboard
Storageinternal Flashneeds a SD card
OSIchigoJam BASIC
IchigoLatte JavaScript
(needs download & install)
Raspbian etc...
(needs download & install)
Price$1.5$5
Weight0g9g
Size11.8mm x 7.2mm67.6mm × 30mm
Power Consumption0.05W0.5W-0.7W


IchigoJam Things is a break out board for IchigoJam Zero!


Now available on Upverter! "IchigoJam Things / RPi by taisukef f9de7f39761699b0 - Upverter"
IchigoJam Zero を使うブレイクアウトボード「IchigoJam Things」のガーバーデータがダウンロード可能です!


IchigoJam Zero on IchigoDake & IchigoIgai by PCN


IchigoDake makes IchigoJam everywhere!


Enjoy making everythings! ものづくりをたのしもう!

links
- 「若年層に対するプログラミング教育の普及推進」事業にIchigoJam採用!
- 2017.4.1 IchigoDake / IchigoIgai | PCN プログラミング クラブ ネットワーク
- 2016.4.1 MSXになりたい「こどもパソコンIchigoJam」あの起動ロゴを搭載!(boot logo)
- 2015.4.1 創る人を創ろう! Pepper より安価な こどもロボットPaprika 発表!(Kids Robot paprika)
- 2014.4.1 目指すはMSX! Raspberry Pi より安価な IchigoJam 発表!(Kids PC IchigoJam)
- 2013.4.1 jig megane-0 かけられる大容量バッテリー(glasses)

電池ケースと組み込み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マシン語表(メモリアクセス)

※[]の後のWだと2byte単位、Lだと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]W '変数Aの16bitの数をR2へ入れる R3=[R0+2]W '変数Bの16bitの数をR3へ入れる R2=R2+R3 [R0+4]W=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) 355

全部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. カジュアルに使うインラインマシン語

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