(注意)このブログは本家のほうの文章部分のみの転載です.ソースコードの配布,画像などについては本家のほうを参照してください.文章中のリンク先は面倒なのですべて本家のほうに変換してしまっているのでご注意ください.

前回でシリアル送受信ができるようになったのだけど,次はシリアル経由でのファイル転送ができるようにしたい.で,ファイル転送用の独自プロトコルを作るか適当な既存のプロトコルを実装するかだが,まあ独自プロトコルにしてしまうと送信アプリを書く必要が出てきてしまい,さらにその送信用アプリをLinuxでコンパイルして使うにはとかWindowsから使うにはどうすればいいかとかいった話になってしまって,それはそれでとっつきづらいと思うので,適当な既存のプロトコルを実装することにする.

で,プロトコルなのだけど,XMODEMというのが簡単そうなのでそれにしよう.まあXMODEMならLinuxとかWindowsとかでもいっぱい送信用アプリがあるだろうし.(WindowsならたぶんTeraTermでファイル転送できるだろうと思う)

ちなみにXMODEMにはファイルの終端が Ctrl-Z で終ってしまっている場合にそれを検出できないという問題があるようだが,実行形式ファイルのお尻がわからないだけで,実行形式ファイルの展開という意味ではとくに問題は無い.(実行形式は内部に独自にヘッダ情報を持っていて,それを見てメモリ上に別途展開するので,終端に余計なものが付いていても別に問題ない)

XMODEMについては,以下が参考になる.他にも改良版のYMODEMとかZMODEMとかあるらしいが,まあ転送するファイルのサイズもそれほど大きくはならないだろうから転送効率とかあんまし考えなくていいし,エラー時再送とかきちんとしなくても(信頼性が低くても)もう一度やりなおすだけだし,とりあえず実装が一番楽そうなXMODEMを実装する.

で,上のホームページを見て実装したのがこんなかんじ.

xmodem.c というファイルを追加してあってその中でファイル受信しているのだけど,xmodem.c はなんとたったの89行.うーん,簡単なプロトコルなので楽でいいのう.ちなみにファイルの転送先なのだけど,とりあえず loadbuf[] というバッファを適当なサイズで定義して,そこにそのままコピーするようにしてある.まあ対して難しいプログラムではないので,詳しくはソースを見てちょうだい.(現状,Cファイルとヘッダファイルだけで400行程度なので,十分に読み切れると思う)

あと細かいところをいろいろ修正してある.
  • H8の書籍とかちゃんと読んで,シリアルの送受信処理を見直し.とくに受信時にSSRのRDRFを落とす処理を追加.(これをやっていなかったので,連続して受信したときに読み出しデータがおかしなことになっていた)
  • リンカスクリプトを,もうちょっと修正.(MEMORYコマンドにより,ROM領域とRAM領域を明示的に定義するようにした.これにより,ROMやRAMのサイズ不足で溢れたときにはリンカがエラーにしてくれるようになる)
  • XMODEMでファイル受信するコマンドとして,loadコマンドを追加.あと受信したファイルの内容チェックのために dump コマンドを追加.
  • ライブラリ関数とかをこまごまと修正.
で,ビルドしてフラッシュROMに焼いて実行してみる.フラッシュROMへの転送のしかたは第1回を参照.

ちなみにフラッシュROMへの転送なのだけど,以下の手順で電源のOFF/ON無しでできるようだ.
  • フラッシュROMへの書き込み
    1. ディップスイッチを左からON,ON,OFF,ONにする.
    2. cuで接続している場合は,抜ける.(これをやらないとh8writeが動作できない)
    3. リセットボタンを押す.(電源OFF/ONは不要)
    4. h8writeで書き込む.
  • 書き込んだプログラムの起動
    1. ディップスイッチを左からON,OFF,ON,OFFにする.
    2. cuで接続する.
    3. リセットボタンを押す.(電源OFF/ONは不要)
    4. 実行が開始される.
上のような感じで,ディップスイッチを切替えてリセットボタンを押すだけで,電源のOFF/ON無しでフラッシュへの書き込みとプログラムの実行を繰り返すことができる.

で,以下,実行結果.

teapot# cu -l /dev/cuad0
Connected
Hello World!
>

cuでつないでからリセットボタンを押して起動すると,まず Hello World が表示される.

ここでXMODEMでのファイル受信用の「load」コマンドを実行する.

> load

コマンド実行すると,XMODEMでの受信待ちに入る.

で,FreeBSD側からのXMODEMでのファイル転送なのだけど,PowerPCのときも使った「lrzsz」を使う.インストールされていない場合はまずインストールする.(FreeBSDでは packages になっているので,パッケージインストールできます)

で,ファイル転送なのだけど,cuは「~C」を入力することで別コマンドを fork してその入出力を繋げることができるので,その機能を利用して lrzsz にXMODEMプロトコルをしゃべってもらってファイル転送する.まあ手っ取り早く言うと,loadコマンド実行後に,まず「~」「C」のようにキーボードから入力する.

> load
~CLocal command?

「Local command?」のように実行するコマンドを聞いてくる.lrzszでは,「lsx」というコマンドがXMODEMのためのコマンドなので,lsxを指定する.さらに,送信するファイルを引数として指定する.ここでは a.txt という適当なテキストファイルを作成して指定してみる.

> load
~CLocal command? lsx a.txt

ちなみにa.txtの内容は以下の通り.ほんとてきとう.

abcdefg
hijklmn

これで Enter を押すと,ファイル転送が開始される.

> load
~CLocal command? lsx a.txt
Sending a, 0 blocks: Give your local XMODEM receive command now.
Bytes Sent: 128 BPS:142

Transfer complete
eceive succeeded.

ちなみにWindowsとかだとXMODEMでファイル転送するためのアプリがきっといっぱいあるだろうから,それを使えばいいだろう.その場合,転送プロトコルは「XMODEM」で,転送ブロックサイズは128バイト,チェックサムは1バイト(8ビット)の単なる加算のもの(CRCチェックサムではない)を指定する.正式には「XMODEM/SUM」というらしい.(「XMODEM/CRC」とか「XMODEM/1k」だとダメなので注意)

ファイルが転送できたら,dumpコマンドでファイルの内容を確認してみる.

> dump
size: 128
61 62 63 64 65 66 67 0a 68 69 6a 6b 6c 6d 6e 0a
1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a
1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a
1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a
1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a
1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a
1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a
1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a

>

a.txtの内容がばっちり書き込まれている.(128バイト単位で,お尻はCtrl-Zで埋められる)

今回は実は最初はぜんぜんうまく動作しなかったのだけど,シリアルの受信処理に問題があっておかしなデータが受信されていたのが原因で,そこを直したらXMODEMの処理自体はあっさりと動いた.うーん楽でいいねえ.

これでシリアルからのコマンドを受け付けて,XMODEMでファイル転送できるようになった.なんかモニタっぽくなってきたね.次は実際にプログラムを転送して,動作できるようにしたい.オブジェクトファイルフォーマットを何にしようかなあ...やっぱしELFかなあ...
(注意)このブログは本家のほうの文章部分のみの転載です.ソースコードの配布,画像などについては本家のほうを参照してください.文章中のリンク先は面倒なのですべて本家のほうに変換してしまっているのでご注意ください.

前回はシリアル送信で hello world が出せたので,今回はブートローダーを自作する準備として,シリアルの送受信をやってみる.というのは,今回自作するブートローダーは,シリアル経由でOSの実行形式ファイルをダウンロードしてRAM上に展開して実行,という動作にするつもりなので,シリアル経由での操作が必須になるからだ.

まあ前回作成したソースコードで,シリアル受信の関数 serial_getc() がすでに作ってあるので,main.c をちょいちょいと適当に修正して,起動したらプロンプトを出して文字列が入力されたらそれをそのまま返すようなプログラムにしてみた.以下のような感じ.

で,ビルドしてフラッシュROMに焼いて実行してみる.フラッシュROMへの転送のしかたは前回を参照.

teapot# cu -l /dev/cuad0
Connected
Hello World!
> test
test
> sample
sample
> test
test
>

うーん,あっさり動いた.

とりあえずこれでシリアルの送受信はできるようになったので,いよいよブートローダー作成なのだけど,何点か決めなきゃならんことがある.

まず,ブートローダーは起動したらプロンプトを出して,入力されたコマンドに応じて動作するというような動作にするつもり.で,コマンドには「シリアル転送でプログラムの実行形式をダウンロード」とか,「ほげほげ番地にダウンロードしたプログラムを実行」みたいなのを作る.つまりコマンドベースで動作して,プログラムのダウンロードや実行を行えるようにする.ちなみにこーいうのを一般的に「モニタ」とか言ったりする.

で,決めなきゃならんのは,シリアル経由でのプログラムのダウンロード方法だ.世の中にはシリアル経由でファイル転送するためのXMODEMとかYMODEMとかいう方式がいくつかあるのだけど,
  • (案1)XMODEMあたりをてきとうに実装する.
    • 長所...世の中になるXMODEMに対応したファイル転送アプリを使って転送できる.
    • 短所...とくになし.
  • (案2)てきとうな独自プロトコルを作って実装する.
    • 長所...好きにプロトコルを作れるので,どうにでもなる.
    • 短所...ファイル転送アプリを自作する必要あり.
うーんどうしようかなあ.

あと,転送するプログラムはブートローダーがRAM上に展開するのだけど,これも実行形式ファイルのフォーマットを何にするか決めておかないといけない.実行形式ファイルはELF形式とかモトローラのSレコード形式とかCOFF形式とかあるけど,そーいう一般的な形式にするか,それともオリジナル形式にしてしまうか.

うーん悩みどころだ.
(注意)このブログは本家のほうの文章部分のみの転載です.ソースコードの配布,画像などについては本家のほうを参照してください.文章中のリンク先は面倒なのですべて本家のほうに変換してしまっているのでご注意ください.

ここのところOSC関西OSC名古屋に出展したが,やっぱし実機で動いているとインパクトあるので,ボードコンピュータへの移植を進めたいなあと思っていたのだがちょっと時間がとれたので進めてみた.ようやく第一段階にたどりついた感じ.

まずはターゲットボードの選定なのだけど,いろいろ探したのだけど,秋月電子H8/3069Fネット対応マイコンLANボード(完成品)というのに決めた.理由は以下.
  • なんといっても安い.(完成品だと3750円,キットだと3400円.これなら中学生や高校生でも買える)
  • 完成品の形で売っていて,シリアルコネクタが実装済みなので,そのまま使える(半田づけが完全に不要).(もちろん,キットで買って自分で組み立てれば安く済む)
  • フラッシュ書き換え回路が実装されているので,ROMライタなどを使わずにシリアル経由でフラッシュROMを書き換えられる.(フラッシュをとばしても安心)
  • H8は巷に書籍や資料がたくさんある.日本語資料も豊富.(これは,中学生にはとても嬉しいはずだ.英語資料だと中学英語の知識で読めるかどうか微妙なので)
  • 内蔵ROM,内蔵RAMの容量がそれなりにある(ROM512KB,RAM16KB).H8/3048だとRAMが4KBでいろいろやるにはちょっと不安.
ちなみに電源アダプタは別売りなので,5Vのやつを一緒に買う必要があります.これは秋葉原の秋月の店舗で買うなら,適当なのを一緒に買いましょう.

買ってから気がついたのだけど,付属のCD-ROMにフラッシュROM書き換えソフトがついているのだけど,これがCのソースで配布されていて,FreeBSDでもあっさりコンパイルできて動作した.なのでWindowsに頼らずに,完全にFreeBSD上で開発ができます(これはぼくにはとても嬉しい).

ちなみに秋月でもうひとつ,SH2の似たようなボードがあってそっちも候補だったのだけど,フラッシュROM書き換えソフトがWindows用なのでそれを使わないとならない.まあブートローダーだけ焼いてしまえばあとはOS開発では使うことはないのだけど,ちょっとイマイチではある.(実はそのSH2のボードも一緒に買ったのだけど,最終的に上記の理由が決定打になってH8ボードをターゲットに決めた)

で,まずはクロスビルド環境の作成なのだけど,まあこれは付属のCD-ROMにtoolchainが一式が入っているのだけど,当然ながらWindows用かLinux用になってしまう.やっぱしFreeBSD上で開発したいし,まあクロスコンパイラくらい自分で用意したいというのもあるので,いつもどおりbinutils+gccの組合せで,クロスビルド環境を構築する.

OSの起動には,ブートローダーをどこかから持ってきて動かして,OSはシリアル経由でダウンロードして動かす,という構成が開発には都合がいい.ブートローダーなのだけど,eCos付属のRedBootというのがH8に対応しているらしい.

ということで当初はRedBootを移植する予定だったのだけど,まあ結論から言っちゃうとRedBootは使わずに自前でブートローダーを作成することにしました.

なぜかというと,RedBootってC++で書いてある部分があるのでC++のクロスコンパイラが必要になる.しかしgccのクロスコンパイラ作成時にc++有効にすると,ライブラリがなんか必要になってしまうようで,newlib入れたりとかいろいろ試したのだけどうまくクロスコンパイラが作れなかったのよ.c++を外すと簡単にコンパイラが作れるのだが.

で,たとえこれでなんとかc++のクロスコンパイラを用意したところで,この文書を読んで試すひとが同じようにはまったりしてもつまらないし,なんかクロスコンパイラ作成にひと苦労ってものなんだかな~って気がするし,組み込みOS作るならブートローダーくらい自作しても面白いんじゃないかと思う(OSの動作だけでなく,ブートストラップの勉強にもなる)ので,自作してみることにしました.ちょうどCQ出版からブートローダーの本が出たことだし.(CQは,相変わらず良い本を出すね!みんな買いましょう!)

で,話がそれたけど,まずはクロスビルド環境の構築なのだけど,H8用のクロスのbinutilsとgccは以下で構築できた.ちなみに環境はFreeBSD-6.2ね.

■ binutils-2.19 をインストール

% ./configure --target=h8300-elf --prefix=/usr/local --disable-nls
% gmake

# gmake install



■ gcc-3.4.6 をインストール

% cd gcc-3.4.6
% setenv SHELL /usr/local/bin/bash (シェルがbash以外の場合)
% ./configure --target=h8300-elf --prefix=/usr/local --disable-nls --disable-threads --disable-shared --enable-languages=c
% gmake

# setenv SHELL /usr/local/bin/bash
# gmake install

あとフラッシュROM書き換え用のアプリなのだけど,h8write というのがCD-ROMに付属しているのだけど,これはネット上のOpen SH/H8 writerで配布されていて,しかもFreeBSDでも動くらしい.なのでいちおうネットのほうから最新版を持ってきて,以下の修正をしてビルドした.

% gcc h8write.c -o h8write

これであっさりビルド完了.

--- h8write.c~ Mon Aug 24 13:45:33 2009
+++ h8write.c Mon Aug 24 13:45:52 2009
@@ -1,6 +1,6 @@
-#define LINUX
+#undef LINUX
#undef Solaris
-#undef FreeBSD
+#define FreeBSD
#undef Win32
/*******************************************/
/* EEPROM write program to H8/300H */
@@ -42,7 +42,7 @@
#define RSLINE "/dev/ttyS0"
#endif
#ifdef FreeBSD
- #define RSLINE "/dev/cuaa0"
+ #define RSLINE "/dev/cuad0"
#endif
#ifdef Solaris
#define RSLINE "/dev/cua/b"

#define でプラットホームを指定しているけど,結局はシリアルデバイスをOSごとに指定しているだけだったりする.ちなみにFreeBSDではFreeBSD-4.x系は /dev/cuaaXだけど,FreeBSD-6.x 系は /dev/cuadX になるので注意.(でも実行時にデバイス指定できるみたいなので,そうして使うならこの修正もいらないかも)

これで,ビルド環境はそろった.あとは以下あたりを参考にして,てきとうにサンプルプログラムを書いてフラッシュに焼いて動作させてみる.上の「H8マイコンLANボードではじめる...」のほうに hello world のサンプル(h8_sci_rom.lzh)があるので, make.sh とか作ってとりあえずそれを動かしてみたらあっさり動いた.ただし上記サンプルでは,スタートアップでスタックポインタの設定がされていないので,ちょっと不気味ではある.(設定忘れだと思う)

ちなみにフラッシュへの焼き込みだけど,以下のようにする.
  1. プログラムのビルドに成功するとELF形式の実行形式が作成される.これをobjcopy を使ってモトローラSフォーマットに変換する.以下のような感じ.

    objcopy -O srec sample.elf sample.mot

  2. シリアルのストレートケーブル(シリアル延長ケーブル)でPCとボードを接続する.(クロスケーブルは不要)
  3. ディップスイッチを左からON,ON,OFF,ONにして起動.
  4. 作成した redboot.mot を h8write で焼く.

    h8write.exe -3069 -f20 redboot.mot

  5. 書き込み時に

    WARNING:This Line dosen't start with"S".
    Address Size seems wrong

    とかいうワーニングが出てたけど successed と言われたので,とりあえず気にしない.
  6. 以下のようにしてcuとかで38400bpsで接続する.

    # cu -s 38400 -l /dev/cuad0

  7. ディップスイッチを左からON,OFF,ON,OFFにしてリセットすることで,プログラムが起動する.リセットボタンを押すたびに hello world が表示される.
注意として,cuが起動しっぱなしで繋がったままだと,h8write で新たに書き込もうとしても書き込みできないので注意.h8write で書き込む際にはcuを切ること(シリアルがcuに占有されるので当然なのだが,ぼくはこれでけっこうハマった...).ちなみにcuは「~」「.」を押すことで切れます.

ちなみにCD-ROMにH8/OSというOSが付属していて,プログラムをメモリ上にロードして実行する機能がある.さらにputというコマンドがCD-ROMに付属していて,FreeBSDにも対応しているみたい.(h8writeと同様に,先頭にFreeBSD用の#defineがある)

ということでH8/OSをフラッシュに焼けばブートローダーとして使えて,putでKOZOSを送って実行する,ということができそう.まあでもネタとして面白いので,ブートローダー自作しようかとは思ってはいる.

で,まあとりあえず hello world くらいは全部自分で書いてみたいのと,上記サンプルプログラムはグローバル変数の書き込みができないはずなので,hello world を自分でスクラッチで書いてみた.以下のような感じ.

以下の考慮をしてある.
  • リンカスクリプトを自前で用意.
    • リンカスクリプトに関しては,付属のCD-ROMにあるH8/OSで使われているものを 流用できて,上記サンプルもそれを利用しているみたいなのだが,以下で説明する ように VADDR と LADDR を別にする必要があるのでそのままでは使えない.なので せっかくなので自分で書いてみた.
  • グローバル変数の書き込みに対応.
    • 上記サンプルはROM上で動作する前提なので,グローバル変数もROMに配置されて しまっていて書き込みできない(はずだ).なのでグローバル変数の初期値はROM 上に持って,起動時にRAM上にコピーしてそっちを使うように修正. (このためグローバル変数に関しては VADDR ≠ LADDR になるので, リンカスクリプトで工夫している) (グローバル変数のVADDRやLADDRが期待通りに配置されているかどうかは, readelf や逆アセンブル結果を参照して確認した)
  • スタートアップでスタックポインタを設定.
  • 割り込みベクタテーブルをリンカスクリプト側で作成せず,配列として定義. (このほうが一般の人は修正しやすいんではないかな,と)
  • ビルド用に make.sh を用意.(これは PowerPC で使ったやつを適当に修正して 利用)
  • シリアル関連とかをライブラリ化してソースコードを整理.
まあこんなところかな.

ビルドの方法は簡単で,make.sh というスクリプトを用意してあるので,以下のようにするだけです.PowerPCのと同じ感じ.

% ./make.sh clean
% ./make.sh
% ./make.sh image

./make.sh image することで,sample.mot が作成されます.で,スーパーユーザになって

# ./make.sh write

で,h8write を起動してフラッシュに書き込みます.シリアルは9600bpsで接続.

ちなみに以下が実行結果.グローバル変数の書き換えもばっちしうまくできてるみたい.

teapot# cu -l /dev/cuad0
Connected
Hello World! 10 1234 0 1 1 10
Hello World! 10 1234 0 1 1 10
Hello World! 10 1234 0 1 1 10

夏だけど、鍋だ。


鍋をするときにぼくがまず考えるのは、買出しとか準備とかが楽で簡単で、そしておいしいことだ。そういった点で、キムチ鍋を越える鍋はそうそう無いと思う。


まず、つけダレがいらない。何を入れてもたいていおいしい。肉少なめでも野菜だけでもけっこう満足できるのでヘルシーで安上がり(実際、安く済む)、作り方が簡単でだれでも作れる、どう作ってもまず失敗しない、うーんすばらしい鍋だ。(つけダレがいらないし簡単なので、花見とかキャンプとかでもおすすめです)


で、最近好きなのがキムチのしゃぶしゃぶだ。とは言ってもぼくが勝手にやっているオリジナル鍋なのだけど、以下のような感じだ。


・まず、鍋にお湯を張ってわかす。
・キムチを軽くゆがいて、しゃぶしゃぶ状態で食する。
・キムチをゆがいているうちに、キムチエキスが鍋に溶け出してキムチ鍋になるので、あとはてきとうに具財を入れてキムチ鍋にして食する。


キムチってそのまま食べるとちょっとしょっぱくて塩分取りすぎになっちゃうかなーと思うので、ゆがくことでまわりのキムチ成分を落として、うまみはそのままにシャキシャキした白菜の歯ごたえを楽しむことができます。白菜の芯の部分がシャキシャキしてておすすめ。シャキシャキ感を楽しむために、あまりゆでないこと。あくまでしゃぶしゃぶで。


「キムチ鍋のもと」は、はっきり言って要りません。不要です。ていうかキムチ鍋にキムチ鍋のもとを入れると、しょっぱすぎると思う。毎回同じ味になってつまらないし、キムチだけでいきましょう。ぜったいにキムチだけのほうがうまいです(たとえそれで味が薄いとしても)。むしろキムチのもとに頼らずに、スーパーで売ってるいろんなキムチを試すほうが、やってて楽しいです(安くてうまいのがないか、探す楽しみがあります)。キムチ鍋のもとを買うお金は、そのぶんキムチを買うほうに使いましょう。


ただキムチはそれなりに高いものにしたほうが無難かも。甘みのあるようなやつだとちょっと微妙。おすすめは以前ブログに書いたように、しばらくほっといて酸っぱくなったキムチを使うことで、これがいいかんじで酸っぱくなってれば、もとがどんなキムチでもOKです。もとが甘みのあるキムチでも、これならぜんぜんOK.方法は簡単、冷蔵庫で1週間~1ヶ月置いておくだけです。(以前は室内放置とも書いたけど、常温だとちょっとアンモニア臭くなって、これって食っても大丈夫なのかと不安になるので、初心者は止めたほうがいいでしょう。私はそれでもよろこんで食ってますが)


肉は、あまり入れなくても大丈夫です。せっかくなのでヘルシーにいきましょう。肉を買うお金は、まずはキムチにまわしましょう。ものたりないというひとは、まずは豆腐を入れて、肉は少なめにするとヘルシーでしょう(豆腐でもけっこう満足できます)。それでもものたりなければ、厚揚げを入れてみましょう。肉を入れるなら、豚肉か鶏肉かな。牛は合いません。鴨肉もおすすめ。うまいよ。


基本的には野菜を楽しむ鍋です。で、野菜は何をいれてもおいしいのだけど、まずはホウレンソウがおすすめ。豚肉にあうし、ゆでたての緑色のホウレンソウってとにかくうまいのよ。あと春菊とか、小松菜とか、緑色で味の濃い野菜がおすすめ。チンゲンサイとかもいいよ。基本は茹でたてて、色が青いうちに食べること。シャキシャキの状態で食べること。くたくたになるまで煮るとふつうの鍋になっちゃうし、味の濃い野菜だと、その味が鍋に出てしまうので。


ゆでたての野菜って、ホント、うまいよ。そして目の前で自分の好みの状態にゆでた、ゆでたての野菜をそのまま食べられる料理は、鍋だけです(だから鍋はすばらしい)。お店の料理はお客の好みの最大公約数の状態にゆでられるわけだし(まあホントの高級店は、お客の個々に合わせて料理するっていうけどね)、厳密にはゆでたてのそのままの状態では食べられないし、これはどんな高級料理もかないません(そりゃそうだ、目の前で自分で作ってるんだから)。ゆでたてのきれいな緑色の葉っぱとか、しゃきしゃきの茎とか、ホント、うまい。


野菜はスーパーに行って、今日はこれを入れてみようみたいな感じで目に付いたものをてきとうに入れてみると、あーこれはこんな味なんだなーといろいろ楽しめます。モロヘイヤとかあしたばとかもやってみると、けっこうよかったりします。また野菜も部位によってぜんぜん味が違ったりして、これも発見があって楽しめます(私はこれで、ホウレンソウの茎の部分と根元の部分のうまさに目覚めました)。この鍋をやる前提でスーパーに買出しに行くと、普段目がいっていない野菜の種類の多さに驚くことができます。(野菜はほんとうに何を入れてもたいてい大丈夫なので、選ぶ楽しみと工夫する楽しみとチャレンジする楽しみと、失敗する楽しみがあります。失敗するのも楽しいよ!)


こないだチャレンジしてけっこうよかったのが、みょうが。しゃきしゃきしてて味も濃くてとってもうまい。鍋にみょうがって普通はありえないけど、こーいうのを試せるのは、大きな楽しみだ。いろいろ試すのはホントおすすめ。

豆も入れるととってもうまい。豆は、ほんとにおすすめ。枝豆とかの剥き身のやつとかだと楽です。あといろんな豆のゆでたのの詰め合わせみたいのをスーパーで売ってたりするけど、そーいうのもおすすめ。ポリポリしてうまいよ。さやつきインゲンをサヤごととかね。(もちろん失敗もあるが、工夫すればうまくなったりやっぱりダメだったりで、それはそれで楽しめる)


キノコ類はなんでもいいけど、けっこうダークホースでうまいのが、なめこ。鍋にはあんまりいれないキノコだけど、これがいれるとひじょーにうまい。切らなくていいので準備も楽。なべになめこって聞いただけでえーそれって大丈夫なの?と思いそうだけど、この鍋はどんなものでもたいてい、大丈夫です。恐れずにまずは入れてみましょう。(ダメなら入れるのをやめるだけ)


魚介は。。。あまり入れたことは無いです。うーん入れても鍋の味に負けてしまうような気がするなあ。。。入れるなら、イカとかエビとかかしら。ゲソとかならうまいかも。マグロとかでもいけるかも。


あーあとアスパラはうまいのだけど、ブロッコリーはちょっと微妙だったなあ。。。ぼくはどっちも好きなので、絶対いけると思ったのだけど、ブロッコリーはなんつーか、飽きます。まあでもアスパラもブロッコリーも、うまいです(ブロッコリーは飽きるけど)。ゆでたてできれいな緑色のときにそのまま上げて食べるのがたまらないです。ホント、ゆでたてってうまいよ。(今思ったけど、とうもろこしとか案外いいかもね。ゆでたてで)


セロリは期待してたのだけど、微妙だったかな。セロリはむしろ前に書いた「すっぱ辛鍋」に合うかなあ。エスニックな感じがして。


たとえて言うなら、あれだ。バーベキューで焼きたいものを思いついたまま焼いてみる感じ(チーズとか、クリームパンとか、マシュマロとか)。失敗だったり精巧だったり、失敗でも焼き加減によって別の味になったり。あれが、部屋で楽しめます。


思いつくままてきとーに書いちゃったけど、ぼくは鍋ってけっこう好きなので、夏でもやります。食材を選ぶ楽しみがあっていいよ。冬になると鍋セットとか鍋用カット野菜とかスーパーで売ってるけど、やっぱし自分で食材選んで、失敗したり成功したりするのが楽しいと思います。自分で選ぶと失敗も多いけど、新たな発見がすごくたくさんあって、ホント、楽しめます。おすすめ。


鍋というと失敗しないように保守的にいく場合も多いけど、楽しむならばチャレンジングにいきましょう!そのほうが楽しいよ!失敗も楽しいよ!失敗大好き!(マゾか!?)


えーとH8への移植作業だけど,移植準備としてFreeBSDでの開発環境を構築して,とりあえずサンプルプログラム(hello world)をビルドして動作が確認できた.あっさり動いてちょっと不気味.

クロス開発環境はすべてFreeBSDで構築できた.

ターゲット:AKI-H8/3069Fネット対応マイコンLANボード(秋月電子)
アセンブラ,コンパイラなど:FreeBSD上でbinutils, gccをクロスビルドして利用
フラッシュROM書き換え:h8writeをFreeBSD用に数行修正し,ビルドして利用

ちなみにh8writeの修正だけど,ソース(h8write.c)の先頭で#define FreeBSDのように修正して,あと利用するデバイスを/dev/cuaa0から/dev/cuad0にするだけ(FreeBSD-6.xの場合の修正.FreeBSD-4.xの場合は/dev/cuaa0のままでよい).

これで完全にWindowsに頼らずに開発ができます.これってすげー大事なことだと思うんだけど,そんなんのって僕だけ?

まあWindowsはともかくとしても,開発環境を開発者が好きに選べるというのはすげー大切だと思う.Windows上で統合開発環境使いたいひともいれば,UNIX上でemacsやmakeを使いたいひともいるわけだし.

あと,実はボード付属のCD-ROMに「H8/OS」というOSが付属していて,プログラムをメモリ上にロードして実行する機能を持っている.さらにputというコマンドがCD-ROMに付属していて,ソースも添付でFreeBSDへの移植は簡単そう.(h8writeと同様に,先頭にFreeBSD用の#defineがある)

ということでH8/OSをフラッシュに焼けばブートローダーとして使えて,putでKOZOSを送って実行する,ということができそうなので,ブートローダーの自作は必ずしも必須ではなさそうだ.(まあでもネタとして面白いので,ブートローダー自作しようかとは思ってはいるが)

あと秋月のボードのいいところだけど,自作OSを作るターゲットとしては,以下がいいなあと思った.

■ フラッシュROM書き換え回路を持っているので,フラッシュをとばしても個人レベルで書き換えが可能

通常はフラッシュ書き換えのプログラム(モニタ)をフラッシュ上に持っているのが普通だと思うのだが,それだとフラッシュとばしたり,へんなものを焼いてしまうと書き換え不能になるので,恐くて現実的には結局書き換えられんのよ.とばしたらICE使うしか手段が無くなったりするし.(ROMライタがあればだいぶマシだけど)

なので(ブートローダーのような)フラッシュROM上で動作するプログラムを個人レベルで書こうとしたら,このような機能はすげー重宝される.ICEなんて個人レベルではとてもとても買えないしねえ(これを仕事にしているプロなら別だけど,ホビープログラミングという遊びのために,このためだけにはとても買えない).まあもっともはじめから高級なモニタが乗ってたら,そもそも今回みたいにブートローダーから作ろうなんてことにはならないのだけど...

■ キットと完成品の両方の形態で販売

まあお金を節約したいならばキットなのだけど,数千円の違いならば,時間の貴重な社会人は完成品の形で買ってすぐに使いたいという人も多いだろう.半田づけとかあまりやりたくないだろうし(ぼくがそう).

こーいうこというと「自分が開発するボードを半田づけからきちんと自分でするのが基本では?」とかいうひとがいそうだけど(実際,言われたことがある),ぼくのやりたいのはOS開発であって回路づくりではないのよ.まあ学生さんとかならば時間もあるだろうし,半田づけからやってもいいとは思うけどね.

なのでこのボードのように,組み立て済みで売っていてくれるのはとてもありがたい.まあそれがこのボードの選択理由のひとつなのだけど.(KOZOSをみんなにいじってもらうということを考えると,いまさら半田づけなんてめんどくさいという人も多いだろうから,これってけっこう大事なことだと思う)