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

画面をイチゴで埋め尽くす12の方法 / IchigoJamではじめるARMマシン語その11

2017/09/24 23:55:00
#IchigoJam #asm 

IchigoJamのキャラクターコード255は、イチゴ。
これで画面を埋め尽くす12の方法、まずはBASICから!


1. 延々イチゴを表示して埋め尽くす(GOTO編)

10 ?CHR$(255);:GOTO10 RUN

2. 延々イチゴを表示して埋め尽くす(CONT編)

1 ?CHR$(255);:CONT

再開するCONTコマンドは、プログラム内に書くとその行を再度実行として機能します

3. FOR/NEXTコマンドで埋め尽くす(768=32*24)

FORI=1TO768:?CHR$(255);:NEXT

4. VIDEO0で一旦画面出力を止めて高速化(画面表示OFFで約3倍速)

VIDEO0:FORI=1TO768:?CHR$(255);:NEXT:VIDEO1

5. LOCATE(短縮計LC)を使って縦に埋める

FORI=0TO31:FORJ=0TO23:LCI,J:?CHR$(255);:NEXT:NEXT

6. VRAMに直接書き込む(HELPコマンドでVRAMのアドレスが確認できます)

FORI=#900TO#BFF:POKEI,255:NEXT

7. COPYコマンドを使って一瞬で埋める

POKE#900,255:COPY#901,#900,768-1

実用的にはこれで十分ですが、マシン語を使って究極を目指してみます

8. マシン語を使って埋める (22byte 5383cycle)

R2=9 R2=R2<<8 R1=R1+R2 R2=32 R3=24 R2*=R3 @LOOP [R1]=R0 R1+=1 R2-=1 IF !0 GOTO @LOOP RET

32*48で768、数値が1byteの上限255を超えるので、掛け算命令で設定。

POKE#700,9,34,18,2,137,24,32,34,24,35,90,67,8,112,1,49,1,58,251,209,112,71 U=USR(#700,255)

ハンドアセンブルか、asm15アセンブラを使ってマシン語を作成しUSRコマンドで実行!
1cycle = 21nsec、割込が無いとすれば、113usec、つまり0.1ミリ秒で処理完了です。

9. マシン語、4byteまとめて埋めて高速化 (32byte 1356cycle)

R2=9 R2=R2<<8 R1=R1+R2 R2=R0 R2=R2<<8 R2=R2+R0 R2=R2<<8 R2=R2+R0 R2=R2<<8 R2=R2+R0 R0=192 @LOOP [R1]L=R2 R1+=4 R0-=1 IF !0 GOTO @LOOP RET

メモリへの書き込みは1byte、2byte、4byteと3種類。まとめて4byte書くように変更することで、プログラムは10byte増えてしまいましたが、約4倍速に!

10. マシン語、まとめて転送命令STMを使って高速化 (42byte 352cycle)

PUSH {LR,R4,R5,R6,R7} R2=9 R2=R2<<8 R1=R1+R2 R2=R0 R2=R2<<8 R2=R2+R0 R2=R2<<8 R2=R2+R0 R2=R2<<8 R2=R2+R0 R3=R2 R4=R2 R5=R2 R6=R2 R7=R2 R0=32 @LOOP STM R1,{R2,R3,R4,R5,R6,R7} R0-=1 IF !0 GOTO @LOOP POP {PC,R4,R5,R6,R7}

ARM Cortex-M0にあるまとめて転送命令STMは、アドレスR1へ複数指定したレジスタの値をアドレスの値を変更しながら高速に転送してくれます(転送時間=転送数+1クロック)。 R2からR7まで6レジスタ、24byteまとめて転送できるので32回ループすれば画面全部を埋められます。

11. マシン語、ループ展開 (92byte 220cycle)

PUSH {LR,R4,R5,R6,R7} R2=9 R2=R2<<8 R1=R1+R2 R2=R0 R2=R2<<8 R2=R2+R0 R2=R2<<8 R2=R2+R0 R2=R2<<8 R2=R2+R0 R3=R2 R4=R2 R5=R2 R6=R2 R7=R2 R0=R2 STM R1,{R0,R2,R3,R4,R5,R6,R7} STM R1,{R0,R2,R3,R4,R5,R6,R7} STM R1,{R0,R2,R3,R4,R5,R6,R7} STM R1,{R0,R2,R3,R4,R5,R6,R7} STM R1,{R0,R2,R3,R4,R5,R6,R7} STM R1,{R0,R2,R3,R4,R5,R6,R7} STM R1,{R0,R2,R3,R4,R5,R6,R7} STM R1,{R0,R2,R3,R4,R5,R6,R7} STM R1,{R0,R2,R3,R4,R5,R6,R7} STM R1,{R0,R2,R3,R4,R5,R6,R7} STM R1,{R0,R2,R3,R4,R5,R6,R7} STM R1,{R0,R2,R3,R4,R5,R6,R7} STM R1,{R0,R2,R3,R4,R5,R6,R7} STM R1,{R0,R2,R3,R4,R5,R6,R7} STM R1,{R0,R2,R3,R4,R5,R6,R7} STM R1,{R0,R2,R3,R4,R5,R6,R7} STM R1,{R0,R2,R3,R4,R5,R6,R7} STM R1,{R0,R2,R3,R4,R5,R6,R7} STM R1,{R0,R2,R3,R4,R5,R6,R7} STM R1,{R0,R2,R3,R4,R5,R6,R7} STM R1,{R0,R2,R3,R4,R5,R6,R7} STM R1,{R0,R2,R3,R4,R5,R6,R7} STM R1,{R0,R2,R3,R4,R5,R6,R7} STM R1,{R0,R2,R3,R4,R5,R6,R7} STM R1,{R0,R2,R3,R4,R5,R6,R7} STM R1,{R0,R2,R3,R4,R5,R6,R7} STM R1,{R0,R2,R3,R4,R5,R6,R7} STM R1,{R0,R2,R3} POP {PC,R4,R5,R6,R7}

ループのために分岐すると3cycle時間を消費してしまうので、ループの数がそれほど多くなければ展開して高速化できます。 ループ用の変数が不要になるので、7レジスタ使ってSTMの回数も減らせて一石二鳥。 ただ、プログラム量は必然的に多くなりがちなので、容量に余裕がある時に使いましょう。

12. キーボードで ALT+V 押しっぱなし(手動)
プログラムを作ることはあくまで手段。手でやったほうが速いこともあります。

目的を達成するための方法は様々です。

同じマシン語でも8番のシンプルなマシン語に比べ、11番のプログラムでは、24倍も速くできました。
ターゲットのCPUに合わせた最適化を行うことで、ぐっと効率が上げられたりします。

BASICであってもコマンドの使い方次第でぐっと速くできます。
リファレンスを見直して、いろいろな使い方を探ってみるのもいいですね。

速度重視?容量重視?作りやすさ重視?
目的に合わせて選択できる手段を増やしておくと、叶う夢の幅が広がります!

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

ファミコンMIDI音源「ふぁみみみっでぃ」音声出力簡単改造 x IchigoJam

2017/09/23 23:55:00
#IchigoJam #midi #maker 

コミケC92で入手したファミコンをMIDI音源にしてしまうカセット「ふぁみみみっでぃ by @hekekekun」をちょっとだけ改造してIchigoJamに接続。


起動音がかわいい、ふぁみみみっでぃ、IchigoJamでいろいろ鳴らしてみるプログラムがこちら。普通のMIDI音源として使えます。

10 UART0:BPS31250:V=127 20 FOR I=30 TO 100 30 C=#90:GSB100 40 C=#93:GSB100 50 IF BTN() END 60 NEXT 70 GOTO 10 100 UART1:?CHR$(C,I,V);:WAIT10:?CHR$(C,I,0);:UART0:RTN

普通のファミコンの場合、音声出力がRF(アンテナ)なので、AV改造などが必要でしたが、カセットの仕様を見ると音声がカセット端子にでています(45ピン)。 これを使って鳴らしてみた今回ですが、ちょっとノイズがひどいのでもうちょっと解析と対策が必要な様子。

ふぁみみみっでぃのBACK側、真ん中あたりの青い線がSOUND INにあたる45ピン。 ついでに、VCCにIchigoJamからの5Vをつなぐので、ファミコンのACアダプターもいらなくなってコンパクト!

links
- ファミコン実機とMIDI連携できるカセット「ふぁみみみっでぃ」のご紹介!MIDINES欲しかった人は要チェックです! | ハイレゾスタイル
- へけけくん (@hekekekun) | Twitter (ふぁみみみっでぃの作者さんのTwitter)
- 極楽ほんげら (ふぁみみみっでぃの作者さんのサイト)
- IchigoJam BASIC 15行、バンブラ奏法で奏でるMIDI楽器

セグメントを2つ減らして消費電力3割減、5セグメントLED時計風アプリ

2017/09/22 23:55:00
#js #maker 

IchigoJam webでPCブラウザ上のフルスクリーンという技を覚えたので、プロジェクターなどの大画面に映える時計アプリを作ってみました。 ビジュアルで魅せるアプリづくりのテンプレートとしても活用ください。

選んだのは、一日一創2012の中でもお気に入り成果のひとつ、5セグメントディスプレイを使った時計「my5segclk
ゼビ文字に似せたことでちょっとが読みにくかったので、0と4を変更。


1 2 3 4 5
6 7 8 9 0 、と読みます。

エレベーターなどでおなじみ7セグメントLEDとくらべて2セグメント少ないので、消費電力28%減!(単純計算)
一味違った雰囲気で時を伝えます。


fivesegclk」 大きさ色をカスタマイズ可、表示部分クリックでフルスクリーン化

links
- 一日一創 - 時計アプリ
- 【IchigoJam】5セグメントLED - 2017-09-24 - SHIROのモバイル日記 (角型LEDで実現!)
- http://scientific601.altervista.org/5segment.html 1973年に考えられた5セグディスプレイ
- 道新スタッフブログ: いまだ現役!41年前のシャープ製電卓 - 7セグに固まる前は8セグ?

プログラム容量4倍、IchigoJam 4k on web、失敗を楽しむ教育を!

2017/09/21 23:55:00
#js #IchigoJam 

容量4倍、プログラム領域を4kにしたIchigoJamの拡張おためし版を使った、大作ゲーム「IchigoTrek-4K」登場! IchigoJam web も4kバージョンを用意して動かしてみました。


IchigoJam web 1.3b」- プログラム4kbyte version (IchigoTrek by shiro0922 動きます!)

元になったゲーム「スタートレック」は1971年生まれで、1980年前後にかけて大流行したBASICのゲームとのこと。 実感ありませんが、78年生まれがスーパーマリオに熱狂したような感じかも。

こどもプログラミング教育などに取り組む、ICT CONNECT 21のイベント「 シリーズ:プログラミング教育の世界での取り組み ~英国における低学年でのプログラミング教育の取組~」へ参加。 イギリスでコンピュテーショナル・シンキングを学ぶためのロボット「Bee-Bot」を学校へ販売・指導しているTTS GroupのAndrewさんによるイギリス事情とロボット実演がありました。

パソコン上のシミュレーター、上下左右などのパネルを並べた「ならべたじゅんにうごく(逐次実行)」でクイズ。 動くと思う人は、サムアップしてくださいと会場に語りかけるも誰も反応せず・・・。 せっかくなので、サムアップ!

日本で長く続いた「間違いを怖れる」教育の縮図を見ました。
遠慮?間違えたら恥ずかしい?実は逐次処理も自信がない?

こどもプログラミングを、どんどん間違ってOK!という新習慣をつくるいいきっかけにしましょう!

プログラムのいいところは、間違っても淡々と何度も粘り強く正確に指摘してくれるコンピューターが相手してくれるところ。 コンピューターは絶対根負けしないので、安心していくらでも失敗させてくれます。失敗は成功の母。自転車を転ばずに乗れるようにならないのと同様、失敗こそ最大の学習です。 失敗を見守るという人間にとっては辛い仕事は、実にコンピューター向きです。


Andrewさん、遠くUKからありがとうございました!
Thank you very much Mr. Andrew!! Next time we'll meet in UK!
Here is English documents of IchigoJam.
"$15 Computer IchigoJam meets Cute Manufacture Pimoroni in UK, and connects SkyWriter HAT!"

続々と公開予定の各地で実証が進む「若年層に対するプログラミング教育の普及推進報告2017
ご関心ある方、ICT CONNECT 21への入会もぜひご検討ください!

links
- 鯖江市全15小中学校を結んだ教員向けプログラミング研修とネクストステップ、総務省実証事業と同日開催
- KidsVenture&教員職員向けIchigoJamワークショップ at 大阪/さくらインターネット本社、IchigoJamのつなぎかた
- 新書籍「小学校教員のためのプログラミングで考える教育の実践入門」とIchigoJamプログラミング シニア講師育成講座@Hana道場
- 大人のプログラミング入門、プログラミングをもっと身近に!iOS11とフルスクリーンに対応 IchigoJam web
- こどもパソコンIchigoJam

大人のプログラミング入門、プログラミングをもっと身近に!iOS11とフルスクリーンに対応 IchigoJam web

2017/09/20 23:55:00
#js #IchigoJam 

子供のプログラミングはじめはゲームがテッパン。
一方、興味関心が多様化しているため、難しかった大人向け入門。

コンピューターとネットワークの低価格化によって一気に身近になった今こそオススメしたいのがこちら。
マイコンを使ったプログラミング入門!

マイコンとは、マイクロコンピューターの略で、大人には懐かしい炊飯器「マイコンジャー」などでおなじみの小さなコンピューター。 マイコンを使えば、身の回りのちょっとしたことを自動化できるので実用的!(例、ねこIoTイノシシIoT


こちら指先に見えるたくさん足が生えた四角いチップが、IchigoJamの心臓部のマイコン「NXP LPC1114」。
値段は約100円。たった100円のくせに秒間約5000万回の処理速度を誇ります。
* 値段はロットと為替次第@digikey / 190円で1コから購入可能 / はんだづけが用意な大きなパッケージは400円
* スマホ用CPUとして圧倒的シェアを持つ、ソフトバンクグループになったARM社の設計、NXP社製造のコンピューター

電気で動くコンピューター。その正体はとってもシンプル!
コンピューターは電源を入ると予め決められた通りに、その足につながった先の何かを自在にコントロールしたり、つながったセンターからON/OFFを受け取ったりするだけのものです。 どのように動かすかを決めているのが「プログラム」。「プログラム」を作ることを「プログラミング」といいます。

コンピューターの足にLEDをつないで光らせてみましょう。

LED1

100円の心臓部をもつIchigoJamなら、キーボードで打てば即、コントロールできます。

1秒光らせる

LED1:WAIT60:LED0

1分たって点滅してから消す

LED1:WAIT60*60:LED0:WAIT10:LED1:WAIT10:LED0

運動会のプログラムと同様、予め記憶する時は番号をつけます

1 LED1:WAIT60*60 2 LED0:WAIT10:LED1:WAIT10 3 LED0 RUN

ずっと点滅させるプログラム

1 LED1:WAIT30 2 LED0:WAIT30 3 GOTO1 RUN

変数を使ってだんだん速くしたり、センターからの入力を使って速さを変えたり自由自在。
コマンドをひとつ使えるだけで、表現の幅がどんどん広がるのが、プログラミングの楽しいところです。

単純なON/OFFですが、LEDの代わりにブザーをつなげば音がなり、モーターをつなげばモノが動き、スイッチにつなげば家電が動き、ネットにつなげばスマホへの通知や、遠く離れたモノをもコントロールもできるわけです。(ネット接続するIoT、sakura.ioなら月額61円〜

ちょっとやってみたくなった方、今お使いのパソコン上でお試しできます。
ChromeかSafariで「IchigoJam web」を開いたら、「LED1」と打って、エンター!
LEDが光る感動には程遠いですが、縁が反転し、言うことを聞いた証「OK」メッセージが返ってきます。


IchigoJam web」 for Chrome/Safari/Android/iOS11
[fullscreen]ボタンを押すと画面いっぱいに広がるIchigoJam。
フルスクリーン時、動き続けるタイプのプログラムを止めるには、ESCの代わりに、CTRL-Cを使うと便利です。


IchigoJam web、iPhone/iPadでも新OS「iOS11」で動くようになりました!
Bluetoothキーボードを接続すれば、パソコンと同じように使えます。

プログラムの表現方法はたくさんあります。
iPhoneアプリをつくるためのSwift、AndroidならJava、WebならJavaScript、AIで活躍Pythonなど用途によって様々。 IchigoJamで使っているのはBASICという言語。53年前に作られた歴史ある、わかりやすさには定評ある言語です。 プログラミング学習用言語として作られているので、スマホアプリがつくりたくなったら、Swift/Java/JavaScriptへステップアップしましょう!


10月放送のTokyo MXのテレビ番組の収録、パックンにもマイコン、プログラミング体験してもらいました!
「エトス、パトス、ロゴス」伝え方3種がおもしろい、パックン著書にサインもらいました!

基本1500英単語でオリジナル勉強アプリをつくろう!タイピングは英語の書道!

2017/09/19 23:55:00
#js 

英語は2台目の自転車、と、元Googleの村上さん談。
実際に口にだすことで英語が聞こえる耳を育て、ちょっとした自己紹介を翻訳しておき丸暗記。
後は、アウトプットする場数と、単語力。

福井にも縁あるパックンの本「パックンの「伝え方・話し方」の教科書 世界に通じる子を育てる」内に、アメリカの子供も遊ぶボキャブラリーゲームを発見。
日英、英日のクイズ形式で学べるアプリを一日一創2012からリメイク!


Globish 基本英単語学習アプリ(英日)」(日英もあり)

同じ1496の英単語データ(JS)を使って、英単語力がついたら、英単語タイピングに挑戦!

typeinglish - 一日一創2012

話すと同様大事なタイピングによるアウトプット。
キーボードを見ず、すらすらタッチタイピングする力は、小学校低学年で身に着けておくのが理想的。
英単語データを使って楽しいゲームを作って遊べば一石二鳥!

2台目の自転車、英語があれば、学びたいものを家に居ながらにして無料で無限に自習可能。
ここぞという場所には自慢の作品を持って、実際足を運んで、直接コミュニケーションとりにいきましょう!

自分で学べるようになって一人前。
「教えてもらう」は小学生までで卒業させてあげたい。

links
- 一日一創 英語アプリ一覧
- 一日一創 アプリ一覧
- 一日一創2012

IchigoJam BASIC 15行、バンブラ奏法で奏でるMIDI楽器

2017/09/18 23:55:00
#IchigoJam #sound 

バンブラ奏法BEEP音源を応用してIchigoJamとスーファミコントローラーでMIDI楽器をつくってみました。
KORG plugkeyを使うと、iOSが楽器に早変わり!

iOSで使えるMIDI楽器は、懐かしいアナログ音源、FM音源から最新音源までたくさん!
今回はApple標準のGarageBandを使って、切り替えながら鳴らしてみました。

バンブラ奏法(コントローラーの上下左右、ABXYボタンで鳴る。Rで半音上がり、Lでオクターブが上がる)のためのスーファミコントローラー接続。 さよなりωさんのコネクターがあると便利ですが、自分で切って作っちゃうのも手です。
(赤:IN1、白:VCC、茶:GND、橙:OUT1、黄:OUT2)

ホットボンドで固めておきましょう。

近日発売、MIDI入出力ボードとスーファミコントローラーをつなげて準備完了!

プログラムを作ってできあがり!(遅れを少なくするためにVIDEO0で画面消しています)

1 'SFC-MIDI 10 POKE#700,16,181,80,35,27,2,28,70,36,4,91,28,27,4,1,34,18,3,164,24,0,34,90,96,0,33,0,34,154,96,34,104,146,10,138,64,128,24,2,34 20 POKE#728,154,96,1,49,16,41,244,209,1,34,90,96,16,189 30 OUT1,1:OUT1,2:A=#700:B=0 32 LET[0],9,7,-1,-1,4,0,2,5,11,12 35 BPS31250:UART1:VIDEO0 40 N=~USR(A,0):P=N&~B:R=~N&B:B=N 60 FORI=0TO9:IF[I]<0GOTO80 70 IF P&(1<<I) V=100:GSB90 75 IF R&(1<<I) T=[I+10]:V=0:GSB92 80 NEXT 85 IF BTN() UART0:VIDEO1:END 86 GOTO40 90 T=[I]+N>>11+N>>10&1*12 91 [I+10]=T 92 ?CHR$(#90,60+T,V);:RTN

10-20行 スーファミコントローラードライバ(マシン語)
35行 MIDI信号は31250bpsのシリアル信号、ビデオ出力を切って3倍速!
85行 IchigoJam本体のボタンで安全な終了(シリアルを切って、ビデオ出力を戻す)
90行 バンブラ奏法の肝!
92行 MIDI信号出力(#90でチャンネル1をノートオン、ボリューム0でノートオフ)

コンピューターで音楽をもっと楽しく!

MSXのZ80マシン語解析と、IchigoJamの太字化マシン語プログラム

2017/09/17 23:55:00
#IchigoJam #asm #MSX 

IchigoJamの太字化、MSXの例に習ってマシン語化してみました。

POKE#800,7,34,18,2,137,24,10,120,19,70,82,8,26,67,10,112,1,49,1,56,247,209,112,71

PCGの#700に使いたい文字のパターンをコピー(この例は0〜9の数字をALT+0〜9へコピー)

COPY#700,ASC("0")*8,10*8

あとは太字化処理したいバイト数を指定してマシン語呼び出し!(2度実行すると更に太字に!)

U=USR(#800,10*8)

ALT+0〜9で書いてみましょう!プログラムでももちろん使えます

FOR I=0 TO 9:?CHR$(224+I):NEXT

ベースのアイデアはこちらMSX版

MSX BASICのプログラム、70行で書き込んでいる23byteのマシン語部分を解析(逆ハンドアセンブル)してみました。(表示用につくった MSXLIST

Z80のニーモニックを、asm15表記風に書いてみるとこんな感じです。

BC=#700 HL=#100 @LOOP CALL @RDVRM E=A A>>=1 A|=E CALL @WRVRM HL+=1 BC-=1 A=B A|=C IF !0 GOTO @LOOP RET

Z80のレジスタは基本8bitなので、16bitとして使うBCレジスタの0判定がおもしろいですね! MSXのVRAMはRAMに割り当てられていないので、BIOSというMSX組み込みのコードを呼び出していました(RDVRM/WRVRM)。 どうもこの呼出が結構遅い様子。VDPという一種のGPUを使って高速化するのが常套手段だったようです。(VDPはGPUの元祖かも?)

IchigoJam用に書き換えたマシン語がこちら(asm15 assemblerでアセンブルできます)

R2=7 R2=R2<<8 R1=R1+R2 @LOOP R2=[R1] R3=R2 R2=R2>>1 R2|=R3 [R1]=R2 R1+=1 R0-=1 IF !0 GOTO @LOOP RET

ほぼ一緒ですね!

このようにCPUが違うとそのCPUで使えるレジスタや、コマンドが違いますが、やっていることは基本的に同じ。 C言語やJavaなどは、このようなCPU毎の差を埋めるプログラム(コンパイラ)が助けてくれているわけです。

何でも作れちゃう感がアップする「マシン語」おすすめです!
連載、IchigoJamではじめる、ARMマシン語入門 1. はじめてのマシン語

IchigoJamのメモリマップと太字化プログラム

2017/09/16 23:55:00
#IchigoJam 

雰囲気が変わって楽しい、フォント変更。
IchigoJamでもアルファベットを太文字にしてみよう!(元ネタ on MSX by @ksasao

「太字化 on IcigoJam」 IchigoJam web で RUN!

太文字化には、好きなキャラクターパターンが作れるPCG機能を使います。
まずは、アルファベットの「A」キャラクターパターンをコピーしてみましょう。

?ASC("A"),CHR$(234) 65 10 OK FOR I=0 TO 7:POKE234*8+I,PEEK(65*8+I):NEXT OK

ALT+Aを押してでる「10」のキャラクターがAに変わりました!(CLPで元に戻せます)

太字にするのは簡単、元のパターンにそのパターンを1bitシフトしたものの論理和を書き込めばOK!

FOR I=0 TO 7:N=PEEK(65*8+I):POKE234*8+I,N|N>>1:NEXT OK

アルファベットA〜Zまでの26文字を全部変更してみましょう。

FOR J=0 TO 25:FOR I=0 TO 7:N=PEEK((65+J)*8+I):POKE(224+(10+J)%32)*8+I,N|N>>1:NEXT:NEXT OK

PCGで変更できるのは32コまで、ALT+Vまでしかないので、はみ出したW/X/Y/ZはALT+0〜3に割り当てるようプログラムしてみました。

FOR I=0 TO 7:N=PEEK(65*8+I):POKE234*8+I,N|N>>2:NEXT OK

2bitずらすとおもしろ文字になります。いろいろ実験してみましょう!

PEEK(ピーク)はメモリの値を取得するコマンド
POKE(ポーク)はメモリを書くコマンド(ただし#000〜#6FFのROM領域は書き込みできない)

IchigoJamのメモリマップをまとめてみました。
コンピューターの頭の中をいろいろ探検してみましょう!


「IchigoJam メモリマップ」

おまけ、冒頭のデモプログラム!(RUN on IchigoJam web

10 CLS 20 LC11,10:S="ICHIGOJAM":GSB@PUTB 30 LC4,14:S="BOLD CHARACTER WITH PCG":GSB@PUTB 40 FOR I=0 TO 31:POKE #920+I,64+(I+23)%32:POKE#960+I,224+I:NEXT 50 CLP 60 FOR I=0 TO 32*8-1:C=64+(I/8+23)%32:POKE #700+I,PEEK(C*8+I%8):NEXT 70 FOR J=0 TO 1 80 FOR I=0 TO 32*8-1:A=PEEK(#700+I):POKE#700+I,A|A>>1:NEXT 90 NEXT 100 ?:?:?"TYPE ALT+A!":END 110 @PUTB:FOR I=0 TO LEN(S)-1 120 IF ASC(S+I)=SPACE ?" "; ELSE ?CHR$(224+(ASC(S+I)-55)%32); 130 NEXT:RTN

マシン語で太字化にも挑戦してみましょう!
(追記、マシン語解答例

links
- オリジナルキャラをつくるPCG - IchigoJamプリント
- asm15アセンブラ for IchigoJam
- 連載、IchigoJamではじめる、ARMマシン語入門 1. はじめてのマシン語
- ベーマガ復活11号、近日発売!

元ネタ on MSX

IchigoJam/Ichigolatteで使えるマシン語生成、アセンブリ言語&アセンブラ、asm15 on GitHub

2017/09/15 23:55:00
#IchigoJam #arm 

ゲームづくりの醍醐味は、どういう仕掛けでプレイヤーを喜ばせようかとあれこれ考えること。 プログラミングすればすぐに実現。まずは自分が楽しめて、人に喜んでもらって二度美味しい!

ゲームづくりに慣れてくるとやってみたくなる複雑な仕掛け。複雑になればなるほど高速なコンピューターといえども、遅くなります。 そこを、いかに効率がいいロジックを考えるかが腕の見せどころ!IchigoJamでのゲームづくりは、限界が低い分、すぐにその成長のチャンスに巡り会えます。

アルゴリズム(=考え方、作り方)でなんとかするのが常套手段ですが、奥の手に「マシン語」があります。

IchigoJam BASICは、インタプリタといって、分かりやすく書かれたプログラミング言語をプログラムでコンピューターが分かる言葉「マシン語」にひとつひとつ翻訳しながら動く仕組みでできています。 もし直接「マシン語」で話せたら、翻訳者(インタプリタ)が必要ない分、速くなるわけです。

IchigoJamをお持ちであれば、すぐに試せるマシン語入門。
はじめてのマシン語 - IchigoJamではじめるARMマシン語その1

0と1の羅列であるマシン語を分かりやすくするためのアセンブリ言語。
初心者にもわかりやすい表記でつくったオリジナルのアセンブリ言語「asm15」としてまとめました。
Cortex-M0 ARMマシン語表(抜粋)

Cortex-M0とは、ARM規格のCPUに要求される処理速度別のラインナップの内、最も遅い部類のシリーズ名です。 遅い代わりに、回路が小さく、省エネで、機能が少なくわかりやすいという大きな利点があります!

BoxHeadRoomさんが開発した、この「asm15」表記のアセンブリ言語をマシン語に変換するプログラム(アセンブラといいます)に足りなかった命令などを加えた「asm15 assembler」をGitHub上へのアップしました。
asm15 assembler for IchigoJam / IchigoLatte

まだ使い勝手が悪い部分や、足りない命令があります。
ぜひオープンオースプロジェクト「as15 on GitHub」にご参加ください!

電子工作マガジンの常連、田木屋商店さんのIchigoJam作品、ミサイル防衛ゲームや、落ちものゲームなどには効果的にマシン語が使われています。 まずは遊んで、改造して、少しずつ自分のモノにしていきましょう。

試しに、逆アセンブラを作ってみるのも楽しかも?
座学より体験、体験よりものづくり。ものづくりに勝る学習なし!

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

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