2009年5月アーカイブ




DRO01用入出力ユニット、全部配線しました。おかげでCR85の整備ができず。
CR85はこの前のレースから走ってないので腰上だけで済むし。問題はピストン
のナラシ日程、最後の練習を富士にするか筑波にするか...。週間天気予報を
見ながら唸るだけで、まだ決まってない。



左側がLEDユニット。青いラインがソース、オレンジがシンク。18桁ダイナミッ クなので、ソースの引きまわしが大変。
M/B側はソースのTD62783とシンクのTD62006。ゼロリセットのボタン用の74HC14。 そして、AKI-H8/3694F
一番下のTD62006の横に二つついてる10Kの抵抗は、P56,P57用のプルアップ用。 このポートはI2C共用でオープンドレインなので。(最初つけなかったらLEDがつ かなかくてちょっと焦った。)

裏側からもとりつけた抵抗が哀愁を漂わせています。これはソースのLEDの抵抗。 当初330Ωにしてたところ、どうも輝度が足りない気がして、LEDの限界まで流 すことにして、330Ωを並列にして165Ωにしました。7セグLEDは秋月で買った C-533SR。Vccは実測で4.3V程度。

スイッチは入力専用ポートのBに接続。これが結構はまった。このポートは A/Dコンバータと共用。A/Dコンバータのチャネルセレクトが常に有効なので ポートBのどこかのビット(ADCSRで設定)はI/Oポートとして使えないのだ。
デフォルトで0が入力チャネルなので、そこに継げていたスイッチがとれず... てっきりハード側を疑っていて、7414交換したり配線を変更したり...ちょっと はまりました。A/Dコンバータ使ってなければ全部I/Oポートとして使えるだろ うと思っていたのだ。
その後もちょくちょくハマり。久々にH8でintを16bit(gccのオプションによっ てはint 32bitにもできるけれど、このOSでは16bit。その方がいいコードを吐 くので)にしてたのを忘れていた。
H8/3694のI/Oポートの設定。

void
ioport_init ()
{
  // Port 1
ポート1の設定にSCI3と共用のポート2の設定があるのに注意。そしてこれが
優先する。
  *PMR1 = PMR1_TXD; // Port 1 I/O port(Disable IRQ, TRGV, TMOW), P22 is TXD.
  *PCR1 = 0xff;	// Output.
  *PUCR1 = 0x0; // No pull-up
ポート2は全てSCIに設定。
  // Port 2 (SCI3)
  *PCR2 = 0x0;	// SCI3
ポート5はI2Cの設定が優先する。
  // Port 5 (I2C)
  *I2C_ICCR = 0; // Disable I2C (P56,P57 are I/O port)
  *PCR5 = 0xff;
  // Port 7 (Timer V)
ポート7はタイマーVの設定が優先する。その他に常時共用ポートあり(P75,P74)
  *PCR7 = 0xff;
  *TCSRV = 0;	// Timer V/ Disable TMOV (P76 is I/O port)
  // Port 8 (Timer W)
ポート8はタイマーWの設定が優先する。その他に常時共用ポートあり(P80)
  *PCR8 = 0xff;
  *TMRW = 0;	// Timer W/ Disable FTIOD,FTIOC,FTIOB,FTIOA
  *TCRW = 0;
  *TIERW = 0;
  *TIOR0 = 0;
  *TIOR1 = 0;
ポートBはADCSRの設定によりどれか一つはアナログ入力チャネルになる。
  // Port B (ADC)
  *ADC_ADCSR = 7;	// Set ADCSR port (bit 7)

  // Set default.
  *PDR1 = 0;
  *PDR5 = 0;
  *PDR7 = 0;
  *PDR8 = 0;
}


秋葉原に買い出しに行ってきました。PNPのトランジスタアレイは千石で
TD62783APGを見つけたので、これで決まり。あとはシンク用のTD62006PGと
抵抗とコネクタ類を買ってきました。



独立の330Ωの集合抵抗が千石はもう品切れで、ヒロセに行ったらあったので買っ てきたのだけど、間違えた。899-1-R330の'-1-'これはコモンに全部つながって いるタイプ。'-3-'じゃないとだめだった。898と899の8と9はピン数。 http://www.bitechnologies.com/products/passive.htm に読み方がある。
まぁ別に集合抵抗にしたところで楽になるという場所でもなく。半田付けする 回数も同じだし。

ブレッドボードでTD62783にしてテスト、ダミーライトで18桁のダイナミック 表示もテストしてみて、大丈夫なので本番を作りはじめました。
左側のマザーボード(AKI-H8/3694F)は構想中。 18桁ダイナミック点灯は配線がちょっと面倒です。まだソースの二桁まで。 あとソースが6桁、シンクが18桁。




ブーツ新調しました。SIDIのVERTIGO。前はSIDIのVORTICE(スキーブーツみたい
なやつ)だったのだけど、現行型はさらにスキーブーツ化が進んでいて、ちょっ
とどうかな...と思ってこれ。甲がバンドで閉めれるのがよかったんだけどね。
僕は足の甲が低いので、日本向けの型だと甲が浮いてしまうんだ。

通販で買えば安いのだけど、いろいろフィッティングしてみた代(高いが!)で ライコランドで購入。
ブーツ歴は初代がオフロードのSIDI(シニサロと非常に迷った。当時はオフロー ドトップブランドといえばシニサロ) 、二代目がスペンサーレプリカの色違い SIDI。三代目がアルパインスター(シュワンツの)。四台目がSIDI、これが五代 目。

AKI-H8/3664からI/Oポート (P1-0,4,5,6,7)(P5-0,1,2,3,4,5,6,7)(P7-4,5,6)(P8-0,1,2,3,4,5,6,7)(PB0,1,2,3) とGND, Vcc(5V)の30本をブレッドボードまで配線しました。
7セグLEDのソースドライブは74HC4511(4511は使わないのだけど、手持ちのいい PNPトランジスタがなかったので)、ちょっと暗くなってしまうけど手持ちの10kΩの集合抵抗で 7セグLEDにつないで、シンクはTD62006で。
プログラムはboard/tiny_overlayを改造して。

uint32_t
test (int32_t argc, const char *argv[])
{
  int i;

  *PCR8 = 0xff; // Output.
  *PCR5 = 0xff; // Output.
  uint8_t a[6] = { 4, 3, 7, 7, 0, 0 };
  while (/*CONSTCOND*/1)
    {
	for (i = 0; i < 6; i++)
	  {
	    *PDR8 = a[i];
	    *PDR5 = 1 << i;
	    mdelay (3);
	  }
    }

  return 0;
}
本番にはソースドライブのトランジスタにTD62708が欲しいのだけど、手に入る だろうか...。とりあえず秋葉原に行って手に入るのを物色して。なければ 7404で代用かな。最大25mAなのでなんとかなる。15mAでいいから。
H8/3664は出力Highレベル許容電流は全てのポートで2.0mAなのでなにかしらい れないといけない。



本当は金曜がよかったのだけど、どうみても雨っぽいので無理に今日。走行時
間が15時以降とちょっと遅過ぎるのでできればパスしたかったのだけど。

もしかして渋滞してるかもしれないと思って早めに出たところ、まったく渋滞 なしで、走行3時間前に着いてしまった。
暇なので富士の食堂で昼御飯。足柄で食べてくるか弁当買えばよかったな...。
今日は4輪が荒れ場だった。ダンロップ立ちあがりでオイル吹いて赤旗。しばら くするとまた赤旗。なんとストレートエンドでクラッシュ。どうも二台絡んで クラッシュしたようで、S2000(かな?)はフロントぐっちゃり、インプ(っぽい??) はひっくり返ったようで、レッカーに腹出して載っていた。冷えた。
時間は押して15:30から一本目。この時間になるとどんどん気温が下がってきて 48℃までしか上がらなくなってしまった。ファイナルは16:35にして走りやすく なったのだけどまったくタイム出ず。2'8.0まで。困った。
エア抜けが直ったFフォークは残スト15mmと今度は余り過ぎ。とはいえこれ91の ノーマルなので、イニシャルをかけるにはフォークキャップ開けてシムを調整 しないといけないのだ。
ストレートは5速12800rpmくらいまで。ちょっといたわってピット終了あたり で6速入れて12000rpm程度。
コカコーラはぴったし合う。1コーナーはちょっとロングに感じたけれど、 なんか今日は1コーナーにうまくつっこめなかったのもあるかも。ヘアピンも ぴったし。ネッツ、最終もぴったし。
そう、ネッツコーナー、いつのまにかプリウスコーナーという名前に変わって いました。強引な^^。

中40分で2本目なのだけど、その4輪の走行中にまた赤旗。こんどはストレート エンド150mから盛大にオイルを蒔いた。
さらにスケジュール押して、走行は16:45から。もうかなり冷えこんできた。 ちょっと多めに3.5枚貼って出走したものの、0.5枚が吹きとんでしまって また水温50℃。
コカコーラはリーンアウト気味にマシンだけ寝かしこんでいくと、ちょっとい い感じで進入できるかな。とりあえず外膝だけで押しこむ感じで。突っこみ過 ぎてもアクセルを閉じてれば絶対コースアウトすることはないコーナーなので もっとがんばる。
100Rはとりあえず思いっきり全開で入って外で一回曲げて、内側のT字路に なってるとこあたりをクリップで、あまり外向きにならないようにかな。
ちょっと開け気味に立ちあがるとヘアピンでコース真中くらいまでしか振れ ない。それでもいいのかもという気もする。ヘアピンのアウトでかいし。
120Rの段階で吹けたいところでよく曲げること。
ダンロップは入り口から立ちあがりまでずっと半クラあてたままにすると、 半クラが切れることがないので走りやすい。
ネッツはクリップでもよく曲げておくこと。立ちあがりは路面が荒れているの で曲げそこねるとウォブりがち。
タイムは伸び悩み2'6.8。ベストを更新できなかった。壁かな。

15:20 D.alt. 1025m 22.8℃(走行終了後20.9℃) 57.3% 948.2hPa 晴れ
17:35
1.9/1.9
2.5枚 48℃
PJ38 MJ170 SJ42 R1467J 2/5 4速まで13000 5速12900
best 2'8.0

16:35 D.alt. 939m 20.3℃ 68.4% 948.3hPa 曇
17:35
3枚 50℃
PJ38 MJ170 SJ42 R1467J 2/5 4速まで13000 5速12900
残ストF15/R5
best 2'6.8


帰りは厚木からの渋滞を覚悟していたのだけど、まったく渋滞なしでなんと1時 間20分で帰宅(レコード)。
環八ですら空いていた。



DRO01入出力ユニットはAKI-H8/3694Fで作ります。I/Oポートは
1 I/O: 0-2,4-7 の7ポート (P14-P17はIRQ0-3)
2: SCI3
5 I/O: 0-7 の8ポート(ただしP56,P57は出力レベルが2.5V)
7 I/O: 4-6 の3ポート
8 I/O: 0-7 の8ポート
B I  : 0-7 の8ポート

I/O: 26ポート
I:31ポート

3664 SDIP42パッケージだとさらにP11,P12,PB5-7がない。(I/O: 24 ポート、
I:26ポート)
作るのは6桁3軸7セグLEDと、ゼロリセットボタンx3。DRO2号機には、他に'高速 更新', '逆転','個別の電源'ボタンをつけたけれど、結局ゼロリセットしか使 うことはなかったので、ゼロリセットだけにします。
DRO02では7セグLEDの表示に74HC4511を使った。これは0から9までの表示しかで きない。なのでマイナスと小数点の表示をするためにとてつもなく苦労したの で、今回はLEDの表示は4511を使わず個別にセットすることにします。
となると、I/O:26ポートのうち8ポートがLED位置指定に使われるので、残り18 ポート。6桁3軸なのでちょうどダイナミック点灯させるにはぴったしなのだけ ど、P56,P57端子の出力が他と違って(これはI2Cポートと共通なので)、2.5Vし かないのがどうなるのかわからない。74138のようなデコーダも入れたくない。 というのも、デコーダはアクティブローなので、この先にLEDドライブ用のトラ ンジスタを入れた時に論理が合わない。
そのためにインバータ入れるのはとてもめんどくさいし...。
いくらキャリパーからのデータ入力がないといけ、18桁ダイナミック点灯にも 不安がある。(DRO02は4軸別にデータを用意してダイナミック点灯なので実質6桁)
ということで、とりあえず、どう程度なものかテスト用に3664でテストしてみ ることにしました。
今日はブレッドボードに接続するピンヘッダを半田付けしたとこまで。




ようやくDRO一号機用の入出力ユニットを作りはじめることにしました。

久々にH8/3664で動かしてみようとしたのだけど...完全に忘れ去っている。PC とはストレートだっけ?クロスだっけ? bpsはいくつだっけ? ブートモードにす るジャンパもわからないし、モニタまで入れてみてもコマンドもわからない。
できる限り未来の自分にやさしいように作っておいたはずだったのだけど...。 でも3664の場合RAMが2KBなのでちょっとしたヘルプも入れれないんだ。
体力の減退もそうだけど、記憶力の減退もすごい。メモなしに買物とかできな いんだよね。最近歳とることの恐怖を切実に感じている。 もともとすぐ忘れる方なのだけど、昔はキャッシュ落ち程度で済んだのが、ペー ジアウトされてしまうような感覚を覚える。
電子工作も忘れてしまった。ノート見てもなんだかわからない。数ヶ月前に自 分が書いていたのが嘘のようだ。


/etc/remote

hmon:dv=/dev/dty00:br#115200:pa=none:dc:
hmon57600:dv=/dev/dty00:br#57600:pa=none:dc:
hmon38400:dv=/dev/dty00:br#38400:pa=none:dc:
hmon19200:dv=/dev/dty00:br#19200:pa=none:dc:
hmon9600:dv=/dev/dty00:br#9600:pa=none:dc:

H8/Tiny (3664)は57600bps
H8(3052)は115200bps
でモニタを作ってある。

[3664]
SW1,SW2 ショートでブートモード。
SW1,SW2 オープンで通常モード。

PCとはストレートケーブルで接続する。

ブートモードにし、board/tiny_monitorでgmake all; gmake romwriteでモニタ
を書きこむ。

通常モードにジャンパを設定して57600bpsで接続。

$ tip hmon57600
connected
stack_start: 0xff80
ROM data: 0x16f0-0x170c
RAM data: 0xfe00-0xfe1c 28byte
bss: 0xfe1c-0xfe7c 96byte
NMI return address|CCR: 80000154
H8 Simple Monitor Build May 25 2009 11:16:34
>>

board/common/simple_monitor.cを参照。使えるコマンドは'l'コマンドのみ。
サンプルはboard/tiny_overlayとtiny_overlay_fiber。それぞれtiny_monitor
のオーバーレイモジュールになるので、先にtiny_monitorを作っておくことと、
tiny_monitorを作り直したら、オーバーレイもリンクし直すこと。

サンプルのモニタからの実行例。

>> l
ここでtipの'~>'コマンドでmotファイルをロードする。
~>Local file name? ../tiny_overlay/tiny_overlay.mot
98 lines transferred in 0 seconds 
!
Read 1990 byte. success
Start address: 0xf800
load 0xf93c (NMI)
load 0xf93c (TRAPA#0)
load 0xf93c (TRAPA#1)
load 0xf93c (TRAPA#2)
load 0xf93c (TRAPA#3)
load 0xf93c (Adress Break)
load 0xf93c (Sleep)
load 0xf93c (IRQ0)
load 0xf93c (IRQ1)
load 0xf93c (IRQ2)
load 0xf93c (IRQ3)
load 0xf93c (Wakeup)
load 0xf9e6 (Timer A)
load 0xf93c (reserved20)
load 0xf93c (Timer W)
load 0xf93c (Timer V)
load 0xf93c (SCI3)
load 0xf93c (I2C)
load 0xf93c (A/D)
stack_start: 0xfe00
ROM data: 0xfa98-0xfa9e
RAM data: 0xfa98-0xfa9e 6byte
bss: 0xfa9e-0xfa9e 0byte
NMI return address|CCR: f818
Process mode.
board_main
done.
>> 
>> ooooo

これはもう一つのサンプル。
>> l
~>Local file name? ../tiny_overlay_fiber/tiny_overlay_fiber.mot
160 lines transferred in 1 second 
!
Read 3343 byte. success
Start address: 0xf800
load 0xf93c (NMI)
load 0xf93c (TRAPA#0)
load 0xf93c (TRAPA#1)
load 0xf93c (TRAPA#2)
load 0xf93c (TRAPA#3)
load 0xf93c (Adress Break)
load 0xf93c (Sleep)
load 0xf93c (IRQ0)
load 0xf93c (IRQ1)
load 0xf93c (IRQ2)
load 0xf93c (IRQ3)
load 0xf93c (Wakeup)
load 0xf93c (Timer A)
load 0xf93c (reserved20)
load 0xf93c (Timer W)
load 0xf93c (Timer V)
load 0xf93c (SCI3)
load 0xf93c (I2C)
load 0xf93c (A/D)
stack_start: 0xfe00
ROM data: 0xfc8c-0xfc92
RAM data: 0xfc8c-0xfc92 6byte
bss: 0xfc92-0xfdc8 310byte
NMI return address|CCR: 136f818
Process mode.
board_main
done.
>> 
>> help
>> fiber_test
fiber_create: ff28 fd28 fadc
fiber_create: ff28 fdc0 fa70
fiber storage=152
fiber_twist: fiber_twist: 2->3
fiber_twist: fiber_twist: 3->1
ret1= 390
ret2= 44
fiber_1 start
fiber_1 return ret = 789
fiber_2 start
fiber_2 return ret = 123
fiber_test return ret=456
fiber_1 return ret = 999
fiber_2 return ret = 123
fiber_test return ret=456
>> 



自分用の机も作ることにしました。とりあえず荒木取りして桟積みしてシーズ
ニング。二戦終了後に作りはじめれるように。



昨日の記述、間違ってた。BビットはEFLAGSではなくTSSデスクリプタ。 コールゲート(今となっては一番の盲腸部分だけど)までやれば、デスクリプタ まわりは全部網羅かな。他の機能は独立しているので忘れた頃でもいいだろう。 x86脳の内にまとめておかないと、またここまで戻ってくるのが大変。これで x86は一休み。x86についてモヤモヤしていたのがかなり晴れた。
x86続き。コールゲートについて。

コールゲートは現在のタスク(TSS)のSS0:ESP0(0-2)にスタックを切り替えてコー
ルゲートデスクリプタ上のCS:EIPにジャンプする。

どの特権準位にジャンプするかはデスクリプタに登録するCSで設定する。

そのコールゲートを呼べる準位はデスクリプタ自体の準位で設定する。

呼出し後のDS,ES,FS,GSは自分で設定する。

コールゲート中の関数でDS,ES,FS,GSを使用した場合、元の(低い)準位に戻る
際にCPUがそれぞれのセグメントに0を設定する。
セグメントの保護はセグメントレジスタへの代入の時にされるので、そのまま
返してしまうと保護できないため、元の準位に戻った後に再設定することで
保護をする。
SSはプッシュされたのをポップするのでその必要はない。

引数は31個までCPUがスタック間コピーをする。引数の数はデスクリプタに設定する。

GDTに設定してあるのは場所だけ。内容はランタイムに設定することにした。
  { 0x0, 0x0, 0x0, 0x0, 0x0, "GATE_SYSTEMCALL" },


void callee_gate (int, int);
STATIC void (*user_gate) (int, int);

void
callgate_init ()
{
  union descriptor *d = descriptor (GDT_GATE_SYSTEMCALL);

  gate_call (&d->gate, GDT_CODE32, (addr_t)callee_gate, 2);引数は2つに設定。
  descriptor_set_priority (d, 3);特権準位3(最低)から呼べるように設定。
}

void
callee_gate_install (void (*func)(int, int))
{

  user_gate = func;
}

void
callee_gate_c (int arg0, int arg1)
{
  if (user_gate)
    user_gate (arg0, arg1);
}

コールゲートを呼んだ時に一番最初に実行されるところ。この段階でスタックは
切り替えられている。
/*
	-----------<---callee stack top (TSS SS0:ESP0)
	caller SS
	-----------
	caller ESP
	-----------
	parameter 1
	-----------
	parameter 2
	-----------
	caller CS
	-----------
	caller EIP <---callee ESP
	-----------
*/
FUNC (callee_gate)
	pushl	%ebp
	movl	%esp,	%ebp
	pushl	16(%ebp)  引数を積み直し。
	pushl	12(%ebp)
	call callee_gate_c
	addl $8, %esp     積んだ引数を元にもどして、
	popl	%ebp
	lret $8		SS:ESPに切り替えて,CS:EIPにジャンプ。8は引数の分。
この際にcallerのESPも同時にpopされるので、callerは引数分スタックを巻き戻す
必要はない。

FUNC (caller_gate)
	ENTER_32
	// backup Data segment.
コールゲートから帰ってくる時にCPUがDS,ES,FS,GSを0にする可能性があるので
退避しておく。
	movw	%ds,	%ax
	pushl	%eax
	// parameter.
	pushl	12(%ebp)
	pushl	8(%ebp)
	lcall	$GDT_GATE_SYSTEMCALL, $0
calleeのlretが二つの引数分のスタックを巻き戻すので、ここではスタックの
調整は不用。
	// restore Data segment.
この段階ではDS,ES,FS,GSは0の可能性があるので、復帰する。(この段階では
SSしか使えない。) QEMUはセグメントチェックが足りないところがあって、
DSが0になっていても、この先動いてしまう。
	popl	%eax
	movw	%ax,	%ds
	movw	%ax,	%es
	movw	%ax,	%fs
	movw	%ax,	%gs
	LEAVE_32
	ret




トマトは一花咲いてから定植と、本には書いてあった。蕾も見えたので来週あ
たりがよさそうだけれど、来週はレースの準備があるので植えることにしまし
た。

畝を作っている間に入浴。

ポットを外してみると、思ったほど毛根が生えてなかった。もっと心を鬼にして 水をあげなければよかったかな。

チンゲンサイに卵を見つけた。しかし今年は蝶がとても少ない。チンゲンサイ の成功もそこにあるかも。もう食用じゃないしこのまま餌にしようかなとも思っ たけれど、まわりの作物を考えて排除しました。

チンゲンサイの花。こうなるとアブラナ系なのを感じる。このまま種までとっ てみるつもり。

ネギはなんか食べられてます。不安。

トマトは参考書通りに一番目の本葉が土につくくらい斜めに植えました。 これ、夜になるともう茎が曲がって上を向いた。トマトは本当に面白い。

x86続き。

TSSについて。TSSに関わるEFLAGSのビットにはBとNTがある。Bは"Busy"。これ
は同じタスクに再入しないことを保証するためのもの。TSSの退避領域は一つし
かないので再入はできない。

NT"Nested Task"ビット、これはIRET命令とペア。IRET命令を発行した時に
NTビットが立っていれば、バックリンク先のTSSにタスクチェンジする。

割り込みハンドラでIRETを発行した時に、割りこまれたタスクではなくそれを
呼んだタスクまで戻ってしまうことを避けるために、割り込まれた時はCPUが
NTビットを退避してNT=0にして、割り込みハンドラを実行し、IRET終了後にNT
ビットを復帰することで、この問題を解決している。

x86のタスクまわりはこうすることにした。


   + 4GフラットのCS,DSをテンプレートに、そのタスクのセグメントは自分の
セグメントをLDTに持つ。(領域の設定はなし)
   + そのLDTはコード、データ、スタック、特権保護用のスタックの4つ。
   + スタックはそれぞれ小さくもつ。(そういうタスクなので)


タスクの設定
struct segment_config
{
  void *start;
  size_t size;
  uint16_t priority;
  uint16_t segment;
};

struct tss_config
{
  struct tss *tss; x86のTSS領域そのもの。
  uint16_t tss_segment; このTSS領域のセグメント。
  uint16_t gate_selector; このTSSへのゲート。
  int priority; タスクの準位。

  uint16_t code_segment; このタスクのアクセス領域へのテンプレート。このま
  まは使わない。

  uint16_t data_segment; このタスクのアクセス領域へのテンプレート。この
  ままは使わない。

  struct segment_config ldt; 上のテンプレートを元に設定したLDT。このタ
  スクはこのLDTを参照する。(CS,DS,ES,FS,GS)


  struct segment_config stack; タスクのスタック。

  struct segment_config stack_privilege; 特権準位を変更した時のスタック。
一個しか設定していないので、callできる準位は一つに限られる。(そういう
OSの設定)

  uint32_t eflags; タスク起動時のEFLAGS
  void (*func) (void); タスク起動時の入口。
  const char *name; これはTSSのOS依存部分に保存する。
};


#define	TSS_DEFAULT_STACK_SIZE	4096
#define	TSS_DEFAULT_LDT_NUM	4
#define	TSS_DEFAULT_LDT_SIZE	(4 * sizeof (union descriptor))

それぞれのタスクの必要とする領域。
struct task_local_storage
{
  struct tss tss;
  union descriptor ldt[TSS_DEFAULT_LDT_NUM];
  uint8_t stack[TSS_DEFAULT_STACK_SIZE];
  uint8_t stack_privilege[TSS_DEFAULT_STACK_SIZE];
} __attribute__ ((aligned (4096))); // struct tss limitation.
TSSがページ境界をまたぐとページングした時にフォルトするので、4096byte境界に
しておく。

struct task_local_storage task[5];
gdt_config.hと矛盾のないように。

STATIC struct tss bootstrap_tss; これはブートストラップの実行状態の退避
領域。ブートストラップは特権準位0なので、TSS領域から情報を読みとる(特権準
位の変更(上のみ)の時にスタックの変更する時にある)ことはない。


STATIC void task_user0 (void);
STATIC void task_user3 (void);

ダブルフォルト、TSS違反、スタックフォルト用の設定。
#define	EXCEPTION_TASK(n, cause, func)					\
    {									\
      &task[n].tss,							\
      GDT_TSS_ ## cause, GDT_GATE_ ## cause,				\
	0,	/* priority 0 */					\
      GDT_CODE32, GDT_DATA32,						\
      { task[n].ldt, TSS_DEFAULT_LDT_SIZE, 0, GDT_LDT ## n },		\
      { task[n].stack, TSS_DEFAULT_STACK_SIZE, 0, GDT_DATA32 },		\
      { 0, 0, 0, 0 },/* No privilege change. */				\
特権準位0なので、他の準位にコールゲートで移行することはないので設定する
必要がない。
      0,								\
      func, #cause							\
    }

#define	APPLICATION_TASK(n, app, func, priority)			\
    {									\
      &task[n].tss,							\
      GDT_TSS_ ## app, GDT_GATE_ ## app,				\
      priority,								\
      GDT_CODE32, GDT_DATA32,						\
      { task[n].ldt, TSS_DEFAULT_LDT_SIZE, priority, GDT_LDT ## n },	\
      { task[n].stack, TSS_DEFAULT_STACK_SIZE, priority, GDT_DATA32 },	\
      { task[n].stack_privilege, TSS_DEFAULT_STACK_SIZE, 0, GDT_DATA32 },\

stack_privilegeの特権準位を0にしているのはこのOSの仕様。コールゲートの
準位は0 だけということ。この準位はコールゲートから呼びだされるコードセ
グメントの準位と等しくしておかないといけない。低かった場合、スタックに
攻撃される可能性があるので。そういう設定をした場合はTSS例外でフォルトす
る。

      0,								\
      func, #app							\
    }

struct tss_config tss_config [] =
  {
    EXCEPTION_TASK (0, DOUBLE_FAULT, task_exception_entry),
    EXCEPTION_TASK (1, INVALID_TSS, task_exception_entry),
    EXCEPTION_TASK (2, STACK_OVERRUN, task_exception_entry),
    APPLICATION_TASK (3, TASK0, task_user0, 0),特権準位0のタスク
    APPLICATION_TASK (4, TASK3, task_user3, 3),特権準位3のタスク
  };

void
task_init ()
{
  struct tss_config *config;
  int i;

  // Setup my backup area.
  tss_install_gdt (&bootstrap_tss, GDT_TSS_KERNEL, GDT_GATE_KERNEL);
  strncpy (bootstrap_tss.osdep, "kernel", TSS_OSDEP_MAX);

  // Load myself. (no task change here.)
  tss_set_tr (GDT_TSS_KERNEL);
  printf ("%s: tss:0x%x size:0x%x\n", __FUNCTION__, &bootstrap_tss,
	  sizeof bootstrap_tss);

  // Setup TSS
  for (i = 0, config = tss_config; i < sizeof tss_config / sizeof tss_config[0];
       i++, config++)
    {
      memset (config->stack.start, 0xa5, config->stack.size);
      if (config->stack_privilege.start)
	memset (config->stack_privilege.start, 0xa5,
		config->stack_privilege.size);

  TSSの内容を作って、
      tss_setup (config);
  GDTにそのTSS領域を設定し、それを呼ぶゲートを設定する。
      tss_install_gdt (config->tss, config->tss_segment, config->gate_selector);
    }

  tss_dump (GDT_TSS_KERNEL);
  tss_dump (GDT_TSS_TASK0);
  tss_dump (GDT_TSS_TASK3);
  // Now OK to use gate.
  tss_call (GDT_GATE_TASK0);
  tss_call (GDT_TSS_TASK0);

  IRETで帰ってくる。IRETによってTASK0のTSSのEIPにはIRET命令の次の命令が
設定されるので、次にタスクを呼んだ時にはそこからになる。
}

void
tss_setup (const struct tss_config *conf)
{
  struct tss *tss = conf->tss;
  int priority = conf->priority;
  const struct segment_config *seg;

  memset (tss, 0, sizeof (struct tss));

  このタスクのCS,DS,ES,FS,GSは全てここでセットアップされたLDTを参照する。
  // Construct my LDT.
  tss->ldt = ldt_setup (conf);

  // Stack for privilege change.
  seg = &conf->stack_privilege;
  tss->esp0 = (uint32_t)seg->start + seg->size - 16;
  tss->ss0 = 24 | SELECTOR_TI | seg->priority; LDTを参照。24はそう決めた。
  このプライオリティはコールゲート呼びだされる準位でないといけない。
  この場合、seg->priorityは0でないといけない。
  tss->ss1 = tss->ss2 = 0;	// unused.
  tss->esp1= tss->esp2 = 0;	// unused.

  // Normal stack.
  seg = &conf->stack;
  tss->eip = (uint32_t)conf->func;
  tss->eflags = conf->eflags;
  tss->esp = (uint32_t)seg->start + seg->size - 16;

  // Code/Data segment.
  tss->cs = 8 | SELECTOR_TI | priority;  LDTを参照。8はそう決めた。
  tss->ds = tss->es = tss->fs  = tss->gs = tss->ss =
    16 | SELECTOR_TI | priority; LDTを参照。16はそう決めた。

  // IOPL
  tss->iomap = offsetof (struct tss, io_mask);
  tss->io_mask[TSS_IO_MASK_MAX - 1] |= 0xff000000;	// Marker.

  // OS depenedent.
  strncpy (tss->osdep, conf->name, TSS_OSDEP_MAX);
  tss->osdep[TSS_OSDEP_MAX - 1] = '\0';
}

タスクが参照するLDTの設定

uint16_t
ldt_setup (const struct tss_config *conf)
{
  union descriptor *d;
  union descriptor *ldt = (union descriptor *)conf->ldt.start;
  int priority = conf->priority;

  このLDT自体の場所をGDTに登録します。
  // LDT itself.
  d = descriptor (conf->ldt.segment);
  descriptor_set_base (&d->desc, (uint32_t)conf->ldt.start);
  descriptor_set_size (&d->desc, conf->ldt.size);
  descriptor_set_priority (d, priority);

  テンプレートをLDTにコピーして特権準位を設定します。

  LDTを使っているのは、テンプレートはメモリの領域だけの設定にしておいて、
  そのコピーに対して各自特権準位を設定したいため。GDTは保護モードになっ
  てすぐ設定したいので、先にスタティックに作っておきたいけれど、LDTは楽
  に作れるのでこういう設定。

  // Copy code segment.
  d = descriptor (conf->code_segment);
  ldt[1] = *d;
  descriptor_set_priority (ldt + 1, priority);// Set DPL
  // Copy data segment. (including stack)
  d = descriptor (conf->data_segment);
  ldt[2] = *d;
  descriptor_set_priority (ldt + 2, priority);// Set DPL

  // Copy stack segment for privilege change. (If any.)
  if (conf->stack_privilege.segment)
    {
  タスクの特権準位が0なら、コールゲートで特権準位変更をすることはできな
  いのでこの処理はいらない。使われないので。
      d = descriptor (conf->stack_privilege.segment);
      ldt[3] = *d;
      descriptor_set_priority (ldt + 3, conf->stack_privilege.priority);

  このconf->stack_privilege.priorityは、コールゲートで指定される特権準
位。
    }

  return conf->ldt.segment;
}




朝っぱら新木場のヘリポートのマイナミにAVガス買いに行ってきました。びっ
くりする程首都高が空いていて、45分で着いた。

航空機優先なので、在庫の関係で売れない時があるので予め電話して欲しいと いうことでした。なんとか今日は買えました。来週が蔵出しだから厳しいとか。 312.2円/lでした。
誓約書を書いている時ふと誓約書バインダーを見ると、前に買いに来た人は...知 り合いでした^^。何走らせるつもりだ。

フォークのエア漏れわかりました。減衰調整のバルブのセット位置が低すぎて (全閉にするとトップ面より下がる)、ここのOリングがきちっとはまってなかっ たからだったみたい。

腰上は交換部品なし。ファイナルは結局17:35にして、6速はおまけ程度にする ことにしました。17:37以上にすると最終を1速で廻れなくなるし、そうなると 1速-5速か、2速-6速かの違いだけになる。ダンロップで1速が使いやすくなるけ れど、あそこは捨てていい場所だ。ということで。

次の富士の準備ができた。



RS125整備続き。クランクケースとチェーンとFキャリパーを洗いました。チェー
ンはいつも通り残ガスで洗うのだけど(二本目6l入れて残0.5lだった。7l入れな
いと不安かも)、これは鉛入り。ビニール手袋して洗います。

ちょっとリードバルブが浮き気味なので、新品投入。いつまでも後生大事にNFの パーツを持ってても仕方ないし。でもガスケットは慎重に使いまわし。ヘッドの Oリングも使いまわし。






体がギシギシする。

フォークの上をバラしてみたところ、特に問題はない感じだけど...。外側のO リングは汎用部品なのでこれだけ注文。内側のは残念ながらHRC部品だった。 HRC部品がホンダで注文できたらいいのに。

キャブとカウルを洗っただけ。そういえばオイル交換を忘れていた。




目覚しの十分前にピッと目が覚める。今日は気合い十分。富士へ。7時過ぎにつ
いたらまだゲートが開いてない。びっくり。7時半に開いた。ガススタが走行直
前まで開かないのもこの前わかったので、あらかじめガスは買ってきておきま
した。

着いてマシンのチェックをしていると、フロントブレーキを握って思いっきり フォークを沈ませるとプシュっと音がする。フォークキャップのOリングが へたっていた。仕方ないので今日はこのまま。
AVガス2:ハイオク3くらいで、EVOREX R2 30:1で(CR85の時は40:1)。
9:20
D.alt. 1019m 21.3℃ 60.7% 943.3hPa

PJ38 MJ172 SJ45 R1467J 3/5 4速まで13000 5速12800 6速12500
17:36
1.9/1.9
5l チェッカー後ガス欠
3枚 62℃
best 2'8.3
レーシングしてみると、12000rpmまでしか吹けないし、 全開固定でガボつきはじめるし、明らかに濃いのだけど、とりあえず一本目は これで。実際走ってみると13000rpmまで廻る。ファイナル17:36にして、 白い線で5速、コントロールラインで12500rpm、ちょっと先で6速で12000ひっぱり で、下り坂になって調子のいいときは12500rpmまで。悪いと12000rpm
ちょっとピーキー過ぎて走り辛い。クラッチの切れも悪くて半クラあてづらい。 タイムは2'8.3まで
チェッカー受けてピットに戻る周の最終コーナーでガス欠になってしまった。 レッカー待ってもよかったんだけど、まぁここからなら。と思って「押してい きます」と出発したものの、遠い! 富士の大きさを忘れてたよ。出口間違えて 引き返したりして、大変な目にあった。レッカー待てばよかった。

タンク外しただけでヘッドを開けれるのがこういう時はうれしい。ヘッドもシ リンダもヘッドも問題なし。(実はシフトミスして14000rpmまで廻してしまった)

二本目はJNを3/5から2/5にしました。
11:30
D.alt 1069m 22.2℃ 64.6% 942.7hPa
17:36
6l
3枚62℃
残スト0/10

best 2'6.1
二本目は最初のクリアラップを狙って一番に入りました(今日は人が多く、一本 目はほとんどクリアラップがとれなかった)。J/N絞ったのもいい感じ。スローも もう2段くらい絞れるような感じ。
Fの残ストは0。エア抜けしてると厳しいのね。
1コーナーブレーキ150m。(去年は130mくらいまでいけたのだけど...)
1コーナーはブレーキしたままかなり入れる。
コカコーラのカットインがどうしてもわからない。75mくらいでいいと思うのだ
けど、その状況だとまだ早いような気がして遅れてしまって時既に遅し。マシ
ンだけ突っこませるかな。
100Rの立ちあがりは相変わらずモヤモヤとパーシャル。
ヘアピンは17:36にして1速ではショートになってしまった。2速だとロング過ぎ。
300Rは5速ひっぱりで微妙に足りないくらい。150m
13コーナー、ネッツ、最終が1速でショート。
なんかファイナルが微妙なことになってしまった。まだ上に余裕あるから 16:37までにして、ヘアピン、13、ネッツ、最終を2速で...というのも無理か。 1速1.824で2速1.5だからね。今度はロング過ぎてしまう。

久々の富士、楽しかったです。もうちょっとマメに来たい。せっかくライセン スあるんだし。



x86続き。例外の処理のフレームワークが大体できたので実際の例外を起こして
チェック。ここまでやるとかなりのQEMUいじめ。QEMUがハンドルできないのは
  • DR7のGDビットをたててデバッグレジスタのアクセスで例外#1が発生しない。
  • 途中でSSを変更してもそのセグメントリミットが反映されない。
  • CR0 NEビットを立ててもFPUのエラーで#16を発生しない。
  • CR0 AMビットを立ててもアラインメントエラーで#17を発生しない。
実際のところ、どれもまず使わないところだ。
ちまちまフロッピーに乗せて実機でテストしました。
static int bound[2];ここなのは、インラインアセンブラでうまく乗せること
ができなかったので直接シンボル参照させるため。

uint32_t
test (int32_t argc, const char *argv[])
{
  union descriptor *d;
  uint32_t r, r0, r1;

  r = r0 = r1 = 0;

  if (argc < 2)
    {
      printf ("Specify exception #.\n");
      return 0;
    }
  switch (atoi(argv[1]))
    {
    case 0:
      // Divided by zero
      __asm volatile ("div %0":: "r"(0));←ここで例外。
      break;
    case 1:
      // debug exception. // QEMU bug.
      __asm volatile ("movl %0, %%dr7":: "r"(0x2000));	// GD/DR7
      __asm volatile ("movl %%dr7, %0": "=r"(r)); ←ここで例外。QEMUは素通り。
      eflags_dump (eflags_get ());
      break;
    case 3:
      // break point
      __asm volatile ("int $3");
      break;
    case 4:
      // over flow
      r = eflags_get ();
      r |= (1 << 11);	// set OF
      eflags_set (r);
      __asm volatile ("into");←ここで例外。
      break;
    case 5:
      // boundary check
      bound[0] = 3;
      bound[1] = 6;
      for (r0 = 3; r0 < 10; r0++)
	{
	  printf ("%d\n", r0);
	  __asm volatile ("bound %0, bound":: "r"(r0)); r0が7になった所で例外。
	}
      break;
    case 6:
      // Invalid Opcode
      __asm volatile (".long 0xffffffff");←ここで例外。
      break;
    case 7:
      // extension_not_available
      // Disable FPU (EM bit of CR0)
      __asm volatile ("movl %%cr0, %0\n orl $4, %0\n movl %0, %%cr0"::"r"(r));
      // ESC (Escape to coprocessor instruction set.
      __asm volatile ("fcos");←ここで例外。
      break;
    case 8:
      // double fault. QEMU bug. (don't reflect segment size change.)
      {
	__asm volatile ("movw %0, %%ss":: "r"((uint16_t)GDT_TEST32));
	GDT_TEST32は現在のESPでは絶対にリミットを外れるものに設定。
	ここでpushすれば、スタック例外になる(QEMUは素通り)
	__asm volatile ("ljmp	$0, $0");←ここで例外。
	このljmpで一般保護例外が起き、その例外処理でスタックにCS,EIP,ErroCode
	をプッシュするところで、スタック例外が起きてダブルフォルト。
	QEMUはスタックのリミットを見ていないので、ダブルフォルトでなく
	一般保護例外になってしまう。
      }
      break;
    case 10:
      // Invalid TSS
      {
	struct tss *tss = tss_get_context (GDT_TSS_USER);
	tss_call (GDT_GATE_USER);
	tss->cs = GDT_DATA32;	// causes exception.
	CSにコードセグメント以外のものを入れてそのTSSに切り替え。
	tss_call (GDT_GATE_USER);←ここで例外。
      }
      break;
    case 11:
      // No segment.
      {
	union descriptor *d = descriptor (GDT_TEST32);
	printf ("ok\n");
	__asm volatile ("movw %0, %%gs":: "r"((uint16_t)GDT_TEST32));
	d->desc.access_byte &= ~PRESENT;
	printf ("NG\n");
	__asm volatile ("movw %0, %%gs":: "r"((uint16_t)GDT_TEST32));←ここで例外。
      }
      break;
    case 12:
      // Stack fault.
      {
	d = descriptor (GDT_TEST32);
	printf ("ok\n");
	__asm volatile ("movw %0, %%ss":: "r"((uint16_t)GDT_TEST32));
	d->desc.access_byte &= ~PRESENT;
	printf ("NG\n");
	__asm volatile ("movw %0, %%ss":: "r"((uint16_t)GDT_TEST32));←ここで例外。
      }
      break;
    case 13:
      // Generic exception
      __asm volatile ("ljmp	$0, $0");←ここで例外。
      break;
    case 14:
      // Page fault. XXX notyet
 ページングはしてないのでまだ。しない予定だけれど、アンキャッシュ領域の
設定に欲しくなるかも?
      // CR0 PG bit
      __asm volatile ("movl %%cr0, %0\n orl $0x80000000, %0\n movl %0, %%cr0"::
		      "r"(r));
      break;
    case 16:
      // Floating point error. QEMU bug.
      // CR0 NE bit.
      __asm volatile ("movl %%cr0, %0\n orl $0x20, %0\n movl %0, %%cr0"::"r"(r));
      {
	__asm volatile ("fdiv %st, %st(0)");
	__asm volatile ("wait");←ここで例外。
	QEMUは素通り。
      }
      break;
    case 17:
      // Alignment error. QEMU bug.
      // CR0 AM bit.
      __asm volatile ("movl %%cr0, %0\n orl $0x40000, %0\n movl %0, %%cr0"::"r"(r));
      // Change to CPL3 task.
      この例外は特権レベル3でないと起きないので3のタスクで実行。
      tss_call (GDT_GATE_APP);←ここの中で例外。
      QEMUは素通り。
      break;
    case 18:
      // Machine check.
      break;
    }

  return 0;
}

これは#17のアライメントエラーを起させる特権レベル3のタスク。
void
user_app ()
{
  int i[2];

  while (/*CONSTCOND*/1)
    {
      uint32_t r;
      r = eflags_get ();
      r |= (1 << 18);	// set AC (Alignment Check)
      eflags_set (r);
      __asm volatile ("movl %0, %%eax":: "g"(i));
      __asm volatile ("addl $1, %eax");
      __asm volatile ("movl (%eax), %ecx");←ここで例外。
      //      __asm volatile ("movw %%cs, %0": "=g"(i));
      //      __asm volatile ("movw %0, %%ds":: "r"((uint16_t)GDT_DATA32));
      //      __asm volatile (".long 0xffffffff");
      __asm volatile ("iret");
    }
}
明日はついに富士走れそう。



おととい、スイカの苗を植えつけました。苗が多すぎて庭中のいろいろなとこ
ろに植えてもまだ8株ほど残っている。



水で濡れているところがスイカ。

ジャガイモの花。やたらこの株だけ咲くのが早い。もしかしたら他のは蕾を食 べられているのかも。
そういえば、毎朝、テントウムシダマシを探しては、金魚の餌にしていたのだ けど、この2、3日まったく見かけなくなった。テントウムシダマシは、ぱっく り食べるのに、同じような大きさのオタマジャクシは食べない。わかってるの かな?
まだ収穫には早いのだけど、畝を掘って直径3cmほどのをとって食べてみた。水 で洗って、そのままサランラップでくるんで電子レンジで2分。これはおいしい。 これからおやつ用にちょこちょこ掘ろうかな。いきなり全部収穫だと食べきれ ないし。
チンゲンサイも食べきるのが大変。毎日チンゲンサイです。下手に成長を待た ずにどんどん収穫すればよかった。

x86続き。例外をタスクで受けとった時は、エラーコードのみ切り替え先のタス クのスタックにプッシュされる。(CS:IPはバックリンク先のTSSを見ればよい)


徹カラで、すっかりお疲れ。最近は朝型の生活なので2時過ぎると辛い。後半は
寝てしまった。

自分だけアイマスについていけなかった。勉強不足なのはわかっていたけれど、 ショックだ。
パセラの前に居酒屋に行ったのだけど、金曜なのが信じられないくらい人が少 なかった。昔はなんとか押しこんで入るくらいだったのに。



今日は午前、富士に行くつもりだったのだけど、体調が悪くパス。これからは
マシンのメンテだけじゃなく自分のメンテもしないと。自分が走れないんじゃ
どうしようもない。


ということで今日から節酒することにした。焼酎は二杯までにしよう。
しかし明日は徹カラだ。二年振りの会合だから仕方ない。
チンゲンサイを半分ほど(食べれる分くらい)収穫しました。菜園活動では初め ての普通に食材として使える収穫だったのだけど、食べてみると普通だった。 買ってきたのとそう変わらないかな。

x86続き。ブートローダまで終わったので、カーネルに。例外処理について。例 外処理のうち、一部はタスクゲートを使った方がよいのがある。例外処理は CS:IP、例外によってはエラーコードをスタックにプッシュして呼び出されるの で、スタックが不定である可能性がある場合には、タスクゲートを登録してお くことで、そのタスクの確実なスタックにプッシュして例外処理をできる。
  • ダブルフォルト:これが起きる時にはスタックも信用できない可能性がある。 トリプルフォルトでリセットなので、その前にEIPくらいは表示したい。
  • 無効TSS: TSSの切り替えで失敗した時の例外。状況によっては切り替えた 先のTSSのSSを参照するので、それが信用できない場合もある。
  • スタックオーバーラン:スタックで例外が起きた時。実際にはSSは4Gフラットでとっているのでこれは起こることはなさそうだけれど。
ということで、このためにx86のタスク機能を実装。
CPUのファームウェアが退避/復旧するのはこの形。

struct tss
{
  uint16_t backlink;	uint16_t pad0;
  uint32_t esp0;
  uint16_t ss0;		uint16_t pad1;
  uint32_t esp1;
  uint16_t ss1;		uint16_t pad2;
  uint32_t esp2;
  uint16_t ss2;		uint16_t pad3;
  uint32_t cr3;
  uint32_t eip;
  uint32_t eflags;
  uint32_t eax;
  uint32_t ecx;
  uint32_t edx;
  uint32_t ebx;
  uint32_t esp;
  uint32_t ebp;
  uint32_t esi;
  uint32_t edi;
  uint16_t es;		uint16_t pad4;
  uint16_t cs;		uint16_t pad5;
  uint16_t ss;		uint16_t pad6;
  uint16_t ds;		uint16_t pad7;
  uint16_t fs;		uint16_t pad8;
  uint16_t gs;		uint16_t pad9;
  uint16_t ldt;		uint16_t pada;
  uint16_t t;		uint16_t iomap;
  //#define	IO_MASK_MAX	0x800

#define IO_MASK_MAX 1 最低でもこれはいる。そして最後のバイトを0xffに。
4byteアライン。それはこのTSSのセグメントの大きさをCPUがチェックするから。

  uint32_t io_mask[IO_MASK_MAX];
} __attribute ((packed));

この構造体全体をデスクリプタとして登録する。アクセスバイトでこのデスク
リプタがTSSであることを宣言する。このTSSのLDTの設定はGDTの配列をこれも
そのままセグメントとしてアクセスバイトでLDTと設定して登録しておき、その
セレクタをTSSのldtに設定。(これはこのOSの設定)

タスクゲートは、このタスクデスクリプタへのポインタ。GDTへの参照でljmp,
lcallする分にはデスクリプタをオペランドにしても、ゲートをオペランドにし
てもどっちでもいい。しかしIDTに登録できるのはゲートだけ。IDTのゲートは
GDTのTSSセグメントを指すようにする。ゲートに登録するのはセグメントだけ。
ゲートにゲートを登録すると一般保護例外。

void
tss_install_gdt (struct tss *tss, uint16_t desc_idx, uint16_t gate_idx)
{
  union descriptor *d;

ここでstruct tssをセグメントとしてGDTに登録する。
  // TSS itself.
  d = descriptor (desc_idx);
  descriptor_set_base (&d->desc, (uint32_t)tss);
  descriptor_set_size (&d->desc, sizeof (struct tss));

そのセグメントへのゲートをGDTに登録
  // Corresponding gate.
  d = descriptor (gate_idx);
  gate_task (&d->gate, desc_idx);
}

IDTは別にまた登録。
    { 0x08, SYS_TASKGATE, 0, GDT_TSS_DOUBLE_FAULT, 0 }, // double fault
    { 0x09, SYS_INTRGATE, 0, GDT_CODE32, abort09_cop_segment_overrun },
    { 0x0a, SYS_TASKGATE, 0, GDT_TSS_INVALID_TSS, 0 }, //invalid_tss
    { 0x0b, SYS_INTRGATE, 0, GDT_CODE32, fault0b_no_segment },
    { 0x0c, SYS_TASKGATE, 0, GDT_TSS_STACK_OVERRUN, 0 },//stack overrun
    { 0x0d, SYS_INTRGATE, 0, GDT_CODE32, fault0d_general_protection },
タスクゲートの参照先はGDTのTSSセグメント。ゲートではない。

void
exception_init ()
{
  struct tss_config *config;
  int i;

最初のタスクスイッチで今のコンテキストを退避する場所を登録する。
  // Setup my backup area.
  tss_install_gdt (&tss_kernel, GDT_TSS_KERNEL, GDT_GATE_KERNEL);

ltr命令は退避する場所を設定して、BUSYビットを立てるだけで、タスクスイッ
チはしない。なのでtssの中身の設定は不用。最初のスイッチでCPUがこの場所
に退避してくれる。
  // Load myself. (no task change)
  tss_install_tr (GDT_TSS_KERNEL);

タスクを登録。これは全てTSSの内容を設定しておく必要がある。
  for (i = 0, config = tss_config; i < sizeof tss_config / sizeof tss_config[0];
       i++, config++)
    {
      tss_setup (config->tss, config->func, config->stack_top);
      tss_install_gdt (config->tss, config->segment, config->gate);
    }

  // Load IDT.
  idt_init ();

  // Now OK to use gate.
#define	tss_call(selector)	__asm volatile ("lcall %0, $0":: "i"(selector));
  tss_call (GDT_GATE_USER);ゲートでも、
  tss_call (GDT_TSS_USER);セグメントでもよい。(特権保護がなければ)


}

void
tss_install_gdt (struct tss *tss, uint16_t desc_idx, uint16_t gate_idx)
{
  union descriptor *d;

これはTSS構造体の領域をセグメントとして登録。
  // TSS itself.
  d = descriptor (desc_idx);
  descriptor_set_base (&d->desc, (uint32_t)tss);
  descriptor_set_size (&d->desc, sizeof (struct tss));

そのTSS構造体にジャンプするゲートを登録。GDT経由なら、なくてもいい。
  // Corresponding gate.
  d = descriptor (gate_idx);
  gate_task (&d->gate, desc_idx);
}

void
tss_install_tr (uint16_t selector)
{

  __asm volatile ("ltr	%0":: "a"(selector));
}

void
tss_setup (struct tss *tss, void (*start_func)(void), uint32_t stack_start)
{
  struct lgdt_arg gdt;
  union descriptor *d;

  // LDT
GDTをそのままLDTとして登録(ダミー)。登録すべきものが欲しいので。
  __asm volatile ("sgdt %0" : "=m"(gdt):);
  d = descriptor (GDT_LDT);
  descriptor_set_base (&d->desc, gdt.base);
  descriptor_set_size (&d->desc, gdt.limit + 1);

  memset (tss, 0, sizeof (struct tss));

  tss->esp0 = tss->esp1= tss->esp2 = stack_start;
  tss->ss0 = tss->ss1 = tss->ss2 = GDT_DATA32;

  tss->eip = (uint32_t)start_func;
  tss->eflags = eflags_get ();	//XXX ここはおいおい。
  tss->esp = stack_start;
  tss->ldt = GDT_LDT;
  tss->cs = GDT_CODE32;
  tss->ss = tss->ds = tss->es = tss->fs  = tss->gs = GDT_DATA32;
  tss->iomap = offsetof (struct tss, io_mask);
  tss->io_mask[IO_MASK_MAX - 1] |= 0xff000000;	// Marker.

  tss->eax = 0xac1dcafe;テスト用の引数。
}


呼び出される側は

void
user_task ()
{

  int i = 0;
  int arg = 0;
  __asm volatile ("movl %%eax, %0": "=g"(arg):);

  while (/*CONSTCOND*/1)
    {
      printf ("hello tss %x %d\n", arg, i++);
      __asm volatile ("iret"); ここでリターン。
      printf ("world\n"); 次の呼び出された時はここから。
    }
}
やっとこのあたりわかった。どれを読んでもこのあたり何だかよくわからない 記述が多いと思っていたのだけど、実際自分で書いてもうまく書けない。忘れ た頃の自分にわかればいいけど。



トマトが水くれサイン(ふにゃ〜と垂れる。水やり過ぎでも垂れる感じ)を出し
ていたので水やり。本当にトマトはよく動く。最近はかなり大きくなって動き
も少なくなってきた。もっと小さい頃は、夜になると葉を閉じて、昼になると、
太陽の方向に体を傾けるのだ。

意外に苗の成長がどれもいい。ポット上げした段階で、どれがよかったのかも もうわからない。逆にスイカはポット上げしてから成長の善し悪しが分かれた。
トマトはポット上げまでの段階で成長が悪いのが選別されたからかな。スイカは 種の大きさで、初期段階まではそこそこの成長が確実だからか。

しかし体調悪いです。ドリンク剤はほどほどにしておこう。MCFAJの一戦で熱あ るのにユンケルガブ飲みでごまかしたのが延々と尾をひいてる感じだ。
SA5、pkgsrc/meta-pkgs/gnomeでmakeかけたら一日経っても終わらない。さすがに 500MHzだと、コンパイルはきつい。5.99.11は安定してる。
本体の熱は赤外線放射温度計で測ってみたところ、最大で40℃前後。



なんとかXも使えるようになり、P2048も認識できたので、使えるようになりま
した。仕上げにモリモリpkgsrcからインストール中です。

今年はどうも岡山には行けなさそう(日程的に体力がもたない)なのであまり使 う機会はないかな。C2山手トンネル開通当初は、流れの読みに筑波の帰りから も使っていたけれど、もう流れはわかったし。

これでPORTEGE3440CTは、お役目終了。いいキーボードだったのに。

SA5続き。xpmだとハングするのをいろいろ試したところ、透過色があるとハン
グすることがわかった。
追ってみると、xf86-video-geode/src/cim/cim_gp.cの
void
gp_wait_until_idle(void)
{
    unsigned long temp;

    while (((temp = READ_GP32(GP3_BLT_STATUS)) & GP3_BS_BLT_BUSY) ||
        !(temp & GP3_BS_CB_EMPTY)) {
        ;
    }
}

これが帰ってこない。BitBLTの終了を待っているのだけど、いつまでたっても
コマンドキューに入りっぱなしで終了しない。

これはEXAで使われるので、Option "NoAccel"にすると、これはSegmentation
fault.これはlx_memory.cの簡単なバグを修正すればいい。

diff -ur src.orig/lx_memory.c src/lx_memory.c
--- src.orig/lx_memory.c	2009-02-17 03:46:00.000000000 +0900
+++ src/lx_memory.c	2009-05-12 17:28:10.000000000 +0900
@@ -287,7 +287,7 @@
 	xf86DrvMsg(pScrni->scrnIndex, X_INFO, " Cursor: 0x%x bytes\n",
 	    LX_CURSOR_HW_WIDTH * 4 * LX_CURSOR_HW_HEIGHT);
 
-    if (pGeode->pExa->offScreenBase)
+    if (!pGeode->NoAccel && pGeode->pExa && pGeode->pExa->offScreenBase)
 	xf86DrvMsg(pScrni->scrnIndex, X_INFO, " EXA: 0x%x bytes\n",
 	    (unsigned int)(pGeode->pExa->memorySize -
 		pGeode->pExa->offScreenBase));

これでやっとXが使えるようになりました。アクセラレーションは効かないけど、
効いたところでたかがしれてるので問題ない。

FOMA P2048。これはやっぱり
RCS file: /cvsroot/src/sys/dev/cardbus/rbus.c,v
retrieving revision 1.27
diff -u -r1.27 rbus.c
--- rbus.c	14 Mar 2009 21:04:19 -0000	1.27
+++ rbus.c	12 May 2009 11:48:34 -0000
@@ -82,6 +82,10 @@
 	DPRINTF(("rbus_space_alloc: addr %lx, size %lx, mask %lx, align %lx\n",
 	    (u_long)addr, (u_long)size, (u_long)mask, (u_long)align));
 
+#if 1 //-uch P2048
+	if (addr == 0x2e8)
+	  mask = 0;
+#endif
 	addr += rbt->rb_offset;
 
 	if (mask == 0) {

これ入れないとだめだった。



なんかまた熱っぽい。困ったな。


SA5でXがなんらかの拍子で落ちるのの確実なのを一つみつけた。emacsで tool-bar-modeを1にするとその瞬間落ちる。
そこから探っていってみたところ、xpmの表示をしようとすると落ちる。それ以外 のフォーマットなら問題なし。
なんだろう。



工人舎SA5ST08A続き。なんとかX動いたものの、なんらかの拍子にフリーズして
しまい、実用には程遠い段階。なんらかの拍子がなんなのか。



ここまでのまとめ。
NetBSDカーネルには

#include <sys/cdefs.h>
#include <sys/param.h>
#include <sys/systm.h>

#include <sys/device.h>
#include <sys/conf.h>
#include <machine/cpufunc.h>

dev_type_read(msr_read);
dev_type_write(msr_write);

const struct cdevsw msr_cdevsw =
  {
    .d_open = nullopen,
    .d_close = nullclose,
    .d_read = msr_read,
    .d_write = msr_write,
    .d_ioctl = noioctl,
    .d_stop = nostop,
    .d_tty = notty,
    .d_poll = nopoll,
    .d_mmap = nommap,
    .d_kqfilter = nokqfilter,
    .d_flag = D_OTHER
  };

void msrattach(int);

void
msrattach(int n)
{
  // nothing to do.
}

int
msr_read(dev_t dev, struct uio *uio, int ioflag)
{
  uint64_t r;

  r = rdmsr ((uint32_t)uio->uio_offset);
  printf ("%s: %08x %08x =>%llx\n", __FUNCTION__, (uint32_t)uio->uio_offset,
	  uio->uio_resid, r);

  return uiomove (&r, sizeof r, uio);
}

int
msr_write(dev_t dev, struct uio *uio, int ioflag)
{
  uint64_t r;
  int error;

  if ((error = uiomove (&r, sizeof r, uio)) != 0)
    {
      printf ("*** %s: %x %x %llx\n", __FUNCTION__, (uint32_t)uio->uio_offset,
	      uio->uio_resid, r);
      return error;
    }

  printf ("%s: %x %x %llx\n", __FUNCTION__, (uint32_t)uio->uio_offset,
	  uio->uio_resid, r);
  wrmsr ((uint32_t)uio->uio_offset, r);

  return 0;
}
をsys/arch/i386/i386/msr.cで追加。

Index: sys/arch/i386/conf/GENERIC
===================================================================
RCS file: /cvsroot/src/sys/arch/i386/conf/GENERIC,v
retrieving revision 1.917
diff -u -r1.917 GENERIC
--- sys/arch/i386/conf/GENERIC	12 Nov 2008 14:36:31 -0000	1.917
+++ sys/arch/i386/conf/GENERIC	8 May 2009 06:17:02 -0000
@@ -1540,3 +1541,5 @@
 
 options 	PAX_MPROTECT=0		# PaX mprotect(2) restrictions
 options 	PAX_ASLR=0		# PaX Address Space Layout Randomization
+
+pseudo-device	msr
Index: sys/arch/i386/conf/files.i386
===================================================================
RCS file: /cvsroot/src/sys/arch/i386/conf/files.i386,v
retrieving revision 1.338
diff -u -r1.338 files.i386
--- sys/arch/i386/conf/files.i386	13 Jun 2008 17:26:33 -0000	1.338
+++ sys/arch/i386/conf/files.i386	8 May 2009 06:17:03 -0000
@@ -520,3 +520,6 @@
 
 include "arch/i386/conf/majors.i386"
 endif #xen
+
+defpseudo msr
+file	arch/i386/i386/msr.c		msr
Index: sys/arch/i386/conf/majors.i386
===================================================================
RCS file: /cvsroot/src/sys/arch/i386/conf/majors.i386,v
retrieving revision 1.37
diff -u -r1.37 majors.i386
--- sys/arch/i386/conf/majors.i386	12 Nov 2008 12:36:02 -0000	1.37
+++ sys/arch/i386/conf/majors.i386	8 May 2009 06:17:03 -0000
@@ -118,3 +118,4 @@
 # Majors up to 143 are reserved for machine-dependent drivers.
 # New machine-independent driver majors are assigned in 
 # sys/conf/majors.
+device-major	msr		char 144

後はこんな感じで。

--- MAKEDEV.local~	2008-10-28 14:42:35.000000000 +0900
+++ MAKEDEV.local	2009-05-08 14:15:17.000000000 +0900
@@ -58,6 +58,9 @@
 #	mkdev foo c 0 0 600
 #	mkdev foo1 c 0 1 600
 #	;;
+msr)
+	mkdev msr c 144 0 666
+	;;
 
 *)
 	warn "$i: unknown device"

デバイスファイルも追加。

X11はxsrcではなく、pkgsrcの方。
ドライバは
http://cgit.freedesktop.org/xorg/driver/xf86-video-geode/
からxf86-video-geode-2.11.1を。

diff -ur xf86-video-geode.orig/src/Makefile.am xf86-video-geode/src/Makefile.am
--- xf86-video-geode.orig/src/Makefile.am	2009-02-17 03:46:00.000000000 +0900
+++ xf86-video-geode/src/Makefile.am	2009-05-10 20:18:36.000000000 +0900
@@ -25,13 +25,11 @@
 # TODO: -nostdlib/-Bstatic/-lgcc platform magic, not installing the .a, etc.
 DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) \
   -I$(top_srcdir)/src/cim -I$(top_srcdir)/src/gfx \
-  -I$(top_srcdir)/src/panel -I$(top_srcdir)/linux_v26
+  -I$(top_srcdir)/src/panel
 
 # -DPNL_SUP is now provided by AMD_CFLAGS
 #
-AM_CFLAGS = @XORG_CFLAGS@ \
-   -DHAVE_GX -DHAVE_LX -DAMD_V4L2_VIDEO -DOPT_ACCEL \
-   -DLINUX_2_6 @AMD_CFLAGS@
+AM_CFLAGS = @XORG_CFLAGS@ -DHAVE_GX -DHAVE_LX -DOPT_ACCEL @AMD_CFLAGS@
 
 AM_CCASFLAGS = @XORG_CFLAGS@
 geode_drv_la_LTLIBRARIES = geode_drv.la
@@ -142,10 +140,10 @@
         gx_vga.c \
         lx_vga.c
 
-ztv_drv_la_LTLIBRARIES = ztv_drv.la
-ztv_drv_la_LDFLAGS = -module -avoid-version
-ztv_drv_ladir = @moduledir@/drivers
+#ztv_drv_la_LTLIBRARIES = ztv_drv.la
+#ztv_drv_la_LDFLAGS = -module -avoid-version
+#ztv_drv_ladir = @moduledir@/drivers
 
-ztv_drv_la_SOURCES = \
-        z4l.c
+#ztv_drv_la_SOURCES = \
+#        z4l.c
 
diff -ur xf86-video-geode.orig/src/geode_driver.c xf86-video-geode/src/geode_driver.c
--- xf86-video-geode.orig/src/geode_driver.c	2009-02-17 03:46:00.000000000 +0900
+++ xf86-video-geode/src/geode_driver.c	2009-05-10 20:16:08.000000000 +0900
@@ -77,6 +77,10 @@
 #endif /* DPMSExtension */
 
 /* A few things all drivers should have */
+#define	PACKAGE_VERSION_MAJOR	2	//-uch
+#define	PACKAGE_VERSION_MINOR	11	//-uch
+#define	PACKAGE_VERSION_PATCHLEVEL	1	//-uch
+
 #define GEODE_NAME        "GEODE"
 #define GEODE_DRIVER_NAME "geode"
 #define GEODE_VERSION       4000
diff -ur xf86-video-geode.orig/src/geode_msr.c xf86-video-geode/src/geode_msr.c
--- xf86-video-geode.orig/src/geode_msr.c	2009-02-17 03:46:00.000000000 +0900
+++ xf86-video-geode/src/geode_msr.c	2009-05-10 17:31:13.000000000 +0900
@@ -7,15 +7,23 @@
 #include "os.h"
 #include "geode.h"
 
+#ifdef __NetBSD__
+#define	MSR_DEVFILE	"/dev/msr"
+#define	lseek64	lseek
+#define	off64_t	off_t
+#else
+#define	MSR_DEVFILE	"/dev/cpu/0/msr"
+#endif
+
 static int
 _msr_open(void)
 {
     static int msrfd = 0;
 
     if (msrfd == 0) {
-	msrfd = open("/dev/cpu/0/msr", O_RDWR);
+	msrfd = open(MSR_DEVFILE, O_RDWR);
 	if (msrfd == -1)
-	    ErrorF("Unable to open /dev/cpu/0/msr: %d\n", errno);
+	  ErrorF("Unable to open %s: %d\n", MSR_DEVFILE, errno);
     }
 
     return msrfd;
diff -ur xf86-video-geode.orig/src/lx_driver.c xf86-video-geode/src/lx_driver.c
--- xf86-video-geode.orig/src/lx_driver.c	2009-02-17 03:46:00.000000000 +0900
+++ xf86-video-geode/src/lx_driver.c	2009-05-10 18:12:41.000000000 +0900
@@ -53,10 +53,13 @@
 
 /* Bring in VGA functions */
 #include "lx_vga.c"
-
+#if 0
 #define LX_MAX_WIDTH  1940
 #define LX_MAX_HEIGHT 1600
-
+#else	//-uch
+#define LX_MAX_WIDTH  1024
+#define LX_MAX_HEIGHT 600
+#endif
 /* Size of the register blocks */
 
 #define LX_GP_REG_SIZE  0x4000

このパッチをあてて、sh autogen.sh --prefix=/usr/pkg;gmake all;gmake install
xorg.confはこれ。"PanelMode"の設定はlx_panel.cの880x600と1024x768をつなぎあわせて作った。

Section "Files"
	RgbPath	"/usr/pkg/share/X11/rgb"
	FontPath   "/usr/pkg/lib/X11/fonts/local/"
	FontPath   "/usr/pkg/lib/X11/fonts/misc/"
	FontPath   "/usr/pkg/lib/X11/fonts/TTF/"
	FontPath   "/usr/pkg/lib/X11/fonts/Type1/"
	FontPath   "/usr/pkg/lib/X11/fonts/100dpi/"
	FontPath   "/usr/pkg/lib/X11/fonts/75dpi/"
	ModulePath "/usr/pkg/lib/xorg/modules"
EndSection

Section "Module"
	Load  "extmod"
	Load  "record"
	Load  "dbe"
	Load  "xtrap"
	Load  "dri"
	Load  "freetype"
	Load  "type1"
EndSection

Section "ServerFlags"
EndSection

Section "InputDevice"
	Identifier	"Keyboard1"
	Driver	"kbd"
	Option "AutoRepeat"	"500 30"
	Option "XkbRules"	"xorg"
	Option "XkbModel"	"jp106"
	Option "XkbLayout"	"jp"
EndSection

Section "InputDevice"
	Identifier	"Mouse1"
	Driver		"mouse"
	Option		"Protocol"	"wsmouse"
	Option		"Device"	"/dev/wsmouse"
EndSection

Section "Monitor"
	Identifier	"Internal Panel"
	VendorName	"Kohjinsha"
	ModelName	"SA5ST08A"
#	Option		"DPMS"
EndSection

Section "Device"
	Identifier	"AMD Geode"
	Driver		"geode"
	Option		"PanelMode"	"65000 1024 1048 1184 1344 600 601 605 628"
#	Option		"HWcursor"
#	Option		"NoCompression"
#	Option		"FBSize"	"67108864"
#Don't work	Option		"NoAccel"
#Don't work	Option		"Rotate"	{"LEFT", "INVERT", "CCW"}
#
EndSection

Section "Screen"
	Identifier	"Screen 1"
	Device		"AMD Geode"
	Monitor		"Internal Panel"
	DefaultDepth	24

	Subsection "Display"
		Depth	 24
		Modes	"1024x600"
	EndSubsection
EndSection

Section "ServerLayout"
	Identifier  "Simple Layout"
	Screen "Screen 1"
	InputDevice "Mouse1" "CorePointer"
	InputDevice "Keyboard1" "CoreKeyboard"
EndSection





X.Org X Server 1.4.2
Release Date: 11 June 2008
X Protocol Version 11, Revision 0
Build Operating System: NetBSD-4.99.73-i386 The NetBSD Foundation
Current Operating System: NetBSD sicklemoon 4.99.72 NetBSD 4.99.72 (SICKLEMOON) #3: Sun May 10 16:04:19 JST 2009  uch@alexandrite:/usr/work/src-4.99.72/sys/arch/i386/compile/SICKLEMOON i386
Build Date: 31 October 2008  09:27:28AM
 
	Before reporting problems, check http://www.pkgsrc.org/
	to make sure that you have the latest version.
Module Loader present
Markers: (--) probed, (**) from config file, (==) default setting,
	(++) from command line, (!!) notice, (II) informational,
	(WW) warning, (EE) error, (NI) not implemented, (??) unknown.
(==) Log file: "/var/log/Xorg.0.log", Time: Sun May 10 21:07:26 2009
(==) Using config file: "/etc/X11/xorg.conf"
(==) ServerLayout "Simple Layout"
(**) |-->Screen "Screen 1" (0)
(**) |   |-->Monitor "Internal Panel"
(**) |   |-->Device "AMD Geode"
(**) |-->Input Device "Mouse1"
(**) |-->Input Device "Keyboard1"
(==) Automatically adding devices
(==) Automatically enabling devices
(==) Including the default font path /usr/pkg/lib/X11/fonts/misc/,/usr/pkg/lib/X11/fonts/TTF/,/usr/pkg/lib/X11/fonts/OTF,/usr/pkg/lib/X11/fonts/Type1/,/usr/pkg/lib/X11/fonts/100dpi/,/usr/pkg/lib/X11/fonts/75dpi/.
(**) FontPath set to:
	/usr/pkg/lib/X11/fonts/local/,
	/usr/pkg/lib/X11/fonts/misc/,
	/usr/pkg/lib/X11/fonts/TTF/,
	/usr/pkg/lib/X11/fonts/Type1/,
	/usr/pkg/lib/X11/fonts/100dpi/,
	/usr/pkg/lib/X11/fonts/75dpi/,
	/usr/pkg/lib/X11/fonts/misc/,
	/usr/pkg/lib/X11/fonts/TTF/,
	/usr/pkg/lib/X11/fonts/OTF,
	/usr/pkg/lib/X11/fonts/Type1/,
	/usr/pkg/lib/X11/fonts/100dpi/,
	/usr/pkg/lib/X11/fonts/75dpi/
(**) RgbPath set to "/usr/pkg/share/X11/rgb"
(**) ModulePath set to "/usr/pkg/lib/xorg/modules"
(II) Loader magic: 0x81b0400
(II) Module ABI versions:
	X.Org ANSI C Emulation: 0.3
	X.Org Video Driver: 2.0
	X.Org XInput driver : 2.0
	X.Org Server Extension : 0.3
	X.Org Font Renderer : 0.5
(II) Loader running on netbsd
(II) LoadModule: "pcidata"
(II) Loading /usr/pkg/lib/xorg/modules//libpcidata.so
(II) Module pcidata: vendor="X.Org Foundation"
	compiled for 1.4.2, module version = 1.0.0
	ABI class: X.Org Video Driver, version 2.0
(--) Using wscons driver in pcvt compatibility mode (version 3.32)
(II) PCI: Probing config type using method 1
(II) PCI: Config type is 1
(II) PCI: stages = 0x03, oldVal1 = 0x00000000, mode1Res1 = 0x80000000
(WW) OS did not count PCI devices, guessing wildly
(II) PCI: PCI scan (all values are in hex)
(II) PCI: 00:01:0: chip 1022,2080 card 1170,0181 rev 33 class 06,00,00 hdr 80
(II) PCI: 00:01:1: chip 1022,2081 card 1170,0181 rev 00 class 03,00,00 hdr 00
(II) PCI: 00:01:2: chip 1022,2082 card 1170,0181 rev 00 class 10,10,00 hdr 00
(II) PCI: 00:0c:0: chip 104c,8039 card fffc,ffff rev 00 class 06,07,00 hdr 82
(II) PCI: 00:0c:2: chip 104c,803b card 1170,0181 rev 00 class 01,80,00 hdr 80
(II) PCI: 00:0c:3: chip 104c,803c card 1170,0181 rev 00 class 08,05,00 hdr 80
(II) PCI: 00:0d:0: chip 10ec,8139 card 1170,0018 rev 10 class 02,00,00 hdr 00
(II) PCI: 00:0f:0: chip 1022,2090 card 1022,2090 rev 03 class 06,01,00 hdr 80
(II) PCI: 00:0f:2: chip 1022,209a card 1022,209a rev 01 class 01,01,80 hdr 00
(II) PCI: 00:0f:3: chip 1022,2093 card 1170,0181 rev 01 class 04,01,00 hdr 00
(II) PCI: 00:0f:4: chip 1022,2094 card 1022,2094 rev 02 class 0c,03,10 hdr 00
(II) PCI: 00:0f:5: chip 1022,2095 card 1022,2095 rev 02 class 0c,03,20 hdr 00
(II) PCI: End of PCI scan
(II) Host-to-PCI bridge:
(II) Bus 0: bridge is at (0:1:0), (0,0,1), BCTRL: 0x0008 (VGA_EN is set)
(II) Bus 0 I/O range:
	[0] -1	0	0x00000000 - 0x0000ffff (0x10000) IX[B]
(II) Bus 0 non-prefetchable memory range:
	[0] -1	0	0x00000000 - 0xffffffff (0x0) MX[B]
(II) Bus 0 prefetchable memory range:
	[0] -1	0	0x00000000 - 0xffffffff (0x0) MX[B]
(II) PCI-to-CardBus bridge:
(II) Bus 1: bridge is at (0:12:0), (0,1,1), BCTRL: 0x07e3 (VGA_EN is cleared)
(II) PCI-to-ISA bridge:
(II) Bus -1: bridge is at (0:15:0), (0,-1,-1), BCTRL: 0x0008 (VGA_EN is set)
(--) PCI:*(0:1:1) Advanced Micro Devices [AMD] Geode LX Video rev 0, Mem @ 0x50000000/27, 0x4fffc000/14, 0x4fff8000/14, 0x4fff4000/14, 0x4fff0000/14
(II) Addressable bus resource ranges are
	[0] -1	0	0x00000000 - 0xffffffff (0x0) MX[B]
	[1] -1	0	0x00000000 - 0x0000ffff (0x10000) IX[B]
(II) OS-reported resource ranges:
	[0] -1	0	0x00100000 - 0x3fffffff (0x3ff00000) MX[B]E(B)
	[1] -1	0	0x000f0000 - 0x000fffff (0x10000) MX[B]
	[2] -1	0	0x000c0000 - 0x000effff (0x30000) MX[B]
	[3] -1	0	0x00000000 - 0x0009ffff (0xa0000) MX[B]
	[4] -1	0	0x0000ffff - 0x0000ffff (0x1) IX[B]
	[5] -1	0	0x00000000 - 0x000000ff (0x100) IX[B]
(II) PCI I/O resource overlap reduced 0x0000ac1c from 0x0000ac1f to 0x0000ac1b
(II) PCI I/O resource overlap reduced 0x00009e00 from 0x00009eff to 0x00009dff
(II) Active PCI resource ranges:
	[0] -1	0	0xef500000 - 0xef5fffff (0x100000) MX[B]E
	[1] -1	0	0xeff00000 - 0xefffffff (0x100000) MX[B]E
	[2] -1	0	0xef600000 - 0xef7fffff (0x200000) MX[B]E
	[3] -1	0	0xef700000 - 0xef7fffff (0x100000) MX[B]E
	[4] -1	0	0xef800000 - 0xefffffff (0x800000) MX[B]E
	[5] -1	0	0xefc00000 - 0xefffffff (0x400000) MX[B]E
	[6] -1	0	0x4fff0000 - 0x4fff3fff (0x4000) MX[B](B)
	[7] -1	0	0x4fff4000 - 0x4fff7fff (0x4000) MX[B](B)
	[8] -1	0	0x4fff8000 - 0x4fffbfff (0x4000) MX[B](B)
	[9] -1	0	0x4fffc000 - 0x4fffffff (0x4000) MX[B](B)
	[10] -1	0	0x50000000 - 0x57ffffff (0x8000000) MX[B](B)
	[11] -1	0	0x0000cc80 - 0x0000ccff (0x80) IX[B]E
	[12] -1	0	0x0000eff0 - 0x0000efff (0x10) IX[B]E
	[13] -1	0	0x00009c00 - 0x00009cff (0x100) IX[B]E
	[14] -1	0	0x00009d00 - 0x00009dff (0x100) IX[B]E
	[15] -1	0	0x00006200 - 0x000062ff (0x100) IX[B]E
	[16] -1	0	0x00006100 - 0x000061ff (0x100) IX[B]E
	[17] -1	0	0x00006000 - 0x000060ff (0x100) IX[B]E
	[18] -1	0	0x0000cd00 - 0x0000cdff (0x100) IX[B]E
	[19] -1	0	0x00009e00 - 0x00009dff (0x0) IX[B]EO
	[20] -1	0	0x0000ac1c - 0x0000ac1b (0x0) IX[B]EO
(II) PCI Memory resource overlap reduced 0xef600000 from 0xef7fffff to 0xef6fffff
(II) PCI Memory resource overlap reduced 0xef800000 from 0xefffffff to 0xefbfffff
(II) PCI Memory resource overlap reduced 0xefc00000 from 0xefffffff to 0xefdfffff
(II) Active PCI resource ranges after removing overlaps:
	[0] -1	0	0xef500000 - 0xef5fffff (0x100000) MX[B]E
	[1] -1	0	0xeff00000 - 0xefffffff (0x100000) MX[B]E
	[2] -1	0	0xef600000 - 0xef6fffff (0x100000) MX[B]E
	[3] -1	0	0xef700000 - 0xef7fffff (0x100000) MX[B]E
	[4] -1	0	0xef800000 - 0xefbfffff (0x400000) MX[B]E
	[5] -1	0	0xefc00000 - 0xefdfffff (0x200000) MX[B]E
	[6] -1	0	0x4fff0000 - 0x4fff3fff (0x4000) MX[B](B)
	[7] -1	0	0x4fff4000 - 0x4fff7fff (0x4000) MX[B](B)
	[8] -1	0	0x4fff8000 - 0x4fffbfff (0x4000) MX[B](B)
	[9] -1	0	0x4fffc000 - 0x4fffffff (0x4000) MX[B](B)
	[10] -1	0	0x50000000 - 0x57ffffff (0x8000000) MX[B](B)
	[11] -1	0	0x0000cc80 - 0x0000ccff (0x80) IX[B]E
	[12] -1	0	0x0000eff0 - 0x0000efff (0x10) IX[B]E
	[13] -1	0	0x00009c00 - 0x00009cff (0x100) IX[B]E
	[14] -1	0	0x00009d00 - 0x00009dff (0x100) IX[B]E
	[15] -1	0	0x00006200 - 0x000062ff (0x100) IX[B]E
	[16] -1	0	0x00006100 - 0x000061ff (0x100) IX[B]E
	[17] -1	0	0x00006000 - 0x000060ff (0x100) IX[B]E
	[18] -1	0	0x0000cd00 - 0x0000cdff (0x100) IX[B]E
	[19] -1	0	0x00009e00 - 0x00009dff (0x0) IX[B]EO
	[20] -1	0	0x0000ac1c - 0x0000ac1b (0x0) IX[B]EO
(II) OS-reported resource ranges after removing overlaps with PCI:
	[0] -1	0	0x00100000 - 0x3fffffff (0x3ff00000) MX[B]E(B)
	[1] -1	0	0x000f0000 - 0x000fffff (0x10000) MX[B]
	[2] -1	0	0x000c0000 - 0x000effff (0x30000) MX[B]
	[3] -1	0	0x00000000 - 0x0009ffff (0xa0000) MX[B]
	[4] -1	0	0x0000ffff - 0x0000ffff (0x1) IX[B]
	[5] -1	0	0x00000000 - 0x000000ff (0x100) IX[B]
(II) All system resource ranges:
	[0] -1	0	0x00100000 - 0x3fffffff (0x3ff00000) MX[B]E(B)
	[1] -1	0	0x000f0000 - 0x000fffff (0x10000) MX[B]
	[2] -1	0	0x000c0000 - 0x000effff (0x30000) MX[B]
	[3] -1	0	0x00000000 - 0x0009ffff (0xa0000) MX[B]
	[4] -1	0	0xef500000 - 0xef5fffff (0x100000) MX[B]E
	[5] -1	0	0xeff00000 - 0xefffffff (0x100000) MX[B]E
	[6] -1	0	0xef600000 - 0xef6fffff (0x100000) MX[B]E
	[7] -1	0	0xef700000 - 0xef7fffff (0x100000) MX[B]E
	[8] -1	0	0xef800000 - 0xefbfffff (0x400000) MX[B]E
	[9] -1	0	0xefc00000 - 0xefdfffff (0x200000) MX[B]E
	[10] -1	0	0x4fff0000 - 0x4fff3fff (0x4000) MX[B](B)
	[11] -1	0	0x4fff4000 - 0x4fff7fff (0x4000) MX[B](B)
	[12] -1	0	0x4fff8000 - 0x4fffbfff (0x4000) MX[B](B)
	[13] -1	0	0x4fffc000 - 0x4fffffff (0x4000) MX[B](B)
	[14] -1	0	0x50000000 - 0x57ffffff (0x8000000) MX[B](B)
	[15] -1	0	0x0000ffff - 0x0000ffff (0x1) IX[B]
	[16] -1	0	0x00000000 - 0x000000ff (0x100) IX[B]
	[17] -1	0	0x0000cc80 - 0x0000ccff (0x80) IX[B]E
	[18] -1	0	0x0000eff0 - 0x0000efff (0x10) IX[B]E
	[19] -1	0	0x00009c00 - 0x00009cff (0x100) IX[B]E
	[20] -1	0	0x00009d00 - 0x00009dff (0x100) IX[B]E
	[21] -1	0	0x00006200 - 0x000062ff (0x100) IX[B]E
	[22] -1	0	0x00006100 - 0x000061ff (0x100) IX[B]E
	[23] -1	0	0x00006000 - 0x000060ff (0x100) IX[B]E
	[24] -1	0	0x0000cd00 - 0x0000cdff (0x100) IX[B]E
	[25] -1	0	0x00009e00 - 0x00009dff (0x0) IX[B]EO
	[26] -1	0	0x0000ac1c - 0x0000ac1b (0x0) IX[B]EO
(II) "extmod" will be loaded. This was enabled by default and also specified in the config file.
(II) "dbe" will be loaded. This was enabled by default and also specified in the config file.
(II) "glx" will be loaded by default.
(II) "freetype" will be loaded. This was enabled by default and also specified in the config file.
(II) "type1" will be loaded. This was enabled by default and also specified in the config file.
(II) "record" will be loaded. This was enabled by default and also specified in the config file.
(II) "dri" will be loaded. This was enabled by default and also specified in the config file.
(II) LoadModule: "extmod"
(II) Loading /usr/pkg/lib/xorg/modules/extensions//libextmod.so
(II) Module extmod: vendor="X.Org Foundation"
	compiled for 1.4.2, module version = 1.0.0
	Module class: X.Org Server Extension
	ABI class: X.Org Server Extension, version 0.3
(II) Loading extension SHAPE
(II) Loading extension MIT-SUNDRY-NONSTANDARD
(II) Loading extension BIG-REQUESTS
(II) Loading extension SYNC
(II) Loading extension MIT-SCREEN-SAVER
(II) Loading extension XC-MISC
(II) Loading extension XFree86-VidModeExtension
(II) Loading extension XFree86-Misc
(II) Loading extension XFree86-DGA
(II) Loading extension DPMS
(II) Loading extension TOG-CUP
(II) Loading extension Extended-Visual-Information
(II) Loading extension XVideo
(II) Loading extension XVideo-MotionCompensation
(II) Loading extension X-Resource
(II) LoadModule: "record"
(II) Loading /usr/pkg/lib/xorg/modules/extensions//librecord.so
(II) Module record: vendor="X.Org Foundation"
	compiled for 1.4.2, module version = 1.13.0
	Module class: X.Org Server Extension
	ABI class: X.Org Server Extension, version 0.3
(II) Loading extension RECORD
(II) LoadModule: "dbe"
(II) Loading /usr/pkg/lib/xorg/modules/extensions//libdbe.so
(II) Module dbe: vendor="X.Org Foundation"
	compiled for 1.4.2, module version = 1.0.0
	Module class: X.Org Server Extension
	ABI class: X.Org Server Extension, version 0.3
(II) Loading extension DOUBLE-BUFFER
(II) LoadModule: "xtrap"
(II) Loading /usr/pkg/lib/xorg/modules/extensions//libxtrap.so
(II) Module xtrap: vendor="X.Org Foundation"
	compiled for 1.4.2, module version = 1.0.0
	Module class: X.Org Server Extension
	ABI class: X.Org Server Extension, version 0.3
(II) Loading extension DEC-XTRAP
(II) LoadModule: "dri"
(II) Loading /usr/pkg/lib/xorg/modules/extensions//libdri.so
(II) Module dri: vendor="X.Org Foundation"
	compiled for 1.4.2, module version = 1.0.0
	ABI class: X.Org Server Extension, version 0.3
(II) Loading extension XFree86-DRI
(II) LoadModule: "freetype"
(II) Loading /usr/pkg/lib/xorg/modules/fonts//libfreetype.so
(II) Module freetype: vendor="X.Org Foundation & the After X-TT Project"
	compiled for 1.4.2, module version = 2.1.0
	Module class: X.Org Font Renderer
	ABI class: X.Org Font Renderer, version 0.5
(II) Loading font FreeType
(II) LoadModule: "type1"
(II) Loading /usr/pkg/lib/xorg/modules/fonts//libtype1.so
(II) Module type1: vendor="X.Org Foundation"
	compiled for 1.4.2, module version = 1.0.2
	Module class: X.Org Font Renderer
	ABI class: X.Org Font Renderer, version 0.5
(II) Loading font Type1
(II) LoadModule: "glx"
(WW) Warning, couldn't open module glx
(II) UnloadModule: "glx"
(EE) Failed to load module "glx" (module does not exist, 0)
(II) LoadModule: "geode"
(II) Loading /usr/pkg/lib/xorg/modules/drivers//geode_drv.so
(II) Module geode: vendor="X.Org Foundation"
	compiled for 1.4.2, module version = 2.11.1
	Module class: X.Org Video Driver
	ABI class: X.Org Video Driver, version 2.0
(II) LoadModule: "mouse"
(II) Loading /usr/pkg/lib/xorg/modules/input//mouse_drv.so
(II) Module mouse: vendor="X.Org Foundation"
	compiled for 1.4.2, module version = 1.3.0
	Module class: X.Org XInput Driver
	ABI class: X.Org XInput driver, version 2.0
(II) LoadModule: "kbd"
(II) Loading /usr/pkg/lib/xorg/modules/input//kbd_drv.so
(II) Module kbd: vendor="X.Org Foundation"
	compiled for 1.4.2, module version = 1.3.1
	Module class: X.Org XInput Driver
	ABI class: X.Org XInput driver, version 2.0
(II) GEODE: Driver for AMD Geode Chipsets: Geode LX, Geode GX
(II) Primary Device is: PCI 00:01:1
(--) Assigning device section with no busID to primary device
(--) Chipset Geode LX found
(II) resource ranges after xf86ClaimFixedResources() call:
	[0] -1	0	0x00100000 - 0x3fffffff (0x3ff00000) MX[B]E(B)
	[1] -1	0	0x000f0000 - 0x000fffff (0x10000) MX[B]
	[2] -1	0	0x000c0000 - 0x000effff (0x30000) MX[B]
	[3] -1	0	0x00000000 - 0x0009ffff (0xa0000) MX[B]
	[4] -1	0	0xef500000 - 0xef5fffff (0x100000) MX[B]E
	[5] -1	0	0xeff00000 - 0xefffffff (0x100000) MX[B]E
	[6] -1	0	0xef600000 - 0xef6fffff (0x100000) MX[B]E
	[7] -1	0	0xef700000 - 0xef7fffff (0x100000) MX[B]E
	[8] -1	0	0xef800000 - 0xefbfffff (0x400000) MX[B]E
	[9] -1	0	0xefc00000 - 0xefdfffff (0x200000) MX[B]E
	[10] -1	0	0x4fff0000 - 0x4fff3fff (0x4000) MX[B](B)
	[11] -1	0	0x4fff4000 - 0x4fff7fff (0x4000) MX[B](B)
	[12] -1	0	0x4fff8000 - 0x4fffbfff (0x4000) MX[B](B)
	[13] -1	0	0x4fffc000 - 0x4fffffff (0x4000) MX[B](B)
	[14] -1	0	0x50000000 - 0x57ffffff (0x8000000) MX[B](B)
	[15] -1	0	0x0000ffff - 0x0000ffff (0x1) IX[B]
	[16] -1	0	0x00000000 - 0x000000ff (0x100) IX[B]
	[17] -1	0	0x0000cc80 - 0x0000ccff (0x80) IX[B]E
	[18] -1	0	0x0000eff0 - 0x0000efff (0x10) IX[B]E
	[19] -1	0	0x00009c00 - 0x00009cff (0x100) IX[B]E
	[20] -1	0	0x00009d00 - 0x00009dff (0x100) IX[B]E
	[21] -1	0	0x00006200 - 0x000062ff (0x100) IX[B]E
	[22] -1	0	0x00006100 - 0x000061ff (0x100) IX[B]E
	[23] -1	0	0x00006000 - 0x000060ff (0x100) IX[B]E
	[24] -1	0	0x0000cd00 - 0x0000cdff (0x100) IX[B]E
	[25] -1	0	0x00009e00 - 0x00009dff (0x0) IX[B]EO
	[26] -1	0	0x0000ac1c - 0x0000ac1b (0x0) IX[B]EO
(II) resource ranges after probing:
	[0] -1	0	0x00100000 - 0x3fffffff (0x3ff00000) MX[B]E(B)
	[1] -1	0	0x000f0000 - 0x000fffff (0x10000) MX[B]
	[2] -1	0	0x000c0000 - 0x000effff (0x30000) MX[B]
	[3] -1	0	0x00000000 - 0x0009ffff (0xa0000) MX[B]
	[4] -1	0	0xef500000 - 0xef5fffff (0x100000) MX[B]E
	[5] -1	0	0xeff00000 - 0xefffffff (0x100000) MX[B]E
	[6] -1	0	0xef600000 - 0xef6fffff (0x100000) MX[B]E
	[7] -1	0	0xef700000 - 0xef7fffff (0x100000) MX[B]E
	[8] -1	0	0xef800000 - 0xefbfffff (0x400000) MX[B]E
	[9] -1	0	0xefc00000 - 0xefdfffff (0x200000) MX[B]E
	[10] -1	0	0x4fff0000 - 0x4fff3fff (0x4000) MX[B](B)
	[11] -1	0	0x4fff4000 - 0x4fff7fff (0x4000) MX[B](B)
	[12] -1	0	0x4fff8000 - 0x4fffbfff (0x4000) MX[B](B)
	[13] -1	0	0x4fffc000 - 0x4fffffff (0x4000) MX[B](B)
	[14] -1	0	0x50000000 - 0x57ffffff (0x8000000) MX[B](B)
	[15] 0	0	0x000a0000 - 0x000affff (0x10000) MS[B]
	[16] 0	0	0x000b0000 - 0x000b7fff (0x8000) MS[B]
	[17] 0	0	0x000b8000 - 0x000bffff (0x8000) MS[B]
	[18] -1	0	0x0000ffff - 0x0000ffff (0x1) IX[B]
	[19] -1	0	0x00000000 - 0x000000ff (0x100) IX[B]
	[20] -1	0	0x0000cc80 - 0x0000ccff (0x80) IX[B]E
	[21] -1	0	0x0000eff0 - 0x0000efff (0x10) IX[B]E
	[22] -1	0	0x00009c00 - 0x00009cff (0x100) IX[B]E
	[23] -1	0	0x00009d00 - 0x00009dff (0x100) IX[B]E
	[24] -1	0	0x00006200 - 0x000062ff (0x100) IX[B]E
	[25] -1	0	0x00006100 - 0x000061ff (0x100) IX[B]E
	[26] -1	0	0x00006000 - 0x000060ff (0x100) IX[B]E
	[27] -1	0	0x0000cd00 - 0x0000cdff (0x100) IX[B]E
	[28] -1	0	0x00009e00 - 0x00009dff (0x0) IX[B]EO
	[29] -1	0	0x0000ac1c - 0x0000ac1b (0x0) IX[B]EO
	[30] 0	0	0x000003b0 - 0x000003bb (0xc) IS[B]
	[31] 0	0	0x000003c0 - 0x000003df (0x20) IS[B]
(II) Setting vga for screen 0.
(WW) GEODE(0): set MTRR c001e - c0030
(II) Loading sub module "vgahw"
(II) LoadModule: "vgahw"
(II) Loading /usr/pkg/lib/xorg/modules//libvgahw.so
(II) Module vgahw: vendor="X.Org Foundation"
	compiled for 1.4.2, module version = 0.1.0
	ABI class: X.Org Video Driver, version 2.0
(**) GEODE(0): Depth 24, (--) framebuffer bpp 32
(==) GEODE(0): RGB weight 888
(==) GEODE(0): Default visual is TrueColor
(==) GEODE(0): Using gamma correction (1.0, 1.0, 1.0)
(**) GEODE(0): Option "PanelMode" "65000 1024 1048 1184 1344 600 601 605 628"
(==) GEODE(0): No DCON is present
(II) GEODE(0): LX output options:
(II) GEODE(0):  CRT: YES
(II) GEODE(0):  PANEL: YES
(II) GEODE(0):  DCON: NO
(II) GEODE(0):  VGA: YES
(II) Loading sub module "int10"
(II) LoadModule: "int10"
(II) Loading /usr/pkg/lib/xorg/modules//libint10.so
(II) Module int10: vendor="X.Org Foundation"
	compiled for 1.4.2, module version = 1.0.0
	ABI class: X.Org Video Driver, version 2.0
(WW) GEODE(0): remove MTRR a0000 - c0000
(WW) GEODE(0): remove MTRR c0000 - 100000
(II) GEODE(0): Primary V_BIOS segment is: 0xc000
(WW) GEODE(0): remove MTRR 0 - 1000
(II) GEODE(0): Output default using monitor section Internal Panel
(II) GEODE(0): I2C bus "CS5536 DDC" initialized.
(II) GEODE(0): Output default connected
(II) GEODE(0): Output default using initial mode nocompression
(--) GEODE(0): Virtual size is 1024x600 (pitch 0)
(**) GEODE(0):  Driver mode "nocompression": 65.0 MHz (scaled from 0.0 MHz), 48.4 kHz, 77.0 Hz
(II) GEODE(0): Modeline "nocompression"x77.0   65.00  1024 1048 1184 1344  600 601 605 628 (48.4 kHz)
(**) GEODE(0):  Default mode "800x600": 40.0 MHz (scaled from 0.0 MHz), 37.9 kHz, 60.3 Hz
(II) GEODE(0): Modeline "800x600"x60.3   40.00  800 840 968 1056  600 601 605 628 +hsync +vsync (37.9 kHz)
(**) GEODE(0):  Default mode "640x480": 25.2 MHz (scaled from 0.0 MHz), 31.5 kHz, 59.9 Hz
(II) GEODE(0): Modeline "640x480"x59.9   25.18  640 656 752 800  480 490 492 525 -hsync -vsync (31.5 kHz)
(**) GEODE(0):  Default mode "640x400": 41.7 MHz (scaled from 0.0 MHz), 49.7 kHz, 60.0 Hz (D)
(II) GEODE(0): Modeline "640x400"x60.0   41.73  640 672 740 840  400 400 402 414 doublescan (49.7 kHz)
(**) GEODE(0):  Default mode "640x384": 40.1 MHz (scaled from 0.0 MHz), 47.7 kHz, 60.1 Hz (D)
(II) GEODE(0): Modeline "640x384"x60.1   40.07  640 672 740 840  384 384 386 397 doublescan (47.7 kHz)
(**) GEODE(0):  Default mode "512x384": 32.5 MHz (scaled from 0.0 MHz), 48.4 kHz, 60.0 Hz (D)
(II) GEODE(0): Modeline "512x384"x60.0   32.50  512 524 592 672  384 385 388 403 doublescan -hsync -vsync (48.4 kHz)
(**) GEODE(0):  Default mode "400x300": 20.0 MHz (scaled from 0.0 MHz), 37.9 kHz, 60.3 Hz (D)
(II) GEODE(0): Modeline "400x300"x60.3   20.00  400 420 484 528  300 300 302 314 doublescan +hsync +vsync (37.9 kHz)
(**) GEODE(0):  Default mode "320x240": 12.6 MHz (scaled from 0.0 MHz), 31.5 kHz, 60.1 Hz (D)
(II) GEODE(0): Modeline "320x240"x60.1   12.59  320 328 376 400  240 245 246 262 doublescan -hsync -vsync (31.5 kHz)
(==) GEODE(0): DPI set to (96, 96)
(II) Loading sub module "fb"
(II) LoadModule: "fb"
(II) Loading /usr/pkg/lib/xorg/modules//libfb.so
(II) Module fb: vendor="X.Org Foundation"
	compiled for 1.4.2, module version = 1.0.0
	ABI class: X.Org ANSI C Emulation, version 0.3
(II) Loading sub module "exa"
(II) LoadModule: "exa"
(II) Loading /usr/pkg/lib/xorg/modules//libexa.so
(II) Module exa: vendor="X.Org Foundation"
	compiled for 1.4.2, module version = 2.2.0
	ABI class: X.Org Video Driver, version 2.0
(--) Depth 24 pixmap format is 32 bpp
(II) do I need RAC?  No, I don't.
(II) resource ranges after preInit:
	[0] 0	0	0x4fff0000 - 0x4fff3fff (0x4000) MX[B]
	[1] 0	0	0x4fff4000 - 0x4fff7fff (0x4000) MX[B]
	[2] 0	0	0x4fff8000 - 0x4fffbfff (0x4000) MX[B]
	[3] 0	0	0x4fffc000 - 0x4fffffff (0x4000) MX[B]
	[4] 0	0	0x50000000 - 0x57ffffff (0x8000000) MX[B]
	[5] -1	0	0x00100000 - 0x3fffffff (0x3ff00000) MX[B]E(B)
	[6] -1	0	0x000f0000 - 0x000fffff (0x10000) MX[B]
	[7] -1	0	0x000c0000 - 0x000effff (0x30000) MX[B]
	[8] -1	0	0x00000000 - 0x0009ffff (0xa0000) MX[B]
	[9] -1	0	0xef500000 - 0xef5fffff (0x100000) MX[B]E
	[10] -1	0	0xeff00000 - 0xefffffff (0x100000) MX[B]E
	[11] -1	0	0xef600000 - 0xef6fffff (0x100000) MX[B]E
	[12] -1	0	0xef700000 - 0xef7fffff (0x100000) MX[B]E
	[13] -1	0	0xef800000 - 0xefbfffff (0x400000) MX[B]E
	[14] -1	0	0xefc00000 - 0xefdfffff (0x200000) MX[B]E
	[15] -1	0	0x4fff0000 - 0x4fff3fff (0x4000) MX[B](B)
	[16] -1	0	0x4fff4000 - 0x4fff7fff (0x4000) MX[B](B)
	[17] -1	0	0x4fff8000 - 0x4fffbfff (0x4000) MX[B](B)
	[18] -1	0	0x4fffc000 - 0x4fffffff (0x4000) MX[B](B)
	[19] -1	0	0x50000000 - 0x57ffffff (0x8000000) MX[B](B)
	[20] 0	0	0x000a0000 - 0x000affff (0x10000) MS[B]
	[21] 0	0	0x000b0000 - 0x000b7fff (0x8000) MS[B]
	[22] 0	0	0x000b8000 - 0x000bffff (0x8000) MS[B]
	[23] -1	0	0x0000ffff - 0x0000ffff (0x1) IX[B]
	[24] -1	0	0x00000000 - 0x000000ff (0x100) IX[B]
	[25] -1	0	0x0000cc80 - 0x0000ccff (0x80) IX[B]E
	[26] -1	0	0x0000eff0 - 0x0000efff (0x10) IX[B]E
	[27] -1	0	0x00009c00 - 0x00009cff (0x100) IX[B]E
	[28] -1	0	0x00009d00 - 0x00009dff (0x100) IX[B]E
	[29] -1	0	0x00006200 - 0x000062ff (0x100) IX[B]E
	[30] -1	0	0x00006100 - 0x000061ff (0x100) IX[B]E
	[31] -1	0	0x00006000 - 0x000060ff (0x100) IX[B]E
	[32] -1	0	0x0000cd00 - 0x0000cdff (0x100) IX[B]E
	[33] -1	0	0x00009e00 - 0x00009dff (0x0) IX[B]EO
	[34] -1	0	0x0000ac1c - 0x0000ac1b (0x0) IX[B]EO
	[35] 0	0	0x000003b0 - 0x000003bb (0xc) IS[B]
	[36] 0	0	0x000003c0 - 0x000003df (0x20) IS[B]
(WW) GEODE(0): remove MTRR a0000 - b0000
(II) GEODE(0): vgaHWGetIOBase: hwp->IOBase is 0x03d0, hwp->PIOOffset is 0x0000
(WW) GEODE(0): remove MTRR 4fffc000 - 50000000
(WW) GEODE(0): remove MTRR 4fff8000 - 4fffc000
(WW) GEODE(0): remove MTRR 4fff4000 - 4fff8000
(WW) GEODE(0): remove MTRR 4fff0000 - 4fff4000
(WW) GEODE(0): set MTRR 50000000 - 54000000
(WW) GEODE(0): set MTRR f0000 - 100000
(II) GEODE(0): Geode LX video memory 3e00000 bytes at 0xb75ec000
(II) GEODE(0): LX video memory:
(II) GEODE(0):  Display: 0x400000 bytes
(II) GEODE(0):  Compression: 0x4fb00 bytes
(II) GEODE(0):  Cursor: 0x3000 bytes
(II) GEODE(0):  EXA: 0x3415400 bytes
(II) GEODE(0):  FREE: 0x458100 bytes
(II) EXA(0): Offscreen pixmap area of 54612992 bytes
(II) EXA(0): Driver registered support for the following operations:
(II)         Solid
(II)         Copy
(II)         Composite (RENDER acceleration)
(==) GEODE(0): Backing store disabled
(II) GEODE(0): RandR 1.2 enabled, ignore the following RandR disabled message.
(--) RandR disabled
(II) Setting vga for screen 0.
(II) Initializing built-in extension MIT-SHM
(II) Initializing built-in extension XInputExtension
(II) Initializing built-in extension XTEST
(II) Initializing built-in extension XKEYBOARD
(II) Initializing built-in extension XC-APPGROUP
(II) Initializing built-in extension XAccessControlExtension
(II) Initializing built-in extension SECURITY
(II) Initializing built-in extension XINERAMA
(II) Initializing built-in extension XFIXES
(II) Initializing built-in extension XFree86-Bigfont
(II) Initializing built-in extension RENDER
(II) Initializing built-in extension RANDR
(II) Initializing built-in extension COMPOSITE
(II) Initializing built-in extension DAMAGE
(II) Initializing built-in extension XEVIE
(II) GEODE(0): Setting screen physical size to 270 x 158
(**) Option "Protocol" "wsmouse"
(**) Mouse1: Protocol: wsmouse
(**) Option "CorePointer"
(**) Mouse1: always reports core events
(**) Option "Device" "/dev/wsmouse"
(==) Mouse1: Emulate3Buttons, Emulate3Timeout: 50
(**) Mouse1: ZAxisMapping: buttons 4 and 5
(**) Mouse1: Buttons: 9
(**) Option "CoreKeyboard"
(**) Keyboard1: always reports core events
(**) Option "Protocol" "standard"
(**) Keyboard1: Protocol: standard
(**) Option "AutoRepeat" "500 30"
(**) Option "XkbRules" "xorg"
(**) Keyboard1: XkbRules: "xorg"
(**) Option "XkbModel" "jp106"
(**) Keyboard1: XkbModel: "jp106"
(**) Option "XkbLayout" "jp"
(**) Keyboard1: XkbLayout: "jp"
(**) Option "CustomKeycodes" "off"
(**) Keyboard1: CustomKeycodes disabled
(II) evaluating device (Keyboard1)
(II) XINPUT: Adding extended input device "Keyboard1" (type: KEYBOARD)
(II) evaluating device (Mouse1)
(II) XINPUT: Adding extended input device "Mouse1" (type: MOUSE)
Could not init font path element /usr/pkg/lib/X11/fonts/OTF, removing from list!
c000:0282: A2 ILLEGAL EXTENDED X86 OPCODE!
FreeFontPath: FPE "/usr/pkg/lib/X11/fonts/misc/" refcount is 2, should be 1; fixing.



鉄板だったはずの金曜のS枠が流れてしまい、プスプスと燻ぶっています。

菜園状況。スイカ。本葉4枚まで出てきたものの、本の栽培例にくらべて全体的 に小さい。

手前のトウモロコシがどうも成長が鈍い。

本当久々にXLR250Rで散歩に出かけてみた。といっても渋滞に揉まれにいっただ け。
未だにシフトダウンの時にスナッピングするのがうまくいかないな。
弟の車が来てたので、ここに置いておいたら、通りすがりの小学生が「かっこいいバイクだ!!」と喰いついてきた。お若いのによくわかっておいでだ。

トマト用の畝を耕しておきました。堆肥ではなく、自家製の腐葉土の作りかけ をちょっとすきこんでおきました。




菜園状況。トマトはこの一週間でモリモリ成長した。とはいえ本当はこのあた
りで植えつけなのだけど、そこまでは育っていない。種蒔きの時期は重要だ。



x86続き。ブートローダーはdelayの実装でもやもやしていたのだけど、問題な い範囲で実装して終了に。A20を有効にした際にある程度時間を待たないと有効 にならないので、そのためのdelayだけだから。
工人舎SA5には、マイOSもインストールしました。これでMSRのテスト。
/*
	rdmsr (%eax, %edx, %ecx) __attribute ((regparm (3)))
*/
FUNC (rdmsr)
	ENTER_32
	movl	%eax,	%esi
	movl	%edx,	%edi
	rdmsr
	movl	%eax,	(%esi)
	movl	%edx,	(%edi)
	LEAVE_32
	ret


uint32_t
msr (int32_t argc, const char *argv[])
{
  uint32_t c,a,d;
  a = d = 0;

  if (argc < 2)
    {
      printf ("Specify MSR address.\n");
      return 0;
    }
  c = atoi(argv[1]);

  rdmsr (&a, &d, c);

  printf ("MSR 0x%x: 0x%x:%x\n", c, d, a);

  return 0;
}
狙った値だ。これをデバイスファイル越しにもっていこう。なんとなく安さに ひかれて買ったマシンだったけれど、Geode LX、なかなか面白い。

NetBSD 5.99.11ではまったのは、COMPAT_LINUXをスタティックに入れたカーネ ルでローダブルモジュールも存在していると、ハングする。
=> Automatic manual page handling
=> Running POST-INSTALL script actions
suse_base-10.0nb5: rebuilding run-time library search paths database
ここでふっとんでしまう。たぶんldconfigでlinuxのsystem callを呼んだ時では。



一年使ってなかったタンクは、この前の走行の残りの混合油で共洗い。問題は
AVガスをどうするかだ。2年前買ったAVガスがまだちょっと残ってるんだよね。
40lも買ってしまったから。匂いを嗅いでみるとAVガス臭は抜けてしまったけれ
ど、問題なさそう。ハイオクで割るからこれいいかな。四エチル鉛は揮発して
ないだろうし。ヘリポートまで買いに行くのが面倒くさいのだ。

やっぱりNFカウルの方が自分のマシンという気がする。

曲がって溶接してしまったステーを直そうとして、また曲がって溶接してしまっ たステー、こんなオフセットステーをABSから作ってなんとかごまかしました。



RS125整備続き。E/Gパーツは、いろいろ残っているんだ。クランクシャフトとか、



シリンダとか。ピストンもまだ3つあるし、リードバルブもある。

ピストンリングもいっぱい。がんばるつもりだったんだよ...。

クランク洗浄して、ピストンリングだけ新品にしました。ヘッドのOリングも一 応交換。

キャブは90純正のPJ36ではなく、92あたりのPJ38SSに。こっちの方がキャブが 小さくてメンテしやすいから。PJ36はフレームの中にセットするのが大変なの だ。
軽く火入れして確認しておきました。125は爆音過ぎる。

ブレーキフルードを交換したりして整備終了。ただ、フロントのキャリパー(二 本では珍しいパフォーマンス製)のシールがへたっていて、ひきずりがひどい。 ちょっと許せないレベル。

去年の富士は、17:35で5速でストレートひっぱって12800rpmだった。6速で 11000rpm。17:37でいいかな。一回目17:36にして様子を見て37にしよう。
工人舎のSA-5は出荷状態で
0: 63		74396952	HPFS/NTFS
1: 74397015	74397015	HPFS/NTFS
2: 148794030	7502355		73
のようにパーティションが切られている。3番目の'73'パーティションはハイバネーション用。2番目のパーティションは開いているので、ここにNetBSD 5.99.10を インストールしました。
USBフロッピーからのブートもできるので、マイブートローダもインストールしてみました。バックアップ用のフロッピーへの書き込みがEIOになってしまったけど、インストール自体はできた。
Xはちょっと手間かも。このマシンはAMDのGeode LX800。これ用のXサーバは AMDから供給されている。ちょこっと見たとこ、MSRから情報を引きだしてくる 必要があって、Linuxだと/dev/cpu/0/msrからR/Wできるようにしてある。ここ をなんとかしないとだめっぽい。これは結構手間だな。


RS125整備続き。E/Gもマジックリンでごしごし洗浄。



車体も全バラ洗浄。

ここでメーターステーの修理。前に溶接で修理した際、斜めに溶接してしまって、 カウルが固定できなくなってしまったのだ。
一度切り落として、素材取り用の89フレームから削り落としてきた部分を溶接 します。

最初70Aくらいでやっていたのだけど、80Aくらいまで上げた方がよかった。 ほとんどフレームだけにアーク当てて。

ひどい出来だ。

なんかまた曲ってるけど、なんとか使えないこともない範囲だろう。
どうも溶接の時になると必要以上に緊張する。突き合てた部分が融合しないで、 それぞれで溶けて真中が開いてしまったりするととてもて焦ってしまう。

黙々と組んで今日はここまで。

やっぱり全バラ洗浄するとパリっとしていい。




ジャガイモ。点検に廻っているとテントウムシダマシが各所に。指ではじいて
おきました。



つぼみが見えてきた?

フォーク組みたて。ガイドブッシュ、スライドブッシュ、オイルシールを新品にして組みました。うっかりボケっとしてガイドブッシュを先にアウターにセットしてしまって、ガイドブッシュ一個無駄にした...。
オイルはいつも通りWAKO'S #10 油面100mmで。
車体に組みつけて確認してみても、特に問題はなさそう。

排気音が凄まじいので、グラスウール交換。特に飛び散ってはいないけれど、オイルまみれだからか。それともこんな音量だったのかな。
あらかじめ買っておいたグラスウール筒がサイズ合わなかった...。シートで買っておけばよかった。

新ノートパソコンに工人社のSA5ST08AをNTT-Xから買いました。26800円。
NetBSDはpckbcをacpiにアタッチしないでisaにアタッチするようにしないと キーボードが使えなかった。
#pckbc*  	at acpi?		# PC keyboard controller
pckbc0		at isa?			# pc keyboard controller
Xは、うまくいってない。
(II) NSC: Nsc family driver (version 2.8.1) for chipsets: 5530, SC1200,
	SC1400, REDCLOUD
(II) Primary Device is: PCI 00:01:1
(EE) No devices detected.
dmesg.
Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
    2006, 2007, 2008
    The NetBSD Foundation, Inc.  All rights reserved.
Copyright (c) 1982, 1986, 1989, 1991, 1993
    The Regents of the University of California.  All rights reserved.

NetBSD 4.99.72 (SICKLEMOON) #5: Sun May  3 21:59:06 JST 2009
	uch@alexandrite:/usr/work/src-4.99.72/sys/arch/i386/compile/SICKLEMOON
total memory = 503 MB
avail memory = 483 MB
timecounter: Timecounters tick every 10.000 msec
timecounter: Timecounter "i8254" frequency 1193182 Hz quality 100
KOHJINSHA Co.,Ltd SA Series (Rev 1.00)
mainbus0 (root)
cpu0 at mainbus0: AMD 586-class, 498MHz, id 0x5a2
acpi0 at mainbus0: Intel ACPICA 20080321
acpi0: X/RSDT: OemId <AMD   ,RSDT_000,31303030>, AslId <AMD ,31303030>
LNKA: ACPI: Found matching pin for 0.1.INTA at func 1: 11
LNKB: ACPI: Found matching pin for 0.15.INTB at func 3: 5
LNKD: ACPI: Found matching pin for 0.15.INTD at func 4: 10
LNKC: ACPI: Found matching pin for 0.12.INTA at func 0: 3
LNKB: ACPI: Found matching pin for 0.13.INTA at func 0: 5
acpi0: SCI interrupting at int 9
acpi0: fixed-feature power button present
timecounter: Timecounter "ACPI-Safe" frequency 3579545 Hz quality 900
ACPI-Safe 32-bit timer
acpibut0 at acpi0 (PWRB, PNP0C0C): ACPI Power Button
acpibut1 at acpi0 (SLPB, PNP0C0E): ACPI Sleep Button
acpilid0 at acpi0 (LID0, PNP0C0D): ACPI Lid Switch
acpiacad0 at acpi0 (ADP0, ACPI0003): ACPI AC Adapter
acpibat0 at acpi0 (BAT0, PNP0C0A-1): ACPI Battery (Control Method)
acpibat0: battery info: None, Lion, NBP3A61 00CC
attimer0 at acpi0 (TMR, PNP0100): AT Timer
attimer0: io 0x40-0x43,0x48-0x4b irq 0
pcppi0 at acpi0 (SPKR, PNP0800)
pcppi0: io 0x61
midi0 at pcppi0: PC speaker (CPU-intensive output)
sysbeep0 at pcppi0
npx0 at acpi0 (COPR, PNP0C04)
npx0: io 0xf0-0xff irq 13
npx0: reported by CPUID; using exception 16
PS2K (PNP0303) at acpi0 not configured
PS2M (SYN1910) at acpi0 not configured
acpitz0 at acpi0 (TZ00): critical 83.0C hot 81.0C passive 59.0C, passive cooling
apm0 at acpi0: Power Management spec V1.2
attimer0: attached to pcppi0
pci0 at mainbus0 bus 0: configuration mode 1
pci0: i/o space, memory space enabled, rd/line, rd/mult, wr/inv ok
pchb0 at pci0 dev 1 function 0
pchb0: vendor 0x1022 product 0x2080 (rev. 0x33)
vga0 at pci0 dev 1 function 1: vendor 0x1022 product 0x2081 (rev. 0x00)
wsdisplay0 at vga0 kbdmux 1: console (80x25, vt100 emulation)
wsmux1: connecting to wsdisplay0
drm at vga0 not configured
glxsb0 at pci0 dev 1 function 2: RNG AES
cbb0 at pci0 dev 12 function 0: vendor 0x104c product 0x8039 (rev. 0x00)
vendor 0x104c product 0x803b (miscellaneous mass storage) at pci0 dev 12 function 2 not configured
vendor 0x104c product 0x803c (SD Host Controller system) at pci0 dev 12 function 3 not configured
rtk0 at pci0 dev 13 function 0: Realtek 8139 10/100BaseTX (rev. 0x10)
rtk0: interrupting at irq 5
rtk0: Ethernet address 00:1e:33:18:3b:82
rlphy0 at rtk0 phy 7: Realtek internal PHY
rlphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
gcscpcib0 at pci0 dev 15 function 0
gcscpcib0: vendor 0x1022 product 0x2090 (rev. 0x03)
timecounter: Timecounter "gcscpcib0" frequency 3579545 Hz quality 1000
gcscpcib0: can't alloc an MFGPT for WDT
, GPIO
gpio0 at gcscpcib0: 32 pins
viaide0 at pci0 dev 15 function 2
viaide0: Advanced Micro Devices CS5536 IDE Controller (rev. 0x01)
viaide0: bus-master DMA support present
viaide0: primary channel wired to compatibility mode
viaide0: primary channel interrupting at irq 14
atabus0 at viaide0 channel 0
viaide0: secondary channel wired to compatibility mode
viaide0: secondary channel ignored (disabled)
vendor 0x1022 product 0x2093 (audio multimedia, revision 0x01) at pci0 dev 15 function 3 not configured
ohci0 at pci0 dev 15 function 4: vendor 0x1022 product 0x2094 (rev. 0x02)
ohci0: interrupting at irq 10
ohci0: OHCI version 1.0, legacy support
usb0 at ohci0: USB revision 1.0
gcscehci0 at pci0 dev 15 function 5: vendor 0x1022 product 0x2095 (rev. 0x02)
gcscehci0: interrupting at irq 10
gcscehci0: EHCI version 1.0
gcscehci0: companion controller, 4 ports each: ohci0
usb1 at gcscehci0: USB revision 2.0
cbb0: cacheline 0x0 lattimer 0x10
cbb0: bhlc 0x821000
cbb0: interrupting at irq 3
cardslot0 at cbb0
cardbus0 at cardslot0: bus 1
pcmcia0 at cardslot0
isa0 at gcscpcib0
pckbc0 at isa0 port 0x60-0x64
pckbd0 at pckbc0 (kbd slot)
pckbc0: using irq 1 for kbd slot
wskbd0 at pckbd0: console keyboard, using wsdisplay0
pms0 at pckbc0 (aux slot)
pms0: Synaptics touchpad version 6.3
pms0: Palm detect
pckbc0: using irq 12 for aux slot
wsmouse0 at pms0 mux 0
timecounter: Timecounter "clockinterrupt" frequency 100 Hz quality 0
uhub0 at usb0: vendor 0x1022 OHCI root hub, class 9/0, rev 1.00/1.00, addr 1
uhub0: 4 ports with 4 removable, self powered
uhub1 at usb1: vendor 0x1022 EHCI root hub, class 9/0, rev 2.00/1.00, addr 1
uhub1: 4 ports with 4 removable, self powered
acpiacad0: AC adapter online.
uhub2 at uhub1 port 4: vendor 0x0424 product 0x2503, class 9/0, rev 2.00/0.01, addr 2
uhub2: multiple transaction translators
uhub2: 2 ports with 1 removable, self powered
uhidev0 at uhub2 port 1 configuration 1 interface 0
uhidev0: DIALOGUE INC PenMount USB, rev 1.00/a4.b4, addr 3, iclass 3/1
ums0 at uhidev0
ums0: X report 0x0002 not supported
wd0 at atabus0 drive 0: <Hitachi HTS541680J9AT00>
wd0: drive supports 16-sector PIO transfers, LBA48 addressing
wd0: 76319 MB, 155061 cyl, 16 head, 63 sec, 512 bytes/sect x 156301488 sectors
rum0 at uhub2 port 2
rum0: Ralink 802.11 bg WLAN, rev 2.00/0.01, addr 4
wd0: 32-bit data port
wd0: drive supports PIO mode 4, DMA mode 2, Ultra-DMA mode 5 (Ultra/100)
wd0(viaide0:0:0): using PIO mode 4, Ultra-DMA mode 5 (Ultra/100) (using DMA)
rum0: MAC/BBP RT2573 (rev 0x2573a), RF RT2528, address 00:0d:f0:5a:7c:f3
rum0: 11b rates: 1Mbps 2Mbps 5.5Mbps 11Mbps
rum0: 11g rates: 1Mbps 2Mbps 5.5Mbps 11Mbps 6Mbps 9Mbps 12Mbps 18Mbps 24Mbps 36Mbps 48Mbps 54Mbps
Kernelized RAIDframe activated
pad0: outputs: 44100Hz, 16-bit, stereo
audio0 at pad0: half duplex
boot device: rtk0
root on rtk0
nfs_boot: trying DHCP/BOOTP
nfs_boot: DHCP next-server: 192.168.33.2
nfs_boot: my_name=sicklemoon
nfs_boot: my_domain=s.vnop.net
nfs_boot: my_addr=192.168.33.25
nfs_boot: my_mask=255.255.255.0
nfs_boot: gateway=192.168.33.1
root on 192.168.33.2:/usr/work/nfsroot/i386
root file system type: nfs
wsdisplay0: screen 1 added (80x25, vt100 emulation)
wsdisplay0: screen 2 added (80x25, vt100 emulation)
wsdisplay0: screen 3 added (80x25, vt100 emulation)
wsdisplay0: screen 4 added (80x25, vt100 emulation)


CR85の整備は終了。JNを3/5から2/5にしておいた。次90RS125。



まずはフォーク修正。2mmくらい曲がっているのだ。このフォークはヤフオクで 落としたマシンについていたもの。去年はこのまま富士走って何も気付かなかっ た。鈍いのだ。


インナーチューブの受けは、木片を接着剤で固めた材料(これだけで700円もす る)を使って作りました。実はこの前にSPFで作って試してみたところ、2t かけ たところでバキっと木目に沿って割れてしまった。

最大曲がり面を探して、

マジックで塗って

クの字位置を定盤面にして、曲げたいところを擦って位置決めしました。

プレスが小さい関係でこうやって斜めにセットせざるを得なく、そのためイン ナーチューブ受けの材料に、そこそこ強くて傷がつかないのを探してきた。
押し金は鉛で。
最初の修正は2tまでかけていい。その後の修正は1.5〜1.8tくらいか。鉛がどんどん潰れていくのと、スプリングバックの先までの感覚が難しく、弱すぎると修正になってないし、ちょっと度を越しただけで曲げ過ぎてしまう。
昼から夜まで延々と格闘して、結局0.1mmの振れまでにしか追いこめなかった。 さらに追いこもうとして、曲げてしまって、元にまで戻すのに2時間かかった り...。半日かかって納得いく結果にならなかった。

旋盤で廻してみると、かなり気になる。長手方向のチェックにも便利。

当て板の鉛は、最初円柱だったのにこんなに歪んでしまった。



曲がっていることは確認できるけれど、使えないことはないレベルまでにはなっ たので、これでいくことにします。


菜園状況。苗の発育が遅いような気がする。トマト



スイカ。

チンゲンサイはトンネルのおかげで虫に喰われず順調っぽい。一本、トンネル の外に出てるのはやっぱりそこそこ喰われているけれど、去年夏蒔きした時ほ どひどくはない。
中耕して鶏糞を蒔きました。

トウモロコシは一番下の葉から枯れてきてしまっている。まめに水やりしてる のだけど...。鶏糞を蒔いておきました。

一番成長のいいネギはネギ坊主っぽい芽が。最初から坊主つきで生えてくるのか。

この前のレースで使った、新作ヘッド、ちょっと削りました。燃焼室の段々を とるくらいに。これで0.1cc増えて単体9.6cc、組み込み8.2cc

Oリング溝も少し掘りが足りなかったので追加掘り。溝浅いと吹き抜けが激しい 気がする。

今日中にCR85の整備を終わらせようとしたのだけど、ちょっと熱っぽくなって しまって終わらなかった。どうもMCFAJ一戦が終わってから体の調子が戻らない。 無理が効かない歳かね...。
筑波選手権2戦とMCFAJ2戦富士、エントリーしました。富士に焦点を合てて 連休中にRS125直して、富士をメインに練習して行きたい。