2013-11
2013-10 FM3 RX62N SH2A PIC32MX
11月
- 先月は、HIDブートローダーのファームウェアサイズを15kBから7kB(FLASH4K+BOOTROM3K)に縮めてみた。
- 今月はシリアルポート接続用の3kBのローダーを書こうと思う。
- これは、USB-HOST開発用だ。
- USB-HOSTでは、シリアル側にprintを吐く(あるいはLチカ)しか通信手段が無いので、USB-シリアル変換チップ(FT232みたいなモノ)を常時接続しておいたほうが便利だ。
- USB-Device用のUSB接続端子はHOST側と共通なので使えない。
- ということは、シリアルローダーがあれば便利だという結論に到達する。
- PICKit2を繋いでおくというのもありかもしれないが、PGD,PGCが塞がるのもちょっと面倒だ。
- pcDuino:
- 玄箱の空冷ファンが(半分)壊れてひどい音が鳴っていたので、
- ファンを買い換える代わりにpcDuinoを買った。---ちなみにファンは1回は交換している。
- 一応全セットアップ終わってサーバー移行した。
- 玄箱よりpcDuinoのほうが体感で8倍くらい速い気がする。sshログインが遅かった。(表示が出てから、プロンプトにくるあいだに5秒くらい掛かっていた。pcDuinoでは、一瞬になった)
- サーバー用と電子工作用で都合2台買っているので、電子工作にも使うつもり。
単体BASICコンピュータ
- PIC32MX220F032B(秋月220円の奴)を使用する予定。
- キーボードはPS/2とUSB共用の小型キーボード(残念ながら日本語キー)を使用する予定。
- PS/2端子の手持ちが無いので(本当はあるけど挿しにくいので)、USB端子でPS/2キーボードを受けるという暴挙に出る。
- 補助記憶どうするか悩み中。カセットは却下。SDカードは(配線が)面倒くさいなぁ・・・。内蔵FLASHでいいや。
- 音は出したい。
単体BASICコンピュータ その2
- いろいろインタプリタを調べ中
C-INT | C/C++のインタプリタ | 解説サイト: http://tachiro2.client.jp/freesoft/freesoft-011.html |
gForth | Forthインタプリタ/コンパイラ | http://www.h7.dion.ne.jp/~samwyn/forth/gforth/Tutorial.html |
OpenBIOS | Forthを互換機BIOSに実装した例 | http://ja.wikipedia.org/wiki/Open_Firmware |
OTCC Obfuscated Tiny C Compiler | おそろしくちいさなC Compiler(600行くらい) | http://www.6809.net/tenk/?%E9%9B%91%E8%A8%98%2F2010-03-09 |
TCC Tiny C Compiler | おそろしく速いC Compiler(gccより9倍くらいコンパイルが速い) | http://shinh.skr.jp/slide/tcc64/004.html |
mruby | 組み込みRubyインタプリタ | mrubyのサイズが激減した件 2012/06 http://mpu.seesaa.net/article/2485599.html |
S-Lang | 組み込み用C+Forth風インタプリタ言語Slang | http://mizotec.s27.xrea.com/slang.html |
Lua | 組み込み用Pascal風インタプリタ言語Lua | http://ja.wikipedia.org/wiki/Lua |
Squirrel | 組み込み用C風インタプリタ言語Squirrel | http://ja.wikipedia.org/wiki/Squirrel |
- BasicインタプリタはBASINT.cがピカイチだったけど、他に良い単体言語(32kに入りそうなやつ)無いんかい!、というわけで、探してみた。
- C-INTはもうすでにフルスペックのC/C++インタプリタで、CERNの中の人がやっている。
- gForthは、あの大昔存在したForth言語のANSIに近い実装。Forthそのものは、商用レベルで出してる会社があった。それはフリーではないようだ。
- OpenFirmwareというBIOS実装の中に割とポータブルなForthの実装が含まれている。
私見として
- Forthは、大昔の実装ならともかく、今のは割と実装が大きい感じ。
- スタックベースで動くところはJava VMっぽいけど、Javaなどが関数引数や自動変数を[SP+n]で普通にアクセスするのに対し、 Forthでは基本Stack Topのほうだけしか見てなくてDupだのDropだの無駄操作が多いし、人間にとってもスタックの何番目というのを意識して書くのは大変だし、popし忘れでバグりやすいし良い事は無い。
- それに言語仕様として記号が読みづらいし、ソース可読性があまりに悪い。
- 逆ポーランドは日本語思考向きだとか言われても全然ピンと来ない。Forthを日本語化したMindとか悪乗り言語があるけど、どうなんだか。(流行らなかった)
その他
- LuaとSquirrelはライバル同士のような感じ。LuaがPascal風でSquirrelはCに近い。mrubyはRuby(サブセット)だがオブジェクトの構造はLuaをまんまパクっているという話。
- S-langはjedテキストエディタのライブラリとして使われている。Emacsで言うところのLispに当たるエディタ内蔵言語。
- S-langは、Cインタプリタに良く似ているけれど、実行環境(VM)はForthに良く似ている。いいとこ取り。
そして残念ながら、この4者(Lua,Squirrel,mruby,Slang)はどれも32kに入れるには程遠い。その10倍〜30倍(1MB)は、いろいろ容量が必要。
そしてOTCC!
- おそろしくちいさなC Compiler(600行くらい)
- これ作った人絶対あたまおかしいとおもたら、やっぱりおかしい人だった。
- スパコンを使わずパソコンでπをウン兆桁だか計算してみたり、QEMU書いたりと、めっちゃ変な人だ。
TCCはOTCCをかなりまともにした(まともな)Cコンパイラで、サイズは丁度、MSDOSのTurbo-Cに近い感じかな。(stripして180kBくらい)
- コンパイル速度はgccに比べて桁違いに速い。(たぶんTurbo-Cより速いのだろう。おそらく)
- バイナリーの実行速度はあまり速くない。(ちゃんとLinuxのelfが吐かれる)
- 処理系そのもののサイズが小さいので、動的にマシンコード吐いて動かす系みたいな変態システムに組み込んでも良い。
- サポートされているCPUはx86,x86_64,ARM,TMS320C67xx
- コードジェネレータ部のソースはえらくあっさりしている(*-gen.c 一本釣り)。たぶん、誰でも自分のオレオレジェネレータが作れるくらいすごい。
で、検討した結果、
- Forthは意外とでかくて、gForthはcode60K,data40K以上ある。OpenBIOSのForthはインタプリタコアは小さいけれど、全体のサイズがちょっとわからない(というか、互換機のBIOSなので、ビルドのやりかた(環境設定)がわからなかった)
- OTCCが一番面白そう。ただし、出力するコードはi386版の超昔linuxでしか動かない。(らしい。一応elf出力版もあるけどi386限定品)
単体BASICコンピュータ その3
Forthについて追加で調べてみた。
:FORTH
amforth Atmel AVR ATmega用
FreeForth (Public Domain i386)
FIGにある、実装のリスト
- http://www.forth.org/software.html
- 小さな実装は、存在することはしている。(ただし大昔のもの)
- 大概はCPU依存性がある。
- ソースは読みづらい。、というか読めない。古文?レ点付けてよ。
なんというか、ある意味シンプルなんだけど、受け入れがたい部分があるな。
- たとえばLispだって、あれはプログラムじゃなくて二進木構造を記述しているだけだし。
- Forthも、ワードを並べてるだけだと言えばそうなんだけど。
世の中には、やっていいことと悪いことがある。
- たぶん。
- これはたぶん、良い子がまねしちゃいけないレベル。(レベル4)
- FR60基板からFR60を引き剥がしたところ。
- まるで、チャーシューを抜いたチャーシュー麺。
- FR60だった基板が、あら不思議、CP2102+3.3Vスイッチングレギュレータ基板に。(ビフォーアフター)
- 親亀小亀。
- これで何をするかだって?--- これは、PIC32MXでUSB-HOSTの実験をする基板だ。
今日のUSB-HOST実験基板
写真略)
- とりあえず、動作OK。
- 動作チェックをしようとして、USB A-Aケーブルを探したけれど、行方不明。
- (A-Aケーブルは、昔買ったUSB-IDE変換入り2.5inchHDDケースに付いて来たやつ:なんとそのHDDケースにはUSB-Aメスが差込口だったのだ。(USB-Bコネだと2.5inchケースの厚さを越えるから。)ミニBが珍しかった頃の奴
- なので、わざわざ壊れたマウスの線を使って、A-Aケーブル作りましたよ。
- USB-HOST実験基板なのに、A-AケーブルでPCに繋ぐと、あら不思議、USB-Deviceになってbootloaderが走る。(PIC32MXではデバイスもホストも同一PINに出てるから)
- UART-bootloaderは書き中。まだ出来てない。3kBに収まるかどうかは、けっこうぎりぎりな感じ。
- 割り込みハンドラーが無駄にでかい。MIPS32だし。おまえレジスタ多すぎる上にARMみたいに1命令で14レジスタPUSHとかできないだろ。>MIPS
壊れたネットブックをばらしてみた。
- 液晶が映らないというか、画面を開く角度があるところだけ一瞬点灯して、あとは真っ暗な闇。
- 開けてびっくり玉手箱。
これも写真略)
- 中身は割りとスカスカだった。
- CPU基板と液晶基板を繋いでいるケーブルは、なんと40pinくらいのリボンケーブルをカッターで5分割くらいに裂いてそれを束ねたような作りだった。(一応シールドっぽいのもので巻いてる)
- 問題は、そのケーブルの一部がヒンジ金具に挟まれて断線した模様だ。
- 同様のケーブルを作れば直せるかも。
- ちょっと手に入らないだろうなぁ。
- 手に入れたとしても、Android4.0はもういいや。
- pcDuinoのubuntuイメージを入れてみたいけれど、入れ方が判らん。
- さすがにブートFlashがmicroSD、なんてことはなかった。(たぶんnand flashの普通のチップが基板に張り付いていた)
これは諦めるしかないかな。
がっかりだぜ
- 思い出したように、去年の円高の頃に買って寝かせておいたマザボ(GIGA-B75)をひっぱりだして換装。
- あれ?電源が入らない。
- 変だな。ケースから外して裸の状態で試しても、やっぱりだめ。
- 元のマザー(H61)に戻すとちゃんと動く。
初期不良だったのかよ。良いマザーなのに。(2枚買ってた。最初の1枚は全然OK)
- 買ったときに全部チェックしとくべきだった。うかつだった。
- 仕方がないから、B85に買い換えるか。
ほんと、がっかりだぜ
今頃になって、Windows8に移行した。
- B85に買い替えるお金がなかった(というか無駄遣いしたくなかった)ので、B75マザーだけ、もう一枚買った。
- これ(GIGABYTE-B75)は良いマザーだと思っていたが、微妙に駄目な点があった。
- それは、電源を切っても、すぐに電源が入ってしまうことだ。
- 最初は電源ボタンのチャタかと思った。
- そうではないらしい。
- 電源を替えると直るのかもしれないが、ためしていない(替え電源がない)
- Windowsをシャットダウンする場合は、大抵の場合は大丈夫だ。(でも、ときどき入りなおすこともある)
- Windows8を使ってて気づいたのだが、電源断するときに、一見消えたように見せかけて、実は次回起動時用の VMメモリーイメージのようなものを全力でHDDに書き込んでからPOWER OFFしてるっぽい。
- そうすると、次回起動がやたら速い。(というかまるでVMWareのレジュームっぽい速さで立ち上がる)
- Windows Updateが入ったり、ハードウェア構成が変化すると、普通に遅い起動をするようだ。
Windows8のシャットダウンがおかしい
- 自分のだけかも知れないし、マザーのせいかもしれない。
現象は
- 電源を切ってもすぐ再起動する。(マザーのせい?)
- BIOS設定ではマウスやキーボードでの電源ONはしないようにしてある。
- OSからシャットダウンすると一応電源が切れたように見える。(?)
- にもかかわらず、どれかキーを押したりマウスクリックすると、電源が入る。
うーん、便利なんだか不便なんだか・・・
- ところが、コマンドラインから
shutdown /s /t 1
- のようにして落とすと、ちゃんと電源が落ちて、キーを押しても再起動したりしない。
- なので上記コマンドラインを1行バッチファイルにしてデスクトップに置き、使い分けている。(なんなんだか)
Windows8の中でWindowsXPを飼ってみた。
- 8だと、まだ少し困ることがあって、VMWarePlayerを使ってWindowsXPを使うことにした。
- 最初は、デュアルブートを考えていたが、Windows8でマウントしたHDDをXPでもマウントしようとすると、HDDが頻繁にchkdiskを実行してしまう。
- どうやら、system volume informationあたりに非互換があるようだ。
- それと、マザー替えたらWindowsXPは起動しなくなった。(とある都合(MBM)により昔のマザーはSATAをIDEモードで使っていたけれど、8にしたマザーは当然AHCIモードで使用している)
- ので、結局Windows on Windowsで行くしかない。
- このあたりは、普通にVMWarePlayerでXPを入れて使うだけ、なんだけど、仮想使って何が便利って、ホストWindowsの好きなディレクトリをゲストWindowsで共有マウント出来ることだ。(VMWarePlayerの機能)
- これだと、仮想HDDのサイズはC:ドライブの起動専用で最小限に切っておいて、作業用のデータドライブはホストWindowsの好きな場所に、いくらでもシェア出来るのでとても便利だ。
実在するWindowsXPをVMWarePlayerの仮想マシンに変換する
- NHCを使います。
- 32bit版のNHC Ver.0 alpha43a 2013/10/27 と、実ハードディスクの変換 REALDEV.NPL 32bit を上記サイトから入手して、同じディレクトリに置きます。
- 管理者権限でNHCを起動すると、実ディスクからvmdkへの変換を実行できます。
- 自分の場合はたったの60GBのSSDからの吸い出しだったので30分程度で済みました。
- すでに、XPの仮想マシンはいくつも作っていたので、適当にどれか一つを選んできて、vmdkのみ差し替えて起動します。(あるいはvmdk以外を新規ディレクトリにコピーしてきてvmdkと合わせます)
- XPのアクティベーションが面倒です。というのは、ネットワークドライバーが正しく動作する状態にないとアクティベーションがそもそもできないからです。
- たまたまネットワークドライバーが認識できる場合はアクティベーションまでたどり着けます。
- セーフモードで起動すると(アクティベーション前でも)とりあえずOSを操作することは可能ですが、出来ることは限られます。
- 仮想マシンでアクティベーションしてしまうとそのWindowsXPを実機上で起動させることはライセンス上できなくなります。(別の機械で動作させることになるので。)
- 最初はVHD形式で吸い出してvmdkに変換する方法を使っていましたが、うまくいきませんでした。
Windows8.1をクリーンインストールしてみた。
- ここを参考に:つ http://philipyip.wordpress.com/download-windows-8-1-iso/
- MSDNに入会しているならISOは簡単に入手出来るけど、そうでない場合は上記方法で3300円のDLキー(使用済でも可)を使って落とす。
- (念のため)日本語版が欲しいときはen-usではなくてja-jpのサイトから落とすこと。
- 上記サイトのGeneric-Keyでインストール。
- slmgr /ipk XXXXX-XXXXX-XXXXX-XXXXX-XXXXX にて、手持ちのDLキーに差し替える。
- もちろん、Windows8を入れてから、ストア経由で8.1upgradeする手もあるけど、二度手間だし、C:ドライブにごみファイルが大量に残るので・・・。
- 一言感想:Windows8.0との違いが全然分からない。(速攻でClassic Shell入れたので。)
ubuntu13.10: デスクトップ版Linuxがどんどん退化している件
- 昔のLinuxデスクトップって、使いやすかったよなー。
- リモートからのsshログインでしか使用しないServer版ubuntuには、特に不満はないが、
- デスクトップ版ubuntuはどんどん退化している(改悪されている、嫌がらせしている)ように見える。
たとえば、だ。
- リリースされたばかりのubuntu13.10をVMWarePlayerでインストールしてみると、
- なぜか日本語キー嫌がらせレイアウトになってしまって|(縦棒)が打てない。
- いや、それどころか、基本的に全角漢字しか入力できなくて、死にそうだ。(Ctrl+SpaceとかAlt+~を押しても戻らない)
- Anthyは腐ってるし、キーレイアウトはおかしいし(設定変更もさせてくれない)、Unutyは相変わらず人を寄せ付けない(速攻でGnomeに戻した)
- まあ、デフォルトインストール状態では使わなければいいだけのこと。自分の好きなWindow Manager入れて、それなりにカスタマイズすればいいだけなんだけれど、
- それって、デフォルト状態でもそれなりにまともに使えるWindows7までの窓OSと比較して、完全にビギナーお断りOSになってないか?(Windows8に近いぞ)
Pinguino-X4-EasyPack-Win32-Rev903-v01-2013-10.7z
- 出てました。
- けど、Rev857からはあまり変わっていません。(32bitのほう)
- (serial*.cのソースが少し変わったのと、zigbeeとcdc_initが変わったくらい)
- PinguinoX4.patchはRev857のものをそのまま使えます。