2012-07
2012-06 FM3 RX62N SH2A Android
7月
持ち越し案件
USBオシロみたいな奴。--- 実は済んでなかった。- MinGWクロスgccのビルド。
- STM32F4で何か --- 何もしていない。
まだやってる。Android-x86
VMware PlayerでAndroid ICS(インストール編)
- 上記URLを参考に、本家x86サイトのandroid-x86-4.0-RC1-eeepc.iso を使ってもいちどやってみたところ、
- LANは使えるようになった。
問題は、
- (1)SDカードは認識しない。
- (2)マーケットのアカウントが作れない。(既存アカウントの入力も出来ない)黒い画面のまま。
- (3)プライベートなhtmlページに貼り付けたapkのダウンロードも永遠に終わらない。
単に(1)が原因なだけかもしれない。
VirtualBoxは嫌いだから使ってないけど、VBox版だとどうだっけ?もう覚えてない。
- そんなに頑張らなくても、いまやx86ネィテイブOpenGLありのバイナリー付きの純正SDKもあるんだけど。
- だけど、SDKに付いてるAndroidは、どういうわけか使いにくいんだよね。なんでだろ。
- Android-x86サイトは更新止まってるっぽいなー。
ATtiny2313でCUI時計を製作中。
- CUI時計?聞き慣れない名前だ。
- こんな奴
TIMER OUT | +---------------+ つ ATtiny2313 | +---------------+ (Xtal) || |\-------------- TxD \--------------- RxD
- ATtiny2313にはXtalだけを実装。
- USART経由で時刻を知ったり、設定したりする。
- 指定した時刻になるとTIMER OUTにシグナルを送る(目覚まし)
- Xtalは3.58MHzを使用したけれど、4MHzとか8MHzでもOK。
- CLKPRを制御して、3.58MHz/128=27kHz程度で動作させる。
- 0.1秒程度の頻度でタイマー割り込みを設定しておき、割り込み処理内で時計を実装しておく。
- メインルーチンは、スタンバイ状態にしてSLEEP命令を実行させる。
- Xtalやその分周比の都合で、正確な0.1秒が得られないので、一定回数の割り込みごとに進み遅れの補正が行なえるようにする。(n回分の割り込みに対して、1回だけ0.1秒の加算を省略、あるいは追加する)
- TxD/RxD経由で(低いボーレートで)時計合わせと目覚まし時刻設定をする。
- 毎朝目覚まし時間になると、電気機器などの起床あるいはサイレン発生などをトリガーする。
- 電源は、乾電池、スーパーキャパシタ、あるいはNiMHなどの蓄電池。
- 消費電流はスタンバイ状態で100〜300μA程度になった。
うーん、もう一声。
- ていうかスーパーキャパシタ0.1Fで10分持たないんだよ〜。何とかして!
とりあえず出来たので公開:
RETROF-16のエミュレータを製作中です。
retrof-16とは?
- duo6750さんが作成中の(21世紀に実在する)
- TTLのみで作るコンピュータです。
- 下記サイトに詳細があります。
実行例写真
出来てるところ
- Windows/Linux上のgcc/makeでビルドできる。
- なんとなく命令セットをエミュレートしているように見える。
- 逆アセンブルもする。
- GUIっぽいものを追加しました。←ここが新しいところ
- SPACEキーを押すと実行速度を変えられます
出来てないところ
バイナリーファイルのロードとかがない。---実装済みアセンブラがない。---作成済み.入出力系の実装がない。---LEDとトグルSWを実装フレームバッファの表示が無い。---実装。
R16用アセンブラを書き始めました。
- (流用するための)Z80用のアセンブラとして使えそうなものは・・・
- sdcc に付属しているもの。
- ASxxxx Cross Assemblers (リンク先不明)
- どちらもリロケータブルオブジェクトを生成してlinkという感じです。
- ASxxxx はz80のほかに6502とか6800とか過去の8bit CPUを網羅する勢いのクロスアセンブラだったのですが、 現在の入手先が分かりません。
- なので、とりあえずスクラッチから書き始めることにしました。
ダウンロード
- R16 asmソースを入力して、バイナリーとリストを出力します。
- バイナリーは常に0番地から始まるイメージです。
文法?
- なんか6800風に作っていたのですが、どうやら違うみたいです。
- z80風?
LD 10 (これが即値?) ST R255 (Reg8 実際は6800のゼロページ $ff みたいなもの) LD *R10 (Reg8間接)
では、JMPは?
JMP 10 (即値風だが、番地指定) JMP $1234 (Imm16をPCに代入する) JMP R15 (Reg8間接ということ?) JMP *R15 (Reg8の二重間接?)
ここまでは理解できるとして、Abs,PC+Rel,PC-Rel,PC+Rel+Cは?
JMP +10 (PC相対で+10番地先) JMP -10 (PC相対で-10番地先) JMP +R14 (PC相対で Reg8番地先) JMP -R14 (PC相対で-Reg8番地先) JMP +*R15 (PC相対で [Reg8]番地先) JMP -*R15 (PC相対で-[Reg8]番地先) JMP C+*R15 (PC相対でC+[Reg8]番地先)
今週のお悩み相談室
- R16に関しては・・・
- アセンブラにマクロ機能は必須だと思う。
- 定数式のサポートも必須だと思う。
- duo6750さんの言っている簡易C言語のようなものはずいぶん昔(1985年くらい)に作ったやつがあって それはasm16.zipのサブディレクトリに入れておいた。
- こんなやつ
main() { r8=1; sub(); if(r15 >= 4) { r3++; } } sub() { r4=r5; r4+=r6; }
↓
main: mov r8,1 call sub cp r15,4 jc __el000 inc r3 __el000: ret sub: mov r4,r5 add r4,r6 ret
- これはz80用と8086用があって、実用にしていた。
- r16用にするためには上記のマクロアセンブラがないと無理。
- それから、マクロアセンブラがあっても、命令にcall/retがないと無理。
昔、call/retの無いCPU(SC/MP-IIのこと)を使い倒していた時期があって、ソフトウェア的なcall/retを実装したことがあったけれど、かなり効率悪かった。
- 結局悟ったのは、ミニコン方式のBAL(Branch and Link)命令で戻り先を示す汎用レジスタ(r4とかそんなやつ)を
- サブルーチンの先頭でstaticな固定アドレスに保存しておいて、リターン時にその固定アドレス間接でjmpするしかない。
- ってことだ。
SC/MP-II語で書くとこんな感じ。
- 呼び出し
LDI subr_hi (accにサブルーチンアドレスの上位即値を入れる) XPAH P3 (accとP3Hを交換) LDI subr_lo XPAL P3 XPPC P3 (PCとP3を交換)
- 呼び出された側
ra_save: DW 0 subr: XPAH ST ra_save+1(PC) (PC相対アドレッシングしか存在しないこの屑CPU) XPAL ST ra_save(PC) .... サブルーチンの処理. #戻りたい. LD ra_save+1(PC) XPAH P3 LD ra_save(PC) XPAL P3 XPPC P3 (PCとP3を交換)
上に書いた命令のすべては、z80では
call subr ret
の2命令で済むってことが分かって、SC/MP-IIを捨てた。
全部、時間の無駄、クロックの無駄、人生の無駄。
とか、言いつつ、作ってしまった。
ダウンロード:
上記のような文法を受け入れるC風言語アセンブラです。
アセンブラ側にマクロ機能を実装すべきところを、今のところ手抜きしてハードコーディングしてあります。
ソースはどれも短いので、適当に改造してください。
実行例)
/* =========================================== * RETROF-16 Sample Program =========================================== */ //========================================== org(0); jmp(_start); // 100番地へjmp. //========================================== org(0x100); _start: r15=0x100; // Set Stack. //========================================== r4=0; // VRAM書き込みポインタ. r5=0; // VRAM書き込みデータ do { do { ld(r5); #stv *r4 r4++; and(0x1f); // ポインタが32の倍数? if(z) { r5++; // 書き込みデータを+1 out(r4);// LEDの表示データ. } }while(r4 != 65527); //最後の7dotは書かない. r4=0; // ポインタを0に戻す. }while(1); //========================================== // 以下の関数は未テスト(実行されない) //========================================== main() { r8=1; sub(); if(r15 >= 4) { r3++; } } sub() { r4=r5; r4+=r6; r4-=3; r4-=267; sub(300); and(ffffh); r4|=0x1fff; r4&=0x55aa; }
- マクロ処理&アセンブル結果
0000: org 0 0000:04ff jmp _start 0100: org 0100h 0100: _start: 0100:b000 0100 d40f mov r15,0100h 0103:8000 d404 mov r4,0 0105:8000 d405 mov r5,0 0107: __do000: 0107: __do001: 0107:9005 ld r5 0108:e204 stv *r4 0109:9004 8801 d404 inc r4 010c:8a1f and 01fh 010d:4504 jne __el002 010e:9005 8801 d405 inc r5 0111:d604 out r4 0112: __el002: 0112:b000 fff7 9c04 cp r4,65527 0115:490f jne __do001 0116: __od001: 0116:8000 d404 mov r4,0 0118:0812 jmp __do000 0119: __od000: 0119: main: 0119:900f 8c01 d40f 900e 8801 e40f enter 011f:8001 d408 mov r8,1 0121:d80e 040d call sub 0123:8004 9c0f cp r15,4 0125:4603 jc __el003 0126:9003 8801 d403 inc r3 0129: __el003: 0129:a00f d40e 900f 8801 d40f 3000 000e leave 0130: sub: 0130:900f 8c01 d40f 900e 8801 e40f enter 0136:9005 d404 mov r4,r5 0138:9004 9806 d404 add r4,r6 013b:9004 8c03 d404 sub r4,3 013e:9004 bc00 010b d404 sub r4,267 0142:bc00 012c sub 300 0144:ba00 ffff and ffffh 0146:9004 b600 1fff d404 or r4,01fffh 014a:9004 ba00 55aa d404 and r4,055aah 014e:a00f d40e 900f 8801 d40f 3000 000e leave SYMBOL LIST: = 334 (0x14e) __od000 = 281 (0x119) __od001 = 278 (0x116) __do000 = 263 (0x107) __do001 = 263 (0x107) __el002 = 274 (0x112) __el003 = 297 (0x129) sub = 304 (0x130) main = 281 (0x119) _start = 256 (0x100)
Raspberry Piに最適化した「Raspbian」OSリリース、Webブラウズデモ(動画)
engadget
ただし Dom 氏はRasberry Pi をオーバークロックして、もともと700MHzのところを1GHz で動かしています。 オーバークロックは保証の範囲外。
- おいおい。
- オーバークロックはいいが、メモリーが256MBから足せない問題をまず何とかしてくれたまえ。
- しかし、改造OSが出るまでハードウェア浮動小数が無効だったなんて・・・。
- アーキテクチャーがARM11なので、Thumb-2命令セットは使用できない。Classic ARMな命令セットを使うしかない。(Thumbだとやや遅くなる)
楽天Kobo TouchのLinux
中身はARMなLinux
内部メモリーは市販のマイクロSDらしい。
- http://blog.osakana.net/archives/2748
- 32GBに差し替え可能とか。
- ちょっとだけ遊べそうなんだけど、こないだ買ったEPC-IIにubuntu入れて1日で飽きて、それ以来全く起動すらしていない。電池も完全に切れたまま。
- なので、反省して、この手のガジェットには手を出さないこととした。
- EPC-IIは飽きたら玄箱の代わりにWebサーバーにするつもりだったんだけど、HDD容量的に玄箱代わりは無理なのでやめた。*5
安物メモリー買いのデータ失い。
まあ、べつにデータ失っちゃいないけど。
- KINGMAXのmicroSD(16GB)が799円と特価だったので買ってみた。
- mp3を適当にコピーしてmp3プレイヤーに入れようとしたところ、ベリファイエラー多発。2曲のうち1曲くらいの割合でコンペアエラーする。
- しかたないので、Windowsからフォーマット。したけれど、フォーマットが延々と時間掛かって終わらない。
- 気が短いので、カード抜いてもう一度フォーマットしようとしたけど、ディレクトリが化けたままで二度と書き込みできない体になった。
- Linuxから、
# dd if=/dev/zero of=/dev/sdc count=1
- これすら、まともに実行できない。やったところで抜き差ししたら元の化けディレクトリに戻る。つまり書込み禁止状態になってる感じ。
- 次の日、同じ店に行って、こんどはTranscendの8GB(特価399円)×2を買ってきた。
- 何故って、その日は16GBが899円だったのよ。KINGMAXは跡形も無かった。
- Transcendの8GBは2枚とも良品だった。
- 8GBあれば、ubuntuは楽勝で入るし、mp3なら(1曲4MB平均で)2000曲入る。CD100枚相当か。物理的にスケールおかしいんじゃないのか。
どーでもいいけど、microSDメモリー安すぎ。
- kobo Touch の内蔵Flashとか中華Padの内蔵Flashの中身が、そのまんまmicroSDだったりするのも頷ける。
*1 何を開発するかにもよる。Arduinoのコマンドラインビルドならなんとかなるかな。
*2 ubuntu入れればviとかemacsは使える。ただ、メモリーが300MB程度しか使えない(ハードウェア上は512MB)GUIはVNC経由の描画なのでとても使えたもんじゃない
*3 そう、よくハングするらしい。アンドロイドは。電源入らなくなってリセットとかもあるらしい。
*4 EPC-IIには英語キーボードがちゃんと付いている。が一般的にはAndroidやiOSはキーボードなし
*5 じゃなくって、環境移行するのが面倒なのと、玄箱がちゃんと動いているのでその必要が無かった。