2014年12月31日水曜日

齧って逃げた子、誰だ〜

だ〜れ〜だ〜。
最近あやち聴いてばっかり。

佐藤さんのFPGAのコミュニティーに顔を出しておきながら、めっきり論理設計してない私。論理設計屋さんからソフト屋さん転職して早4年。そろそろ何か書かないと勘を忘れそうなので、ちょっとリハビリしてみました。

まずは家のリポジトリ漁って、使いまわせそうなやつを集めてGitHubに共通モジュールとして突っ込んでみたのが一週間前。なんかもうISEインストールして、今更なSpartan 3 Starter Kit(しかも無印)で動作確認するだけでぐったりですよ。だって今時パラレルポートとかないですもん。しかもUSB変換器じゃ駄目っていうJTAGお馴染みの問題。さらにUbuntuが新しすぎてドライバがインストールできないとか、おーのー。ここに時間かけるくらいならZynq買ったほうが安上がりだった。玄人志向のPCIとか買ってる場合じゃない!

で、とりあえず最近おなじみ、かつお手軽そうな6502でも実装してみるか、と。とにかく昔のCPUなんで今時のCPUとは違う楽しみがあるかもな、とか思ったわけです。で、いきあたりばったりで一気に書き上げてみたんですが……そうとうなカオスコードになってしまったorz 今にも書き直したい気分だけど、面倒って気持ちの方が大きかった。

このくらいなら手書きでデコード論理組めるだろー、とか甘く見てたんだけど結構ぐちゃぐちゃ。これだったら素直にcase文でパラの線にバラして、論理圧縮は合成ツールに任せたほうがマシだった。
あとやっぱり面倒だったアドレッシングモード。本家のマニュアルにアドレスバスに出てくるパタンが説明されてるので、だいたい中でどう動かしてるのか想像つくんだけど。なんか計算途中のゴミアドレスをバスに流してて気持ち悪い。こんなんでメモリマップドI/Oとかホラー過ぎる。で、資料がある故に厳密に倣って作ってみたんだけど、いろいろとチグハグにならざるを得なかった。やっぱり当時は資源共有して最小限の論理数で作ることに命かけてるんで、そこはあえて同じこだわりで設計してみた。
モジュール間のインターフェースもエンコードするかバラして流すかってのは悩むんですけどね。FFに突っ込むにはエンコードしといた方が資源節約になるけど、CPUの場合せっかくデコードしたのになー、みたいな気持ちもあって。今回は中途半端にエンコードしたままにしたせいで、条件がいろいろ複雑になってしまった。
でもまぁ、マイクロコード以前のCISCがどんな感じで作られてるか体験する良い機会にはなった。

まぁ、来年はApple IIをグラフィック込みで動かすくらいはやるかもです。

あ、ちなみに合成するとXC3S200で論理21%、FF 3%くらいの使用率。もっとFF使っても良いですね。800ロジックセルだから、あてにならないゲート換算で1万ゲートくらい?綺麗に書き直せば500ロジックセルくらいまで減らせないかなぁ。

2014年12月13日土曜日

ARMの上で動くリンゴ印のOSで究極のLチカを楽しむ

ARMは仕事で初めてゲームを作ったコンシューマ機、ゲームボーイアドバンスのCPUという事で、とても思い入れのあるCPUです。ゆんゆんに「ちょっと手伝ってー」と言われて立ち寄ったのが今や泣く子も黙る神移植のM2さん。タイトルはデ・ジ・キャラット。楽曲は憧れの並木学さん。そしてサウンドプログラムを手がけていたのがX68k界でブイブイ言わせてた齊藤彰良さん。当時はお二方ともM2移籍前。僕もワクワクしながら仕事をしていました(最近は大きな仕事に慣れすぎてワクワク感が麻痺してしまってるかも……)。
そんな思い入れのあるARMですが、今やモバイルを中心とした組み込み世界の覇者。AndroidやiPhone向けの高性能プロセッサであると同時に、ホビー向けには個人でも100円程度で手に入るモデルが沢山あります。そこで、せっかくだから久々に何か遊べないかなー……という事で考えたのが……

120円ARMの上でリンゴ印のアイツを動かす!


そう、あれです、あれ。Apple II。
秋月で手に入るLPC1114の性能を見ていてピンと来ませんか?
  • ARM Cortex-M0
  • 50MHz(最大)
  • Flash: 32KB
  • RAM: 4KB
このギリギリ感!ちなみに以前からマイコンだけで古のマシンを再現する企画を続けており
  • CP/Mega88 ... CP/M Z-80 on ATMEGA88 (20MHz, Flash: 8KB, RAM: 1KB) + 外付けSRAM 64K
  • MegaZ-80K ... MZ-80K on ATMEGA644 (20MHz, Flash: 64KB, RAM: 4KB) + ATMEGA328 (20MHz, Flash: 32KB, RAM: 2KB) + TINY2313(20MHz, Flash: 2K, RAM: 128B)
に続く第三弾です。ソースはgithubに置いてありますが全てアセンブリで書かれています。毎回何かしら無駄な挑戦をしているわけですが、今回の見どころは
  1. I/O 4KB、ROM 12KB、RAM 48KBをFlash 32KB、RAM 4KBだけでごまかす
  2. ビデオ出力とキーボード入力をUARTのTX/RXに変換する
  3. 空いてるI/OにGPIOを割り当てて、Apple BASICからLチカ
の3点。

1は単純なローテクで実現。ROMはFlash側に埋め込み、VRAMについては一切記憶しない事でメモリ節約(次節でも説明)。ゼロページやスタック、Apple BASICが本気で使う空間にはRAMをまじめに割り当て、それ以外の領域に関しては全部同じ1-Byteを共有するようにしてあります。主記憶のないキャッシュみたいなもんで、書いて読んで比較……という単純なメモリチェックに対しては正しく動くけど、本当にワークとして触りだしたら動きません。まぁ、初期化コードを騙して、小さいプログラムを動かすには十分。

2は気合。UART入力をキーボードに変えるのは比較的簡単ですが、出力をUARTに変換するのはちょっと大変です。VRAMへの書き込みを見はりつつ、前に書いたアドレスからの差分でカーソル移動を行います。書き込み内容はTXに送るだけでVRAMの実体は実装しません。読まれたら固定値0xFFを返すだけ。スクロール時の画面書き換えは書き込みパタンから自動判別します。読んで1段上のラインに書き込んで……という処理を繰り返すのでアドレスパタンからも判別できるし、本来使われることのない"読み出し値0xFF由来の値"の書き込みを検知する事でも判断できます。スクロール処理中は再描画の書き込みを無視し、スクロール終了を検出したらしれっと改行を送って通常モードに戻ります。

3は特に難しいことはなく。拡張スロット用のI/O空間が開いているので、そこへのアクセスをGPIOにつなげてみました。Apple BASICからはPEEK/POKEで気軽に全メモリ空間へアクセスできるので、これだけでBASICからGPIO制御が可能になります。

という事で簡単なデモ。YouTubeの編集機能使って音とか説明つけてみた。携帯片手に左手でぽちぽち入力した映像なんですが、フラフラしてた画面も手ぶれ補正であっさり安定。



という事で、次はこのプロジェクトを始めた真の目的、佐藤一憲さんにもらったWIZnetを繋げて遊ぶ、というステップに進もうかと。宿題間に合いそうで良かった、良かった。

2014年12月5日金曜日

11月の読書

前回の読書から別のテーマでブログ書いてなかった……良くないですね。それはともかくとして、11月の読書は15冊。今月は読みたいと思った内容の本にうまく巡り会えてないんだけど、タイトルと内容が一致してなくて、予想とは違う観点で面白かった本もチラホラ。

エンターテイメント

「夢をかなえるゾウ」は確かホリエモンが「こんな本が書けちゃう水野さんが憎い」みたいに言ってたので図書館キューに入れた本。半年くらい待ってようやく順番が来た人気の本。いわゆる7つの習慣に集約されるような堅苦しい成長の秘訣を、ゆるーいガネーシャさんを通してじわじわっと脳に染み込ませてくれる。こんな本が書けるんだな、って驚いた。真面目ぶった頭の悪いビジネス書とは正反対のおふざけ優良図書。内容的にはガネーシャさんも言ってる通り、どこでも言われてる話です。

「アンドロイドは〜」の方はタイトルは有名だけど、ブレードランナーの原作だったり、Android Nexusシリーズの元ネタだったりするのは最近知った。そしてブレードランナーって事はスナッチャーだったりサイレントメビウスだったりが持つ世界観、憧れの退廃的近未来都市です。チューリングテストに合格するアンドロイドがボチボチ登場するようになった時代の、アンドロイドとそれを狩る賞金稼ぎの話。前半の世界観の説明は退屈だけど、最初のNexus 6との対峙あたりから止まらなくなってくる。自分がアンドロイドだと知らないアンドロイドとか、ぐっと来る。



視野を広げる

「歴史をつかむ技本」は今月読んだタイトルと内容がずれてる本の1つ。大人向け教科書の流れに乗ろうとして編集が煽ったと想像してるんだけど、ちょっと残念。実際の内容は歴史研究を仕事としている人たちは、どうやって歴史を紐解いているのか。教科書に淡々と書かれた史実は、何を起源にどうやって事実と認められてきたのか、という歴史研究の裏舞台に関する本。その題材として、魏志倭人伝を拠り所にした古代、正史を持つ平安時代、私的な記録も多い戦国時代などを扱っている感じ。一応、歴史の流れというか、普遍的な何かを知りたい、という想定読者の問には答えようとはしているんだけど、オマケっぽさはある。歴史研究について知るにはとても良い本だと思いました。年寄り向けじゃななくて、未来の学者に向けた本として、魅力的なタイトルで売りだして欲しい。

「フラクラル幾何学」はマンデルブロ自らが書いた本が出ているって事で、ちょろっと流し読み。難しいし。物体と観察者の距離によって実効的な次元が違ってくるでしょ?って説明は直感的だった。はじめからコンピュータ使ってCGやシミュレーションと絡めて研究が進んで来たってのも新鮮に思えた。学問って太古の昔からあって、創始者に対するリアルなイメージを持ちにくいんだけど、ここ数十年で誕生した分野の話を聞くとやっぱり不思議な気持ちになる。

「社会契約論」は先月の漫画で読破シリーズの補完としてピックアップ。なのだ調で書かれているけど、女性らしい靭やかでユーモアのある文体になっていて、硬い内容もわりと読みやすく感じる。ルソーが知りたくて読んでみたけど、ルソーの部分は少ないし難しかった。漠然と論説を追うことはできても意図まではなかなか。けど、有名な割には他の思想家に比べて無鉄砲で粗野な印象。一方でホッブズの物体論はちょっと面白い。自然科学の論法をいち早く政治の世界に持ち込んだってことらしいけど。個人を捉える際、精神は物体と同じように個別の反作用の積み重ねによるもので、個々の反応は恐怖などの根源的な感情に基づく反射と、経験・記憶との比較による判断とに分けられる、という解釈。言葉は少し違っても最新の認知心理学の理解するところと一致する。ちょっと哲学に興味が出てきた。

ってところで続けて読んでみたのが「あなたを変える七日間の哲学教室」。タイトルを間違ってしまったもう一冊の本。邦題が中途半端な自己啓発書みたいに変更されちゃってるせいで、正しい読者にリーチできていない印象。原題は「哲学者のように考える - 7日間のガイド」。第一級の現役哲学者による著書。読者と哲学者の対話の形で、哲学が対象とする問題をわかりやすく議論。〇〇学がどうのとか、誰それの考えといった事を体系的に説明する事はなく、哲学全体を説明する上で必要ならば軽く触れる程度。哲学の概念を知る上での取っ掛かりとなる本で、途中で理解につまずく事もないように書かれている。色々な分野で見かける囚人のジレンマ、哲学の視点で見ると、社会契約の話に繋がるってのは読んでいて「おぉ、そうか」と。他の章では神経科学、言語学などとの繋がりも見えてきて学問は色々なところで繋がっているんだな、感心しました。アリストテレス「厳密性を求めるなら、そのことがらにふさわしい程度の厳密性を求めるのがよい。教養のある人は、どのことがらにどの程度の厳密性を求めていいかを知っている」という言葉はこの本の中で気に入った言葉の1つ。普段、計算機を相手にしていると、つい全てが完全でなければいけないという勘違いをしがちなので。自分への戒めとして。さらには過度な品質管理をお家芸として衰退した日本の製造業に対する戒めとして。イヌイットの自立できなくなった両親を流氷と共に流す慣習の話は、本編とは直接関係ないけど、今の少子高齢化社会で行き詰まった日本に生きる者としては刺さる内容。あとがきの自殺についての話もそうだけど、日本はもう少し西洋哲学的な考え方を積極的に取り入れた方が良いのかもしれない。儒教的な道徳観、教育制度との対比として。もともと純粋に哲学的な話に興味があって読み始めたんだけど、最近受けてるグローバル・コミュニケーションの研修での問題と重ねて考える事が多かった。

どうする日本系

危機感持ちつつも自分は安全な場所に逃げこんじゃってて卑怯なんですが。自分なりの考えは持ちたいな、とは思っているのです。ってことで、どんな事を考えてる人がいるのかな、この10年日本は何を失敗したんだろうってテーマで選んでます。この手の本は図書館キューが長いので、思い出した頃になってポツポツと手元に届きます。後者について言えば、自分が「これはもう駄目だ、どうにもならない」って見限って来た物が、世間ではどう判断されてるか。それを確認したいというのも正直なところあります。

で、まずは「日本の論点」から覚えているテーマについて徒然に。
最初の論点はバブル後の日本経済について。ケインズのマクロ経済が一切通用しないグローバル資本主義について軽く触れている。じゃぁ、いったい何が起きてるの?って点については、藤沢数希の「日本人がグローバル資本主義を生き抜くための経済学入門」が詳しかったな、と今になって思えました。同著者の他書は今のところ微妙なんですが、この本だけは良い気がしています。
地方分権問題については橋下は俺が育てた、的な話なんですが。大阪都構想みたいなのは背景を全然知らなかったので中立的に読みました。結局はゼネコン絡みなのかもしれませんが。
憲法については知識の修正が必要になりました。「占領軍が間に合わせで作った英文を無理やり翻訳したから、文章がめちゃくちゃ」みたいな批判をしてるので、あれ?と。たぶん池上さんの本で読んだ気がするんだけど、実は日本国憲法って民間の憲法研究会が提出した案を元にしてるんだよ、って話があって。そっちに理解が振れてたので。調べてみると「参考にした可能性もある」くらいの論調が安全みたいですね。ただ、それは別としても、実質憲法改正が不可能になってる現状は深刻だな、と思いました。
震災を起点とした原発問題。1,000年に一度の大震災を想定してインフラ整備とか馬鹿げている、というのは全くその通りだと思う。公共事業で道路の補強やっても投資になってないし、下手したら投機ですらない。稀な有事にはある程度の被害を受け入れる覚悟が必要かな、と思う。僕ら人類、期待値を計算したら飛行機事故で死ぬ確率よりも巨大隕石落下で人類滅亡に巻き込まれる可能性の方がずっと高いという話もある。わかりやすい災害にコスト割き過ぎなんですね。ただ一方で、そういう事実はあるにしても原発にはまだまだ対費用効果の高い安全対策がたくさんあるはずで。そういう事を考えて実行できれば良いのですが。世間の風当たりは良くないですね。大衆は理屈ではなく感情で動くので。まだまだ人類は野蛮です。
新しいお家芸については、みんなわかっちゃいるけどノーアイデア。バイオ、ナノテク、ロボットみたいなシンギュラリティに繋がるような研究は戦略的に研究してきたはずなんだけど。蓋をあければSTAP細胞事件だったり、外資系企業に買収されたり。宇宙開発とかもっと盛り上がらないかなぁ。

「半導体衰退〜」は元半導体エンジニア、現在コンサルというバックグラウンドを持つ著者による執筆で、技術的にもかなり細かい事が書いてあった。基本的な論調は「日本は垂直統合が強みになったアナログ時代のノウハウは蓄積していたが、主戦場がデジタルに切り替わりその恩恵として分業が可能となって以降、開発体制の切り替えが遅れて競争についていけなくなった」というもの。垂直統合=アナログ、分業=デジタルって切り口は自分にはなかったですね。デジタルでも垂直統合できればそっちのほうが有利だとは思うんですが。そのためには半導体プロセスでも世界一を競えてないと駄目。土台が転んだから上に乗ってる全てがぽしゃったわけで、どちらかと言えば不採算部門をサクッと切れない日本の雇用体制の問題だと思うのです。社内政治的にもそれこそ増税したら解散必至な内閣と一緒で、刺される前に実行、運良く実行できてもいずれ消される、みたいな。
あと現場の雰囲気で言ったら、末端の現場が力を持ちすぎていた事が、寿命を縮めたかな。研究より開発、開発より品証。過去の成功体験に強く縛られた近視眼的な経営判断を続けた結果、技術への正しい投資ができなくなってしまった。現在抱え込んだ技術者を大切にするあまりに、時代の変化に合わせて体制を変えることに二の足を踏んでしまった事が大きい。いずれにしても雇用制度に本質的な問題がありますね。