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

DMM 4K対応、プログラマブル学習リモコン by IchigoJam / Programmable IR receiver and sender

2017/05/07 23:55:00
#IchigoJam #maker #asm #english 

DMM.make 4Kディスプレイの入力切り替えが面倒なので、IchigoJamで学習リモコンを作ってみました。
I made programmable IR sender by IchigoJam.


ハードウェア設定 (hardware setup)
IR LED - OUT1
IR Reciever - IN1 (赤外線受光モジュール)

10 POKE#700,112,181,114,182,8,34,18,2,138,24,0,40,54,208,80,35,27,3,1,51,27,3,1,36,228,4,202,38,0,33,0,240,40,248,1,49,33,66,30,209 20 POKE#728,29,104,0,45,247,209,36,9,0,32,0,33,0,240,29,248,1,49,33,66,19,209,29,104,0,45,247,208,17,82,2,48,176,66,12,208,0,33,0,240 30 POKE#750,16,248,73,28,33,66,6,209,29,104,0,45,247,209,17,82,2,48,176,66,229,209,0,33,17,82,2,48,64,8,98,182,112,189,100,37,210,53,1,61 40 POKE#778,253,209,112,71,80,35,27,2,1,51,27,4,4,51,1,36,0,38,17,90,0,41,234,208,28,96,0,240,21,248,30,96,0,240,18,248,1,57,247,209 50 POKE#7A0,2,48,17,90,0,41,222,208,0,0,0,0,0,240,8,248,0,0,0,0,0,240,4,248,1,57,245,209,2,48,228,231,154,37,1,61,253,209,112,71 200 IF BTN()=0 CONT 210 A=#BF00 220 B=#E11E:GSB300:N=USR(#700,0):WAIT60 230 B=#E21D:GSB300:N=USR(#700,0):WAIT30 240 B=#BE41:GSB300:N=USR(#700,0) 250 GOTO200 300 LET[0],346,169 310 FORI=0TO15:[2+I*2]=25:[3+I*2]=18+43*(1<<I&A!=0):NEXT 320 FORI=0TO15:[34+I*2]=25:[35+I*2]=18+43*(1<<I&B!=0):NEXT 330 LET[66],25,0:RTN

配列に送信用のデータを作成(300行)し、マシン語(10-50行)で38kHzの赤外線LED点滅信号として送信。ボタンが押されたら、あらかじめ調べたコードを順番に送信。これでワンボタンで入力切り替えができます!アンプ連動やセンサーで自動でONとかにも!
It makes IR data on the array (line 300) and send via IR LED blinking. I did it just 1 pressing when switch the input!

こちらがリモコンコード受信用のプログラムです。上のプログラムを一度実行したあと、一度 NEW でプログラムを消して、下記を入れることで、送信&受信テストができます。
This is the IR code receiver program. You can get the code after run the abobe program, NEW command and enter this program.

100 INPUT"1:SEND 2:RECV ?",N 110 IF N=1 N=USR(#700,0):GOTO 100 120 N=USR(#700,1) 130 FOR I=0 TO N-1 STEP 2:?[I];" ";[I+1];" ";:NEXT:? 140 N=0:FORI=0TO15:N=N|([3+I*2]>37)<<I:NEXT:?HEX$(N) 150 N=0:FORI=0TO15:N=N|([35+I*2]>37)<<I:NEXT:?HEX$(N) 160 GOTO 100

家のリモコンで動くもの全部、IchigoJam BASIC プログラミング可能に!
You can program your all devices have a IR receiver by IchigoJam BASIC!

links
- IchigoJam
- レゴテクニックシリーズをIchigoJamと赤外線LEDで制御する(マシン語) / Control Lego Technic by IchigoJam and IR LED
- はじめてのマシン語 - IchigoJamではじめるARMマシン語その1

How to divide on IchigoJam Assembly

2017/04/28 23:55:00
#IchigoJam #asm #ARM #english 

About the machine language on IchigoJam, you cant't find how to divide (割り算@ja) on the ARM Cortex-M0 command table. It's right. ARM Cortex-M0 has no commands of division. Instead you can use the function to divide.

IchigoJam BASIC command "USR" pass an address of function to divide as the register R3 after IchigoJam 1.2b31. (IchigoJam-FAN to download the latest version 1.2b45)

asm: R1=3 → 00100 001 [num]
asm: GOTO R3 → 010001110 [R3] 000
BASIC: PRINT 100 / 3 → 33

If you want to use the number as remainder (R1), call it!

[0]=`00100 001<<8 + 3 [1]=`1011010 100000000 [2]=`010001111 0011 000 [3]=`0100011000 001 000 [4]=`1011110 100000000 ?USR(#800,100) 1

asm: R1=3 → 00100 001 [num]
asm: PUSH {LR} → 1011010 100000000
asm: CALL R3 → 010001111 [R3] 000
asm: R0=R1 → 0100011000 [R1] [R0]
asm: POP {PC} → 1011110 100000000
BASIC: PRINT 100 % 3 → 1

Enjoy programming with the simple machine language!

links
- Cortex-M0 ARMマシン語表(抜粋)
-
はじめてのマシン語 - IchigoJamではじめるARMマシン語その1
- IchigoJam-FAN on Facebook

日本人が創ったCPUの歴史、MacのCPU Intel 64 マシン語はじめのいっぽ

2016/08/19 23:55:00
#asm 

今使ってるMacBook ProのCPUは、Intel Core i5 2.7GHz コア数:2、64bitの汎用レジスタが15個ある64bit CPU、Intel 64というマシン語が使える。

Macのコンソールに定番の「Hello World!」と表示させるマシン語のプログラムは、このようなアセンブリ言語を使って作る。

SECTION .data MESSAGE db `Hello World!\n` MESSAGE_LEN equ $-MESSAGE SECTION .text global start start: mov rax, 0x2000004 ; syscall 4: write mov rdi, 1 ; fd = stdout mov rsi, MESSAGE ; buffer mov rdx, MESSAGE_LEN ; size syscall mov rax, 0x2000001 ; syscall 1: exit mov rdi, 0 ; retcode syscall

アセンブリ言語をアセンブラというソフトを使ってマシン語を生成することをアセンブルと呼ぶ。

nasm-2.12.02/nasm -f macho64 hello.s ld -o hello hello.o ./hello

アセンブラは、NASMというオープンソースなソフトを使う。
Macに入っているバージョンは 0.98.40 と古くIntel 64に非対応だったので、最新版 2.12.02 をダウンロード。

画面の表示は、raxなどレジスタに画面表示用のコマンド番号や、データのメモリの位置、文字数をセットしてシステムコール(syscall)というOS側に処理を依頼することで実現。プログラムの終了もシステムコールを使ってOSに伝える。

CPUは高速に2進数のbitをあれこれいじる機械。いじり方によって足し算になったり掛け算になったり、比較したり、次に実行するプログラムを変えたりする。ARMマシン語入門で、机と表現したレジスタと、本棚をイメージすると近いRAM(メモリ)を使う設計自体は、世界初の商用マイクロプロセッサ Intel 4004(開発は、日本人、嶋正利さん!)から全く変わっていない。

Intel 4004は、45命令、レジスタは4bit、計算用のAレジスタとR0-R15の16レジスタ
Intel 8008は、68命令、レジスタは8bit、A,B,C,D,E,H,LとZ80とほぼおなじ構成
Intel 8086では、レジスタが16bitになり、AX,BX,CX,DX,SP,BP,SI,DIという構成(SI/DIはセグメント)

Intel 64はその直系で、レジスタが64bit、互換性を持ちつつ拡張された RAX,RBX,RCX,RDX,RSP,RBP,RSI,RDI にR8からR15の8レジスタが追加されている。SIMD命令などで命令数は数百(〜千オーバーかも?)と膨大だが、レジスタでいじってメモリなどに書くという基本は変わらない。

IchigoJamで使っているCortex-M0は、55命令、レジスタは32bit、R0-R15という4004に似たシンプルな設計。最新の64bit版ARM、ARM64もその延長線上にある。

エスケープシーケンスとシステムコールを使うとコンソールの画面で8色の色が使える。


座標をエスケープシーケンスで渡すためにはレジスタを10進数に変換する必要があるので、一度マシン語でつくってみると楽しい。楽しみを奪うといけないので、ソースは公開はまた後日。

PCでブートするIchigoJam PCをベースに、64bitをフルに使う特殊OSを作ってみるのもありかもしれない。

参考リンク
- Intel® 64 and IA-32 Architectures Software Developer Manuals (大元、Intelの資料)
- x64 アセンブリーの概要 | iSUS
- Tips IA32(x86)命令一覧 (32bit版だかイメージはつかめる)
- よく使うASM命令ベスト100位に説明つけてみた - おなかすいたWiki!

自分で育てる電卓 linecalc

2015/03/16 23:55:00
#js #ced #asm 

2012年、366日、毎日創り続けたWebアプリ。自分で最も使っているアプリは、linecalc、電卓です。

必要な関数を自分で追加していくと便利そうなので、昇格させメンテナンスしてあげることにしました。


linecalc - 育てる電卓

hex, bin で16進数化、2進数化できます。0xff, 0b111 などの表記はJavaScriptなので普通に使えます。新規追加したのはARMのthmubアセンブラ解読用のarm命令。

大したアプリではないのでライセンスはCC0、貴方好みの電卓へぜひ育ててあげてください!

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