26-Jul-2010
[何年放置してたのやら。]

ET2003で入手したとされるOAKS8のサンプル版に、fischl.deのR8C Programmiertoolにあるm16c-flash-0.1.tar.gzでOAKS8のサンプルプログラム集に入っていたバイナリを食わせてみました。

OpenBSD向けに手を加える部分がありましたが…OpenBSD特有というよりも、単にフロー制御周りをごにょごにょしただけという気がしなくもないです。

それにしても、新規採用は受け付けしません、という石を今更いじるのも正直どうなんでしょうか…トラ技付録のR8C/15基板も手元にあるはずですが、あれも同様に死亡フラグが立っていますし(まだ死んでいないけど)。

最近はR8C/2x系が主流のようですが、m16c-flashはこれに対応していないという話を見ると、どうしたもんかねと。消去するページを適切に追加すれば動くのかねと。ちょっとの手間で対応できるなら実験してみたいけど、ボード買う金ないし。

H8/Tinyも似たようなもんで、メンテしてH8/36064へ対応できるようにした方が良いんじゃねーのと常日頃思っているものの…h8writeがH8/3664に送りつけるコードの羅列の解読が全然進んでいませんというか絶賛放置中。

24-Jul-2010: 朝:寝てた。昼:妻にお任せ(そうめん)。夕:カレーライス。

25-Jul-2010: 朝:寝てた。昼:トースト。夕:白飯、刺身、生野菜。

26-Jul-2010: 朝昼:いつもの。夕:白飯、ゴーヤと豚肉の炒め物、納豆。58.2kg(23:25)

23-Jul-2010
[Video-BIOSって使えるよねと呟いちゃったので(4)]

この一連の話はここでおしまいにします。

コード(プログラム)とデータの見分け方ですが、実際にコードをアセンブルして、バイナリダンプしてみれば一目瞭然だと思います。真面目にコードを書くのも大変ですし、それを見せられる方も大変ですから…まずは「ありがち」なパターンを一つだけ。

1.png

x86の場合はRET/PUSH命令の辺りが結構特徴的なので、この部分に着目すると比較的見分けやすいのではないかと思われます。上の例では文字コードの都合でRET命令に対応する文字が見えていませんが、バイナリをemacsに食わせてShift-JIS扱いにするとこんな感じ。

1.png

Video-BIOSって使えるよねと呟いちゃったので(2)で触れたこの辺りはプログラムの一部分でしょうか?というのは、この辺りを見て判断しています。

1.png

今回の説明は、バイナリデータをテキストエディタに食わせる話を多めにしています。しかし実際はこれをバイナリダンプで、16進数の羅列(親切なものであれば脇にASCIIダンプが付くこともあります)から判断することになります。

最終的には、こんな感じのダンプを渡されてもうろたえないようになれば良いのではないでしょうか(内容が分かればベストですが、分からなくても一般生活では困りませんし)。このダンプは今まで説明した、データやコードとは異なるジャンルの物になりますが…分からないなら分からないなりに流してしまうのも一つの手です。

ただし、少しでもピンとくる部分があったら徹底的に調べてみてください。ヒントはPC/AT機の中にあります。

21-Jul-2010: 朝昼:いつもの。夕:白飯、茹でた野菜と鶏肉、納豆。

22-Jul-2010: 朝昼:いつもの。夕:白飯、刺身、茹でた野菜、冷奴。

23-Jul-2010: 朝昼:いつもの。夕:とりいちの弁当。59.5kg(23:05)

20-Jul-2010
[おやすみ。]

次回以降もお休みの可能性が高そうですが。何しろ暑くて困ります。マジ倒れそう。

食事メモ他も省略です。58.5kg(22:55)

16-Jul-2010
[Video-BIOSって使えるよねと呟いちゃったので(3)]

今回は解説無しの予定でした。この話が何を目指すか、ということで

1.png

この日記を見ている人であればお馴染みの「いつものアレ」で済ませようと思っていたのですが。

今回は書体を吸い出すことではなく、16進数の羅列からどんな性格のデータが並んでいるかの見当を付ける練習をすることが目的です。

練習素材としてVideo-BIOSを使用した理由は、以下の三つです。

説明を書くのはあまり得意ではないのでできれば書かずに済ませたいですし、下手な説明を書くと逆に混乱を招くだけですからやっぱり書かずに済ませたいのです。

本当はここで切り上げたかったのですが…続けますかね。

とりあえず8×8ドットのフォント、アルファベットのA辺りからいってみましょうか。8個の16進数の値が並んでいますね。

2.png

16進数の羅列を脳内でグリフ(文字)に復元する必要はありませんが、16進数←→2進数の相互変換は表を見なくてもできるようにしてください。

3.png

横方向の線は0xfcといった'1'のビットが連続するデータを使用し、縦方向の線は同じデータを繰り返すことで実現していることに注目してください。また、PC/ATのフォントはボールドがかかっているため、0x30や0xccといった、2bit分が連続して'1'となっているデータが多いです。

まずは純粋にデータ列を見てほしいので、(かなりやっつけですが)データだけ表示させた画像を用意してみます。

4.png

とにかくデータの癖を掴むこと、に尽きます。

※2枚目と4枚目の画像は、blueMSX上で動作させたSUPER-X(Romi氏作)を使用しています。

15-Jul-2010: 朝昼:いつもの。夕:茹でた野菜、炒めた加工肉。

16-Jul-2010: 朝昼:いつもの。夕:蕎麦と冷奴。59.5kg(23:40)

14-Jul-2010
[Video-BIOSって使えるよねと呟いちゃったので(2)]

多分誰も得しない話だけど、続けます。

その前に、おことわり。昨日の日記ではdebug.exeを使ってVideo-BIOSのROMイメージを吸い出すとありますが、著作権の都合上、今回以降の説明ではQEMUに入っているvgabios.binを使います。

既に吸い出し済みの(しかもエミュレータ用の)ROMイメージよりも、実際に動いている実機から吸い出したものを見た方がなんとなく実感が湧くんじゃないかなとは思いますが、どちらを使うかはお任せします。

…今回はかなり手抜きです。多分次回以降も手を抜きます。だって書けるような内容あんまりないし。

吸い出したbios.bin(もしくはvgabios.bin)を、おもむろにメモ帳に食わせます。ドラッグ&ドロップで放り込んじゃってください。

なんだかぐちゃぐちゃな画面が出ましたが、メッセージが埋もれていますね。

1.png

同じ文字が連続していることから、何かのデータが連続しているような雰囲気です。

2.png

この辺りはプログラムの一部分でしょうか?(判断するための根拠はそのうち説明します)

3.png

正直な話、こんな文字の羅列は自分でもよく分かりません。真面目に読んでも疲れるだけです。ですので、まずは読むのではなく眺めるところから始めて下さい。モニタから離れてぼーっと見る手もあります。

何度もスクロールして眺めているうちに、この辺が規則的とか、この辺りはぐちゃぐちゃ加減が違うとか、「何かが違う」という感覚が掴めるはずです。まずはとにかく眺めること、これがバイナリリーディングの一歩なんじゃないかなと考えます。

※感覚の問題なので、理解しようと思っちゃダメです。

今回はメモ帳を使って文字という形でバイナリデータを表示させましたが、今後は適当なバイナリエディタ等を用意して16進数の羅列で表示させることになります。あと、説明の都合上PC-UNIXのツールも遠慮なく使っていきますので、Windowsをお使いの方は対応するツールを各自で探して下さい(ごめんなさい)。

朝昼:いつもの。夕:蕎麦、挽肉とモヤシの炒め物(味付に失敗)。59.4kg(22:00)

13-Jul-2010
[Video-BIOSって使えるよねと呟いちゃったので]

WindowsXP上からdebug.exeを使って吸い出す方法を、丁寧と見せかけて手抜きで説明。あの時代を知っている人から、いちいちそんな説明はするなとお叱りを受けそうなんだけど。

Vistaとか7でもdebug.exeが入っていればできるような気がしますが、64bit版ではどうなのでしょう。持っていないので分かりません(多分ダメな気がします)。

コマンドプロンプトを開いて、迷わずにdebug。

2.png

無機質なプロンプトとカーソルがお出迎え。

3.png

d c000:0000でVideo-BIOSの所在とおおよそのサイズを把握。

5.png

n bios.bin→r cs→c000→r cx→ffff→w 0→qで保存。

6.png

dir bios.binで保存したファイルのサイズを確認。

7.png

debug.exe実行中は?でヘルプが見られますが、多分ぐぐった方が早くて確実です。

4.png

…得られたバイナリをどう読んでみるか、という話は書けたら後日。

14-Jul-2010補足:吸い出したバイナリデータの取り扱いには注意が必要です。一応著作物なので、不特定多数へばら撒くなどの行為はしないように。

朝昼:いつもの。夕:妻にお任せ(白飯、刺身、味噌汁)。59.6kg(21:10)

12-Jul-2010
[食事メモだけ]

10-Jul-2010: 朝:寝てた。昼:パンとピザ。夕:橋本で飲み会。

11-Jul-2010: 朝:妻が作ったスパゲティ。昼:食べてない。夕:白飯、豆腐、水餃子。

12-Jul-2010: 朝昼:いつもの。夕:白飯、納豆、茹でた豚肉と茹でた野菜。

20-Aug-2003に購入したCROSS 3200ですが、空気を入れすぎてしまったのか、前のタイヤがチューブごと破裂してしまいました。タイヤをそろそろ変えるかなあと思っていたところではありますが、本体もガタが来ていることを考えると買い換えかなあと。

とりあえず、価格の面からCROSS3が次の候補。CROSS3200のギア(14-28T)では物足りないので、CROSS3の12-32Tに変わることで少しは改善すると良いんだけど…どうなることやら。

速度重視ならESCAPEという手もあるけど、乗り方が荒いとすぐ壊れそうなので遠慮しておきます。

RGB121ってどーなんでしょ、ということで試しに作ってみたんですが…WAPのカラーパレットにある16色を使った方が良いような気がしなくもなく。

method #5

生成用のコードで使用している、パレットの補間方法に問題がある可能性もあるかもしれません、とは書いておきます。59.0kg(23:05)

09-Jul-2010
[RGB332→RGB888の変換を試してみたかったんだ(2)]

V993(5)8の発色傾向に興味深い話がありました。世の中的には青の階調はSCREEN5で 表現するところの(0,2.4,7)だと言う事になっています(原文ママ)ということなので、昨日作ったテスト用のコードに手を入れて、サンプル#3, #4を作ってみました。

method #3 method #4

比較用に、昨日のサンプル#0, #1, #2も再度載せときます。

method #0 method #1 method #2

問題となる点は二つ。一つは青の処理で(赤緑と比べると1bit足りない)、もう一つは不足する5bitないし6bitの補完。カラクリはこんな感じなのですが、下手な日本語の説明を読むよりも、C言語のコードを見た方が早くて正確です。

自分の目にはサンプル#2と#5の違いは全く分かりません。一応MD5の値が全て異なっているから全部違う画像なんだろうとは思うのですけど…

WAPのカラーパレットに記されている値を見る限り、WAPではサンプル#1そのまんまって感じです。こうでしょうかね。

  1. 000 → 00000000 (0x00)
  2. 001 → 00100100 (0x24)
  3. 010 → 01001001 (0x49)
  4. 011 → 01101101 (0x6d)
  5. 100 → 10010010 (0x92)
  6. 101 → 10110110 (0xb6)
  7. 110 → 11011011 (0xdb)
  8. 111 → 11111111 (0xff)
  1. 00 → 00000000 (0x00)
  2. 01 → 01010101 (0x55)
  3. 10 → 10101010 (0xaa)
  4. 11 → 11111111 (0xff)

普通にRGB332→RGB888のパレットを用意するなら、これで良いのだと思います。難しいことを考えずに生成できますし。

おまけ。

TMS9918Aに針路をとれを見て、長年の疑問が氷解しました。MSXマガジンに載っているスクリーンショットで、MSX BASICの標準色(COLOR 15,4,7を実行した時の色です)が何故かCF-3000よりも青いのが気になっておりまして。

BlueMSXのキャプチャ画面を左側、TMS9918風のパレット(MSX1再現パレット)でざっくり置き換えてみたものを右側にすると、こんな感じ。

Bluemsx MSX1(emulated)

実はあの頃、左側の方が安っぽい色に見えていました。CF-3000はTMS9928A搭載なので、どちらかと言えばBlueMSXの発色(本来あるべき色)に近いはずなのに。

朝昼:いつもの。夕:白飯、生ハンバーグを焼いたもの、茹でた野菜。59.8kg(22:50)

08-Jul-2010
[RGB332→RGB888の変換を試してみたかったんだ]

試してみたかったんだ、というよりこの手のパレットが必要な場面に実際に遭遇しておりまして。

method #0 method #1 method #2

画像生成用のコードはコレ。左から順に#0, #1, #2で。PNGとかを直接生成できる技量は無いので、ImageMagickで解釈できるテキスト形式で吐き出していたり。

…さて、どれが一番元の色に近いのでしょうか。

07-Jul-2010: 朝昼:いつもの。夕:白飯、スーパーで買った惣菜。

08-Jul-2010: 朝昼:いつもの。夕:白飯、炒めたモヤシ、焼いた魚肉。59.2kg(23:00)

06-Jul-2010
[Twitterは基本的に]

黒い(ネガティブな)話が多いですというかそれしか無いというか。その分こっちは白い気もしますが…どっちも黒いとげふんげf

…とりあえず勢いに任せて呟いたネタではあるんですが、流しちゃうのも勿体無いので再利用してみます。

むー、手打ちHTMLでこういうのを引用+リンク張りは流石に辛い。腱鞘炎が痛むと尚更。

ヤいてる暇があるなら一行でも多くコードを書き、一ページでも多くデータシートを読んだ方が良いんだけどね。

05-Jun-2010: 朝昼:いつもの。夕:白飯、茹でた野菜と茹でた鶏肉。

06-Jun-2010: 朝昼:いつもの。夕:白飯、ベーコンとキャベツの炒め物、スーパーで買ったサラダ。58.8kg(22:50)

04-Jul-2010
[うーん…]

アート作品「バッタもん」 ヴィトン社抗議で展示中止のニュースを見て、図書館戦争(正確には図書館危機)の茨城県展警備の話を思い出しました。

製品に自信があるなら、作品に対していちいちケチを付けないと思います。むしろ、この行動は逆効果でしょうね…「その程度のメーカーならそのバッグを持っている人間もその程度」と思わざるを得ません。

美術館の対応も、問題です。色々書いても疲れるだけなのですが、「言論の自由を彼等は守らない」という範を示したことは、責めておきます。彼等にそのような義務が無いと言われるかもしれませんけど。

久々に、缶を撮ってみました。レンズはFUJINON 50mm/F2.2。今回は同じものをFlickrにも上げているので、写真のリンク先はそちらに張ってます。

imgp6538.jpg

02-Jul-2010: 朝昼:いつもの。夕:白飯、ゴーヤと豚肉の炒め物。

03-Jul-2010: 朝:寝てた。昼:パンなど。夕:鼎盛園(ていせいえん)。メニュー変わってました。

04-Jul-2010: 朝:インスタントラーメンとパン。昼:特に食べていない。夕:焼きそば。58.8kg(22:35)

01-Jul-2010
[KOZOS/LPC2388(alpha)]

「12ステップで作る 組込みOS自作入門」のソースコード(osbook_03.zip)にモトローラSレコードフォーマット対応を加えたものを、Interface誌2009年5月号付録のCPU基板(CQ-FRK-NXP-ARM)へ移植してみました。LPC2388内蔵クロック/デバイスのみ使用しているため、他のLPC2388搭載ボードでも動くはずです。

KOZOS作者の坂井さんのチェックが済み次第、坂井さんのweb pageに移る予定(だと思うの)ですが…それまでの間、ソースコード一式をここで公開します→kozos-lpc2388-20100701.tar.gz

下手な使用方法を書くよりも、16-May-201020-Jun-2010のスクリーンショットをもう一度見てもらう方が早いので、そうします。

20100516.png

20100620.png

途中でrootに化けている箇所がありますが、こうしないと何故かXMODEM(lrzsz)が動かないという理由によるものです。パーミッションの設定をきちんと行えばこんなことをする必要は無いはずなので、この部分は悪い見本として捉えてください。

gcc-4.2.4, binutils-2.19.1, newlib-1.17.0に加え、LPC2388書き込み用にlpc21ispSRecordを使用しました。OSはOpenBSD-4.7/amd64ですが、ここに挙げた各種ツールが動けばお好きなものでも良いはずです。XMODEMの使用できる通信ソフト(シリアルコンソール)もお忘れなく。

GCC類の構築は、今回はARM命令しか使っていないので28-Feb-2009辺りにある方法で十分なはずです…interworkingを有効にしてARM/Thumb両対応の環境を構築する方が後々便利なのと、細かいことは他所のサイトを見た方が確実な情報が得られるとは書いておきます。

コンパイル済みのバイナリはアーカイヴのbin/以下に入れていますので、開発環境の構築は面倒なんだけど手っ取り早く試してみたいという方はそちらを使ってください。

H8/3069版ではOS本体(kozos.elf)を生のELFバイナリで流し込むのに対し、LPC2388版では何故かバイナリサイズが大きくなってしまってどうにもならないという理由により、モトローラSフォーマットに変換したもの(kozos.mot)を流し込むようになっています。また、シリアルポートの通信速度は38400bpsにしています。

質問はお気軽にどうぞ。ただし、OS本体に関しては坂井さんに聞いた方が早いです(自分は機種依存部分をいじっただけなので)。

30-Jun-2010: 朝昼:いつもの。夕:スーパーで買ったビビンバを使って、チャーハン。

01-Jul-2010: 朝昼:いつもの。夕:とりいちの弁当。59.1kg(22:50)

11-Oct-2017補足:KOZOS起動後、command>のプロンプトでenterキーを押したままにするといつかは必ず動作が止まってしまう問題を修正しました。SVCモードに切り替えた際にスタックポインタの初期化を忘れており、これによってスタックを食いつぶしていたのが原因です。→kozos-lpc2388-20171011.tar.gz