31-Oct-2007
[stalled.]

多分風邪、てゆーか、風邪。

おやすみなさい。

30-Oct-2007: 朝昼:いつもの。夕:妻にお任せ(白飯、ニラ入り玉子焼き、焼いた牛肉の玉葱和え)。

31-Oct-2007: 朝昼:いつもの。夕:スーパーで買った弁当。(19:55)

29-Oct-2007
[うっわ、これは…]

電車の中で見る、就職活動系(就活系とは敢えて書かない)のweb siteの類の広告を見て思ったけど…なんかこういうのがバブルの空気なのかな、と思ってしまう。

で。

偶然こういうblogの記事見つけたんだけど、これは酷いな。

ちなみに、日経ナビのキャラクタ描いてるのはあべたみおだって。ふーん。

喉が痛いので夕食メモはさくっと省略。外食食べたり妻に作ってもらったり自分で適当に作ってみたりとか、まあその辺で。(21:10)

25-Oct-2007
[h8300h→h8300hn(24)]

徹底的にデバッグしてみた。スタックポインタは何かあったら嫌だから32bitで保存しちゃえ、というのが裏目に出ていたというオチ。

んでもって、24-Oct-2007の件は、jsrで飛んで来た直後かつ2nd argをスタックに積む直前にsp(er7)を2進めておけば良いことに気付いたので、そう直した。

とりあえず、gdb-6.7(h8300hn)のinfo regは表示だけがおかしいらしい。気にせずに食わせてみたら、カーネル起動時にtm_putstring()で文字列を表示しようとしているところまでは進む模様。

ここでSCI3のテストと称して実機に書き込むか、usermain()までシミュレーションを行ってから書き込むか、悩ましいな。

朝昼:いつもの。夕:スーパーで買った弁当。(20:20)

lib/libtm/src/sysdepend/app_h8s2212/sio.cのSci2AsyncMode(), Sci2AsyncTx(), Sci2AsyncRx()を適当に無効化して、gdbに食わせるためのオブジェクトを作ってみた。

gdbのシミュレータで実行した際のログはこれ。初期タスクが起動して、usermain()が呼び出されて、適当に最後まで辿り着いてるっぽい。(21:15)

24-Oct-2007
[h8300h→h8300hn(23)]

カーネル呼び出し、および拡張SVC呼び出し時における、スタック上の引数のアドレスがずれてるのを見つけたので、それは直してみた

ぶっちゃけた話、拡張SVCを呼び出すためのインタフェースはオリジナル(H8S/2212)と異なってます。大体、あれはPCを格納する領域が32bit幅だからできる芸当であって、16bit幅では絶対に無理なんですよ。

どういうことかというと、スタック上のデータ配置の問題なんだけど…


High Address    +---------------+
                | 5th arg       |
                | 4th arg       |
                | xxx:PC ★     | saved by I/F call
                | 2nd arg       |
         er1 => | 1st arg       |
                | 3rd arg       |
                | CCR:PC        | saved by trapa
                | er4           |
                | er5           |
    er5, er7 => | er6           |
Low Address     +---------------+
                <- 32bit width ->

※μT-Kernel実装仕様書(H8S/2212)から、一部改変して引用

拡張SVCの処理を行うルーチンへ飛ばす前に、xxx:PCの領域(★が付いてるとこ)に3rd argをコピーすることで、er1からHigh addressに向けて1st arg〜5th argのように引数が綺麗に揃うって話。

もちろん、拡張SVCの処理が終了した後は、再びxxx:PCに戻さないと駄目なので、そうなっているんだけど。

これって常套手段なのかそれとも賢いのか分からないけど、俺はすげえなと思った。でも、(繰り返しになるけど)PCが16bit幅なH8/3664じゃ無理だからこれ。

22-Oct-2007: 朝昼:いつもの。夕:白飯、味噌汁、スーパーで買った惣菜、刺身。

23-Oct-2007: 朝昼:いつもの。夕:白飯、野菜のスープ、焼いたソーセージ、明太子。

24-Oct-2007: 朝昼:いつもの。夕:トマト缶を使った炒飯というかなんというか(自分でもよく分かっていない)。(22:05)

21-Oct-2007
[h8300h→h8300hn(22)]

H8/300Hノーマルモード向けではなく、H8/300向けに作った方が実は幸せだったんぢゃねーか?と思ったので、ちょいと試してみた。

コンパイル元の素材は、kernel/tkernel/src/timer.c。なんとなく選んだだけなので、他にもっと相応しいものがあったのかもしれないが。

32bitの数値をバリバリ扱っているという理由が大きいと思うんだけど、ここまでコード量の差が付いてしまうと、正直H8/300H向けでいいかなという気がする。

既にTRAPA命令とかも使っちゃってるから、方向を修正するにしても楽じゃないし…

とりあえず、cpu_support.Sを紙上デバッグかなー。

20-Oct-2007: 朝:寝てた。昼:以前作ったクラムチャウダーもどきとパン。夕:適当にあったものを適当に。

21-Oct-2007: 朝:やっぱり寝てる。昼:トースト類。夕:白飯、味噌汁、納豆、明太子。(22:40)

19-Oct-2007
[h8300h→h8300hn(22)]

gdbの上で、kernel-rom.romをどうにかして動かす方法を調べています。

とりあえず分かったこととして、リセットベクタ(__reset)とそのジャンプ先(_start)の両方にブレークポイントを張ってから、run→jump _startすると良いみたいです。

下手な説明よりも、ログを見る方が早いと思うので、そうして下さい。

…で。

やっぱりディスパッチャで暴走してるみたいです(涙)。

朝昼:いつもの。夕:白飯、キットを使った中華系のおかず。(21:00)

あれこれ試しているんだけど、gdbsimの動きが変。

info regでレジスタを見た場合、h8300hだと32bitになっているのに、h8300hnだと16bitになっている。それだけじゃなく、mov.l命令とldc命令は無視するくせにmov.w命令はしっかり実行されているという…H8/300Hのノーマルモードを、H8/300と同じように扱っているのではないかという気がする。

報告しないとマズいよねえ、これ。(22:20)

とりあえず報告してみたけど…報告先がそこで合っているのかどうか、とっても不安。(22:40)

18-Oct-2007
[h8300h→h8300hn(21)]

そろそろH8/3664に書き込んで、動かない動かないと騒いでみよっかなーと思いつつ。←あくまでも動かない前提。後向き。

gdbに食わせたらどうなるかなーと思って食わせてみたら…gdbが動かない。

正確には、Error while debugging using GDB6.6 for Renesas H8300 targetにあるように、target simコマンドを実行すると「-Eなんてオプションは知らぬわ」とgdbsimに怒られるという現象なんですが。

試しに、gdbのバージョンを6.7に上げたらこの問題は解決したんだけど…gdbの使い方、知らないし。

とりあえず、runとかやって、適当に怒られた後にjump loop_trapとかしたら無限ループになったので、なんか動いているんだとは思う。

朝昼:いつもの。夕:スーパーで買った弁当。(21:20)

17-Oct-2007
[h8300h→h8300hn(20)]

H8向けのgccに関する資料を探していたら、-malign-300なるオプションを発見。データのアライメントをH8/300用にするというものらしいのだが…

とりあえず、そのオプションを指定した状態でコンパイルした際に得られたkernel-rom.mapがこれ

ROMの使用量が248byte、RAMの使用量が16byte減っているのかな。このオプションを指定して問題なく動くのなら、指定する方が良さそうな気がする。なんとなく。

H8の場合、long(32bit)の値は2n番地に置けるので、2byte-alignでも問題は無いと思うんだけどねえ。ポインタの値をキャストして0xfffcでマスクするみたいな感じでごにょごにょする部分がいくつかあったような気がするけど、knl_Imalloc()絡みの部分を除いて全て潰した筈だし。

朝昼:いつもの。夕:パン、クラムチャウダーもどき。(21:45)

16-Oct-2007
[とてもそんなことは]

GAME Watchの「大航海時代 Online 〜Cruz del Sur〜」世界周航レース体験レポートを読んだ感想。

…サーカムライナーローブを潮風に晒す(着たまま航海する)なんて、俺にはとてもそんなことはできねーっすよ。

なーんてことを書いていたら、PKに襲われました。わはは(交渉して、アイテムを差し出したら勘弁してもらえましたが)。

という訳で、自分も世界周航レースには参加しましたが…ジーベックで208日。

クリッパー勢が相手ではどう頑張っても勝てないことが分かりきっている以上、小型艦でのんびり遊んだ方が良かったのかなと後悔しています。

レース失格の600日すれすれを狙うプレイとか。誰かやってそうな気もするけど。

朝昼:いつもの。夕:吉野屋にて。(21:25)

15-Oct-2007
[h8300h→h8300hn(19)]

著作権侵害と人権侵害のどっちがより問題かって言ったら、後者。

部落差別に関してはあんなにナーバスで、オタク差別に関してはノータッチ…俺には正直、どっちも差別に見えるんですがね。

初音ミク問題に関してあれこれ書きたい気もするんですが、netizen側に偏ってしまう(TBS側を必要以上にdisってしまう…擁護する気は無いけど)という理由により、パスします。

BTBペーパーでpHを測るような感じで、悪意の量を客観的に測定できればこういう話題も扱いやすいんですけどねえ…とりあえず、後世の人間がこの問題を評価できるよう、件の動画をきちんと保存し、かついつでも参照可能な状態を維持し続けるのが良さそうに思えます。

さてと、前置きが長いので本文はあっさりと。とりあえずここまで作業した。

タスク数は2、タスクオブジェクトは必要最低限…μITRON 3.0でいうところのレベルS(Standard)辺り。

kernel-rom.mapを見てみると、なんかknl_int_nest, knl_taskindp, knl_lowpow_discnt, knl_lowmem_top, knl_lowmem_limitが全て32bitで取られているのが許せない。こいつら確か16bitで宣言してるはずなのに。

13-Oct-2007: 朝:寝てた。昼:妻にお任せ(スープ類とパン)。夕:白飯、モツとモヤシを炒めたもの。

14-Oct-2007: 朝:妻にお任せ(グラタン)。昼:食べた記憶が無い。夕:大戸屋にて。

15-Oct-2007: 朝昼:いつもの。夕:酢豚(キット使用)、白飯。(21:30)

13-Oct-2007
[冷え込み始めた季節に]

扇風機をネタにするのはどうかとも思うんだけど、とりあえず。

MITSUBISHI R30-KB MORITA HF-315T

左にあるのは、三菱製のR30-KBという扇風機の操作パネル(随分古いので、ボロボロだけど)。右にあるのは森田電工製のHF-315Tのもの。

で、結論から先に書くけど、HF-315Tの方が使いやすいんだよね。R30-KBは電子スイッチ使ってハイテク感を出そうとしてるんだろうけど、電源を切る度に首振りがoffになってみたり、風量を上げた状態で回すためには必ず何度か風量調節のボタンを押すことになるので、不便なのです。

特に熱帯夜の寝室で、寝ぼけた頭で扇風機を回そうとする時に、使いにくさを実感できます。

ついでに…

「ベビー風」っていう表現が意味不明です。多分、「微風」とでも表現されるべきものを指しているんでしょうが…訳分かんねえ言葉作ってんじゃねーよ!ヽ(`Д´)ノって気分になるのは、多分俺だけじゃないはず。

食事メモは後日。(17:45)

12-Oct-2007
[h8300h→h8300hn(18)]

sio.cの、SCI初期化待ちのソフトウェアループに関して調べていたら…H8/300HとH8Sとの違いについてあんまり考えてなかったな、ということに気付く。

とりあえず、H8S/2000シリーズソフトウェアマニュアルに記された、H8/300H CPUとの相違点を軸に、H8Sにしか存在しない(H8/300Hでは使用できない)命令を調べてみる。

8ビット×1本、32ビット×2本のコントロールレジスタを追加
8bitのレジスタはEXRレジスタ。32bit×2本のレジスタは、MACレジスタ(後述)。EXRレジスタを操作が行えるよう、LDC/STC/ANDC/ORC/XORC命令が拡張されている。
アドバンストモードのとき、データのみ最大4Gバイトのアドレス空間を使用可能
アドレッシングモードの@(d:24, ERn)は、@(d:32, ERn)に変更。また、@aa:24も@aa:32になるが、JMP/JSR命令に関しては@aa:24のまま。
ビット操作命令のアドレッシングモードを強化
Rn/@ERn/@aa:8に、この2つが追加される→@aa:16/@aa:32。
積和演算命令を追加(H8S/2600 CPUのみ)
32bit×2本(MACH/MACL)のMACレジスタの操作は、MAC/LDMAC/STMAC/CLRMAC命令で。
2ビットシフト、2ビットローテート命令を追加
ROTL/ROTR/ROTXL/ROTXR/SHAL/SHAR/SHLL/SHLR命令には、ROTL.B #2, Rdのように2bit分のシフトを指定できる。
複数レジスタの退避/復帰命令を追加
LDM命令(LDM.L)とSTM(STM.L)命令を追加。
テストアンドセット命令を追加
TAS命令を追加。

命令の種類は、H8/300Hが62、H8S/2000が65、H8S/2600が69だそうだ。

新規に追加された命令はまあ検索すりゃ分かるとして、ビット操作命令に追加されたアドレッシングモードと、2ビットシフト/2ビットローテート命令が使われているかどうかを調べるのはちょっと面倒だな。

今使っている、binutils-2.17に入っているh8300-elf-asは、.h8300hnの指定を行っている状態でH8Sの命令を使ってもなーんにも文句を言わないってのが非常に怖い。EXRレジスタの操作は流石に怒られたけど。

という訳で、アセンブラで記述された部分はちまちま直すことになるんだと思います。ぐったりだよorz

朝昼:いつもの。夕:カレーとパン。(22:10)

11-Oct-2007
[h8300h→h8300hn(17)]

とりあえず動かす分には何だろうと構わんじゃろという結論により、タイマA/250msで進める方向で作ってみた

残っているのはsio.cの修正、cpu_support.Sとutk_config_depend.hの確認。各種タスクオブジェクトを取り揃えておりますという状況では明らかにROM/RAMが不足するので、必要そうなものだけ有効にしないといけないし。

…ていうか、ここまで引っ張って、動かなかったら虚しいよな。

sio.cの作業に取り掛かってみたのだが、


void Sci2AsyncMode( void )
{
	unsigned char Brr;
(途中省略)
	Brr = (unsigned char)((1000000 / 64 * 2) / RS_BAUD_RATE * (CPUCLK / 1000 / 1000) +.5);
	*((unsigned char*)SCI2_BRR) = Brr;

というコードを見て、激しく困っている。

+.5とか書いてあるんだけど…整数型でそれってぶっちゃけどーよ?

それに、*((unsigned char*)hogefuga)の嵐も…

10-Oct-2007: 朝昼:いつもの。夕:妻にお任せ(職場の人から頂いた食材)。

11-Oct-2007: 朝昼:いつもの。夕:スーパーで買った弁当、ということにしておく。(20:25)

09-Oct-2007
[戦力を集中する必要があるのは分かっているんですが…]

一台のマシンの上で、distributed.net clientと、enigma-suiteと、Folding@Homeが動いています。だって、どれもやりたいんだもん。

この手のプロジェクトって、どことなくお祭り的な雰囲気があって、さり気なく連帯してるって感じが好きなのですよ。極端に近すぎず、かといって遠くもないという。

上に挙げてるプロジェクトのうち、どれか一つしか参加させてやらんと言われたら…enigmaかなあ。三つの未解読暗号のうち既に二つが解けたというの理由かな。分かりやすい実績があるし、ゴールが比較的近いからという。

もうちょい計算機資源を投入すれば、解ける日もより近くなるんだろう…とは思うんだけど、余っている機材がある訳でもなく、これ以上電気代を払える訳でもないからなあ。

ぃゃ、分かってはいるんです。PS3を買い進めて小さな実験用クラスタを組んだ方もおられますし、Folding@HomeのためだけにPS3を買うという選択肢があるということも。

でもそれって…俺らしくないかなという←何が。

実は、P.A.SemiのPowerPCチップ載せたAmigaに期待してるんですが、まだ出ないんでしょうかねえ…

ぃゃね、UNIX本舗でPowerPC載せたワークステーションが中古で出ているのを見ると、Alpha亡き後はPowerPCしか無いのかなーと思いまして←だから何が。

そういや、Iyonix pcは、国内で買われている方がおられるようなので、その方にお任せの方向で。

RISC OS 4.xの後継に関するゴタゴタはどうなったんだろう。5.x系と、6.x系で色々あるらしいんだけど←Wikipediaの記述を読もう。

とりあえず、あと1年くらいはQercus(ex. Acorn User)を読むつもりですがね…

朝昼:いつもの。夕:近所の庄やにて(もうすぐ4周年なので、そのお祝い)。(21:35)

08-Oct-2007
[h8300h→h8300hn(16)]

タイマA、それも250msのやつをシステムタイマとして使うという判断が本当に正しいかどうか、ちょっと悩み中。

実はタイマVの方が良いんじゃないかっていう気がしているんだけど…どうしようかねえ。

食事メモはとりあえず省略。それどころじゃないので…(21:15)

04-Oct-2007
[深入りしない方が良さ気]

ちょいとDOS上でうにゃうにゃっていうのは、これ。DOS用のコードのくせに、何故かμITRON風な変数の宣言になっているのは…気にしないように。

Plug & Play BIOSだのESCDだのってなんだろーと思って、まずは実際に呼び出してみようという実験をしていたのだけども、この説明を見てやる気が失せた。


4.5.2 Function 1 - Get System Device Node
Synopsis:
int FAR (*entryPoint)(Function, Node, devNodeBuffer, Control, BiosSelector);
int Function;				/* PnP BIOS Function 1 */
unsigned char FAR *Node;		/* Node number/handle to retrieve */
struct DEV_NODE FAR *devNodeBuffer;	/* Buffer to copy device node data to */
unsigned int Control;			/* Control Flag */
unsigned int BiosSelector;		/* PnP BIOS readable/writable selector */

上の記述は、Plug and Play Specification Version 1.0A (May 5, 1994)からの引用なんだけど…struct DEV_NODEに関する記述を見ていくうちに、段々気分が滅入ってくるんだよね。

そもそも、DEV_NODEって、構造体で定義できるほど甘い作りじゃなさそうだし。詳細は4.2 System Device Node Definitionを良く読めってことらしいので、気が向いたら(多分向かない)読んどけってことなんだろうけど。面倒…

という訳で、深みにはまる前に撤収して、例の移植作業に戻りましょうかね。

こっちもこっちで、厄介なものが色々残ってるんだけどな。orz

朝昼:いつもの。夕:白飯、野菜とか焼いた肉とか。(22:05)

03-Oct-2007
[むー。]

実は、マシンが3台くらい無いとやってらんない状況になってます。Windows用と、Linux用と、DOS用で。データ交換はフロッピーディスクだし。

Watcom C/C++を使って、ごにょごにょコード書いて、できたプログラムをDOS上で動かして調べ物をしているのですが…マシンに依存したものを調べているので、仮想マシンでどうにかする訳にはいかなかったりします。

とほほ。

02-Oct-2007: 朝昼:いつもの。夕:白飯、モツ煮。

03-Oct-2007: 朝昼:いつもの。夕:焼きそば。(21:10)

01-Oct-2007
[h8300h→h8300hn(15)]

見直し、および攻略が必要なソースが、まだこれだけある。


./config/sysdepend/app_h8s2212/utk_config_depend.h
./etc/sysdepend/app_h8s2212/makerules.sysdepend
./include/sys/sysdepend/app_h8s2212/machine_depend.h
./include/tk/sysdepend/app_h8s2212/sysdef_depend.h
./kernel/sysdepend/cpu/h8s2212/cpu_support.S
./kernel/sysdepend/device/app_h8s2212/tkdev_conf.h
./kernel/sysdepend/device/app_h8s2212/tkdev_init.c
./kernel/sysdepend/device/app_h8s2212/tkdev_timer.h
./lib/libtm/src/sysdepend/app_h8s2212/sio.c

他は多分、今までの作業で大丈夫だろう。きっと、たぶん、おそらく。

FOREVER BLUEは、ホワイトマザーと呼ばれるでっかい白鯨を見つけて停止中。大航海時代Onlineは、なんだかんだで地味に遊んでるな。

朝昼:いつもの。夕:妻にお任せ(チゲ鍋、うどん付き)。(21:20)