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 じゃなくって、環境移行するのが面倒なのと、玄箱がちゃんと動いているのでその必要が無かった。


