2010年6月アーカイブ



ヤフオクで富士電機のVFC304Aを落としました。これはシロッコでもターボでも
なくリングブロー。リングブローはウエスコポンプの応用らしい。シロッコだ
と流量は稼げるけれど圧は稼げない。ターボだと両方とも稼げる。リングブロー
だと圧は稼げるけれど流量は稼げない。

3相200Vなのでとりあえずボール盤のインバータにつなげて動作チェック。リン グブローは逆回転で排気と吸気を反転することが可能(ここはシロッコ、ターボ とまったく違う点)。その場合効率は60%まで落ちてしまうけれど、これを利用 して通路の掃除などに使うことができる。

今の集塵システムはOneidaのdust deputyとE-value EVC-200Sの組合せ。これを 拡張していこうと思う。
E-Value EVC-200S
1.2kW 1.93m^3/min 16kPa

VFC304A
0.42kW 1.5m^3/min 12.5kPa
この掃除機の代わりにVFC304Aを使おうという計画。連続運転可能で、静かだし。 インバータで回転数を変化できるのも、使い道がありそう。
実のところ、この集塵システムの場所さえも邪魔なので屋根裏に組み込みで 追いやりたいという動機もある。

最近、足裏の角質がひどい。靴下を履くにもひっかかるくらいなのだ。という ことでベビーフットを試してみることに。パッチテストして大丈夫だったので、 試してみます。パックしている間でもヨチヨチ歩きで歩きまわれないこともな いです。
渋谷マークシティのPLAZAで購入。女子雑貨店なのでちょっと緊張したけれど、 すぐに見つけれてよかった。「ラッピングしますか?」と聞かれたのだけど、こ れ、ラッピングしてプレゼントしたらどうなんだろう。



クエン酸鉄、ここにきて驚く程反応が進んだ。左端にちょっと浮いているスチー
ルウールを残して全て溶けてしまった。真っ黒に見えるけれど塗ると黄緑色。
これはクエン酸60gにスチールウール3つだ。



杉のテストピースにタンニン液を塗り、数時間放置、またタンニン液を塗り数 時間放置後、クエン酸鉄を塗布、数時間反応させ、流水の中雑巾でごしごし洗っ たもの。これは十分な染まり具合だ。作業台はこれでいこう。早速タンニン液 の一回目の塗布をしておいた。謎にJapanese "WA" tasteになりそう。

ミツトヨのノギスを新調。測定物はやっぱりミツトヨで。中国製のノギスは最 初にミツトヨのノギスで精度を確認している。

"Woodshop Dust Control: A Complete Guide to Setting Up Your Own System: Completely Revised and Updated Sandor Nagyszalanczy"によると、 小さい作業場(といってもアメリカでは二台分の車庫以下の大きさあたりが "small shop"のようだ)では1.5〜3HPの5〜6 in.Aqの静圧で600-800cfmの流量が 確保できる送風機(1.1〜2.3kWで1.2kPa〜1.5kPaの静圧で17〜22m^3/minの流量)に 150cmのダクトから配管し、うちにある12インチの自動カンナだと 500cfm(14m^3/min)は確保して5in.(127cm)のダクトがのぞましいようだ。
このスペックだと昭和電機だとEC-125(最大風量28m^3,最大静圧2.5kPa,1.0kw)が 静圧1.2kPaで20m^3/min、1.5kPaで16m^3/minになり該当するけれど、このクラス になると十万円近い。
それにそもそも木工部屋が押し入れまで含めて7畳なので27m^3、2分もかからず に部屋中の空気が循環するよ。この送風機に合う大きさのサイクロンとなると 半畳は食うし、これはちょっと...。
空気洗浄機は一時間に6〜8回部屋の全量が循環する流量を確保すればいいようだ。 うちの部屋だと3m^3/minあたり。これは普通の換気扇で十分いける。
部屋を負圧に保つために使っているシロッコファンは三菱のBF-19Sで、これは なんと最大風量18m^3/min。圧かけてるのでどこまで実際の流量があるかは不明。 200Paで3.3m^3/minまで落ちてしまう。それでも十分だけれど。これがあるから 空気洗浄機は不要か。
集塵はこのtiny shopに合わせて試行錯誤するしかないかな。確かにかなりの流 量がないとスライド丸ノコの集塵なんかは不可能なのは感じているけれど...。


柿の実をもぎとって、フードプロセッサで粉砕、30分ほど煮こんでタンニンを
抽出してみました。鍋からあけたトレーに鉄の切子がちょっと残っていて、
ちょっと反応してしまった。切子は真っ黒。タンニン酸は分解して没食子酸に
なり、これが還元力が強く、赤サビを黒サビに還元できる。この方向でも使い
道あるかも。



クエン酸鉄は、今日はこんな具合。沈殿してるのは溶液中にいられなくなった クエン酸だろうか?

SPFにタンニン液を塗り、乾燥後クエン酸鉄を塗ってみた。これは30分後。タン ニンブースト効果は十分にある。(SPFはあまりタンニンがないのでそのままク エン酸鉄を塗っても黒くならない。)

8時間後、遊離したタンニン鉄を水でじゃぶじゃぶ流しながら雑巾でふきとった 後。難しいね。上の箸は柿の実をかきまわしていたのに、クエン酸鉄をかけた もの。このくらいがっちり染めれると実用的なのだけど。濃紫色がいい。




クエン酸鉄を作ってみることにしました。



2,3時間後、黄緑色の液を杉に塗ってみる。うーん、黄緑色がついたくらい。

アパに塗ってみたらすごい。30秒くらいすると道管が黒々と染まる。

木口は真っ黒。

タンニンといえば柿。庭の柿の木から実をとってきてクエン酸鉄溶液をたらし てみる。確かに黒くなるところはあるけれど...

2,3時間経つと黒くなっていた。

スチールウールをさらに二つ、計三つ入れると白濁してきた。このまま放っておいたら、析出してきてしまった。あらら。

これ、柿の実を割ったのを置いておいた杉。いい感じに色が着いているけれど、 タンニン外から補充するならインキで染めるのとそう変わらないような...。

さて、そろそろCR85組まないと。来週レースだし。気分変えてオーリンズでい こう。

アパは最終的にこんな感じなった。これはウェザリング系だね。何十年も雨ざ らしされた感。



作業台続き。アクセサリを作りはじめます。まずは移動用キャスターの台側の
パーツ。M16の長ナットと、テーブルの脚の固定具。



長ナットは47mmに詰めて、片側3mmをφ23に、プレートもφ23で穴開け。後は圧 入して溶接すれば完成。キャスターにM16を溶接して移動の時にはこれを廻して 押しだそうという目論見。

ショルダーバイス。これもテーブル脚の固定具の大きめのものと、M20の長ネジとM16ワッシャ、M20ワッシャ、16φ用のサークリップ。

M20長ネジの端から13mmをφ16にして、サークリップ溝つけて組みたて。押し 部分は溶接する予定(しなくても大丈夫そう)。サークリップ溝は最初だけ突切 りでガイドつけてからハックソーを手で当てて切削。突切りはあまりガツガツ 使いたくないの。一番壊してるのが突切りバイトだから...。今迄何本壊したこ とか...。
この固定具が皿状になっているので引きの部分のパーツを組める余地があるの がポイント。これ見つけた時は胸が高鳴った。

テールバイス。いらない部分を削って、M16の長ネジが貫通する穴、溝を掘り ました。




作業台続き。バイス、キャスター部分の素材になりそうな部品を集めたり、買っ
てきたりして検討。大量生産されている商品はかなり格安感があるので、その
あたりの部品を効率的に使えないかと画策しています。作れるからといってな
んでも素材から作ってしまうと、とても大変なので。ルーターテーブルでやり
過ぎて、今はちょっと、お腹一杯。

といってユニットを買うよりは作りたい。

楔に使ったアパ材はここまで使いきった。一日ボンドで固定しておくだけでワー クの固定には十分な強度がある。




作業台続き。部材切削終了。脚部分は100mm角上部分は85mm角なので思ったより
苦労した。取り回しがいいから(柱にホゾ切るのに較べて)かなり楽だろうと思
いきや、それなりに大変だ。



先に上部分と足掛け部分の旋盤ステーの部分だけ組み立て。後は一気に。ボン ドを塗る面積も拡いのでパテを練るプラスチックのヘラで塗ってみたところ、 とても調子がよかった。小さいのものでもこれの方がよさそう(今迄平筆でチマ チマ塗っていた)。
ホゾ10個を一気になので、最初にボンドを塗ったところは既に硬化しはじめて しまった。でもこれ、木目に吸われてしまった分でもう一度塗り直した方がよ さそうな感じがした。
組み立て。通しホゾなのでクランプをかける位置に制限があり、さらにリーチ が長い。当て木をすることができずクランプ直にするしかなかった。こういう 時はあらかじめワークに当て木をガムテープかなんかで固定しておくとよさそ う。
アパの楔はトンカチで叩く上面が潰れて入らなくなるとこまで叩き込み。左右 にずれることがあるので、そこだけよく注意。一箇所、斜めにずれてホゾから ずれてホゾ穴を割る方向に入っていってしまった...。

完全硬化までしばらく放置。



雨漏りで漏電っぽい。困った。おまけに疑惑の場所が屋根裏から入れず、二階
の床を開けるか、一回の屋根を開けるしかない。うーん。それとも外壁からひ
たすらシールするか。一階屋根と二階壁の取り合いの部分なんだ。明日の晴れ
のうちになんとかしておかないと...。

楔溝切りジグ。



作業台続き。この前買った治具本(The Best Jigs and Fixtures for Your
Woodshop: 30 Projects That Provide Clever Solutions to Common Problems
(Popular Woodworking) Popular Woodworking Magazine)に載っていた
"Shim-Making Fixture"を作った。角度は6度。



これ、使うまではちょっと疑問だったのだけど、使ってみるとなるほど納得。 最初の送りはこの保持具に材を押しつけるようにして、刃が入ってからは保持 具だけ持って送ればOK。

材料はホームセンターの銘木の端切れコーナーを漁って、ちょうどいい大きさ と硬度のアパの端切れで。4つほど足りなかった。ちょうど4枚くらいとれそう なくらい材料は残っているけれど、もうこの薄さになると安定して切断できな い。木工用ボンドで二枚圧着しておいた。

組み立てに際し、OTOROクランプを6セット、2mパイプを4本1mを2本導入。 OTOROクランプはネジ部分が外に出ないので溶接にもいいというのが気にいって (スパッタがネジにとぶと、それハツらないとネジが廻らなくなってしまうの だ)。
木工旋盤の位置決め。ベルト交換できるギリギリの位置を探ってみると、延長 ベッドつけてちょうどよく収まりそう。

しかし旋盤のステー用の材料が切れてしまった。仕方ないので刷毛の残りを絞 り出したり、ドリルのあてに使っていたこれを使うことに。汚いけれど乾燥度 を考えると新しく材を購入するよりこれの方がいい。SPFレベルに規格管理され た杉材があるといいのだけど。




仮組みできるようにホゾの調整をして(あと楔締めするのでホゾの出口を拡め
に)、仮組みしてみました。乾燥した杉なので見た目に反してとても軽い。これ
で34kgしかない。この上に24mmベニヤを二枚、足掛けの部分に木工旋盤を置く
ので(そのためにちょっと無理ある構造になっている)そこそこ重量は稼げるの
では....



これで作業するのが楽しみ。




作業台続き。見えるところは長円のホゾにしてみることにした。見た目がなん
となく新鮮ということで。アルミでゲージを作って、これに合わせるように削っ
ていくと割と簡単に作れた。できる限りノミで掘って最後の調整だけヤスリに
すると効率がいい。

100mmもある通しホゾなので仮り組できるところまで調整していいものか悩んで いる。仮り組できるところまでにすると結構ゆるゆるになってしまいそうな。 楔締めするからそれでもいいのかな。

次の問題は長円のホゾ穴だ。これは30φのドリルを横連続で開けたので、最後 の部分で切削抵抗に負けて1mm程度尻つぼみになってしまっている。角穴ならノ ミで修正すればいいだけなのだけど、丸なのでどうしよう。地道に丸棒にペー パー巻いて削っていくか。丸ノミを導入するか。



菜園状況。ジャガイモを収穫。ちょっと遅いか。



作業台続き。製材して、角ノミ機でホゾ穴を開けようとしたらトラブル発生。 芯が硬過ぎて角ノミの刃が入らない...。この杉は二年前グリーン材で、物置小 屋建設の時は含水率の高い黒芯材なんかはノミ叩くと水しぶきがあがる程だっ た。生材って加工しやすいんだな...。あの頃はサクサク掘れたのに。
仕方ないので角ノミのドリル部分だけで丸穴だけ開けて、後は手切削に。
この前買ったマキタの125mm内装直角マルノコ5210L、実に使い勝手がいい。木 口から丸ノコ入れてホゾを入れるのはちょっと怖くて敬遠していたのだけど、 これなら安心して作業できる。

集塵設備が欲しい。スライド丸ノコには集塵つけているけれど、吸いきれない。 とはいえスライド丸ノコを固定して周りから集塵するような場所はなし...。

角ノミ機が使えなかったので、ホゾ穴の切削が大変。

試しに一個、ホゾを丸くしてみたところ、かなり残念なことになってしまいホ ゾの角を落とすか、それともホゾ穴を角にするか迷っている。



エアタッカーの使い心地を試してみた。1025(上の部分が10mm、打込みが25mm)
で。このステープルが一生で使い切れないくらい余っている。
これは実に いい。ネジ止めだと回転力があるので、どうしても保持した状態からずれる力 が働くのだけど、タッカーなら真上から打ち込むだけなので位置がきっちり決 まる。まさにジグ向け。欲を言えばネイラーの方がいいけど、7kg/cm^2かけれ ば余裕でめりこむので問題ないといえば問題ない。
これは角を45度に削る治具。この前の吊り棚では適当なジグで急場をしのいだ のをちゃんと作ってみた。

これは自由ホールドジグ。ちょっと手押しじゃ怖い小さいパーツをその場で適 当な場所にクランプをネジ止めしてホールドするもの。これだけだとまだちょっ と不安であともう一つ横押しクランプが欲しい。これの両脇の角材もタッカー (+ボンド)で固定。
タッカーの存在を忘れていたのは悔やまれる。(実は二台も持ってる。一台はバ イクのシートの貼り換え用に、一つはガレージのリフォーム用に。)

廃材処理運動続き。物置を建設した時の余剰材料が残っているので、それを使っ て作業台を作ることに。やっぱり作業台があると、ほんのちょっとした作業を すぐに作業できるのがいい。天板は交換可能に24mmベニヤを二枚重ねで48mm (24mmでも一枚だとよれてしまう)。
和鉋なので、力がかかる側はテーブル側になるようにテールバイスは向って左 側に。(洋鉋は押して削るのでテールバイスは右側になる)




ネジの加工テスト。スナップリングの溝切るくらいまでは余裕。中心に穴空け
てネジ切るとかは勘弁したいというところか。鉄は切削経験不足で今ひとつど
こまでやれるかが見積りがつきにくい。アルミならどの材質だろうとちまちま
頑張ればなんとかなるのだけど、鉄になると限界がある。SS400/S25Cあたりに。



本を読んでいて、そういえばエアタッカもっているのに活用していないことに 気付いた。作業部屋にエア配管までされているのに。塗装とエアブローにしか 使っていなかった。


"Smart Workshop Solutions"にあったテーブルソーキルスイッチを実装してみ
た。確かにこれはいい。両手で送って止めたいところで足で止めれる。



このスライディングユニット、正月にFF13をやるために買ったProLite B2409HDSの上下ユニット。スプリングを外してアウターとインナーをずらして みた。この強固なインナーとアウターは使えるかも。長ネジと組み合わせてテー ルバイスのユニットに使えないかどうか画策中。

WATCOのエボニーを試してみた。下のツマミはチェリー。上がエボニー。手前は SPFに塗ってみたもの。これは緑が強すぎるな。ウェザリング的にはいい感じだ けれど...。

SH2A続き。SH2Aの新規命令に、MOVML.L、MOVMU.Lがある。これは多重レジスタ 退避/回復命令で、それぞれR0-Rn,Rn-R14,PRを連続して扱う。RnをR15(SP)とし た時だけR15じゃなくPRになる。これは実用本位の設計。これを使ってレジスタ バンクと同じように退避すると
	.align	2
	.section .text
	.global _irq3

_irq3_bank:
	mov.l	.L_c_irq3, r0
	mov	sp, r4
	jsr/n @r0
	resbank
	rte
	 nop

_irq3:	// stack
	sts.l	macl, @-sp
	sts.l	mach, @-sp
	stc.l	gbr, @-sp
	movml.l sp, @-sp	// Save PR, R14-R0
	mov.l	.L_c_irq3, r0
	mov	sp, r4
	jsr/n @r0
	movml.l @sp+, sp	// Restore R0-R14, PR
	ldc.l	@sp+, gbr
	lds.l	@sp+, mach
	lds.l	@sp+, macl
	rte
	 nop

	.align	2
.L_c_irq3:
	.long	_c_irq3
こんな感じ。割り込み突入時にレジスタの割りふりに悩まずに済むのはとてもうれしい。



Amazonって時に驚くスピードで届く。今日届いたうちの二冊は6/4に注文したも
のなのだけど、一緒に届いた二冊は昨日の夜注文したやつだ。もしかしてダブっ
て注文してしまったかと焦って注文履歴を確認してしまった。

「この商品を買った人はこんな商品も買っています」の戦略にまんまとはまっ てしまっている。でもどれも面白い本。洋書がきままに買えるという環境が本 当にうれしい。
整理棚続き。結構前に接いでおいた天板の目違い払い。いつも通りうまくいか ない。当初、愛用していた下側に置いてあるカンナを砥ぎ直して、ちょっとス クイ角多めにしてみたところ、超大失敗。かかりは悪いのにかかるとガリガリ してしまう。もう一度角度を戻して砥ぎ直してみたものの、左右の刃の出が非 対称になってしまいボロボロ。別のカンナ(天板の上に乗っているやつ)で、こ の後は修正。このカンナあんまりいい印象がなかったのだけど、意外によかっ た。まめに刃を出さないとすぐに刃が戻ってしまうのがちょっと問題。できる 限り修正。目違いはひどいし、さらに板が反ってるし。節は多いし。

ヒドい。今回はこれ全部とのこで埋めてみよう。

吊り棚使ってみた。ちょっと机の上が広くなった。

SH2A続き。レジスタバンクの確認。レジスタバンクオーバーフローで例外を起こす 設定で
	.align	2
	.section .text
	.global _irq3
_irq3:
	mov.l	.L_c_irq3, r0
	mov	sp, r4
	jsr/n @r0
	resbank
	rte
	 nop

	.align	2
.L_c_irq3:
	.long	_c_irq3

void
c_irq3 (uint32_t sp)
{
  static int nbank;
  extern void frame_dump (uint8_t *);

  iprintf ("IRQ3! sp=%x priority=%d\n", sp, intr_status () >> 4);
  if (++nbank > 15)
    {
      frame_dump ((uint8_t *)sp);
    }
  intr_enable ();
  __asm volatile ("movi20 %0, r6" :: "i"(0xdead));
  while (/*CONSTCOND*/1)
    ;
}
割り込みにハンドラに制御が渡される時点で、その割り込みハンドラ以下の優 先度の割り込みが禁止されるので、全ての割り込み可能にしてビジーループ。 これで多重割り込みのテスト。
16段目でオーバーフローの例外が起きるのを確認。
RAM data: 0x1c00369c-0x1c0036dc 64byte
bss: 0x1c0036dc-0x1c003780 164byte
VBR: 0x1c000000 (0x1c000000)
FRQCR=104
PLL: x12, Internal x1/1, Peripheral x1/6
Ick=144MHz, Pck=24MHz, Bck=48MHz
STBCR2: ........ [0x0] 0
STBCR3: ......|. [0x2] 2
STBCR4: ........ [0x0] 0
STBCR5: ...|.... [0x10] 16
STBCR6: ........ [0x0] 0
STBCR7: ..|.|.|. [0x2a] 42
STBCR8: ........ [0x0] 0
intc_priority: fffe0818:0 0->13
user> IRQ3! sp=1c013fbc priority=13
IRQ3! sp=1c013fb0 priority=13
IRQ3! sp=1c013fa4 priority=13
IRQ3! sp=1c013f98 priority=13
IRQ3! sp=1c013f8c priority=13
IRQ3! sp=1c013f80 priority=13
IRQ3! sp=1c013f74 priority=13
IRQ3! sp=1c013f68 priority=13
IRQ3! sp=1c013f5c priority=13
IRQ3! sp=1c013f50 priority=13
IRQ3! sp=1c013f44 priority=13
IRQ3! sp=1c013f38 priority=13
IRQ3! sp=1c013f2c priority=13
IRQ3! sp=1c013f20 priority=13
IRQ3! sp=1c013f14 priority=13
null_handler: 15
次はレジスタバンクオーバーフローで例外を起こさず、スタックに自動的に退避 する機能を確認。OK。
RAM data: 0x1c003a34-0x1c003a74 64byte
bss: 0x1c003a74-0x1c003b1c 168byte
VBR: 0x1c000000 (0x1c000000)
FRQCR=104
PLL: x12, Internal x1/1, Peripheral x1/6
Ick=144MHz, Pck=24MHz, Bck=48MHz
STBCR2: ........ [0x0] 0
STBCR3: ......|. [0x2] 2
STBCR4: ........ [0x0] 0
STBCR5: ...|.... [0x10] 16
STBCR6: ........ [0x0] 0
STBCR7: ..|.|.|. [0x2a] 42
STBCR8: ........ [0x0] 0
intc_priority: fffe0818:0 0->13
user> IRQ3! sp=1c013fb4 priority=13
IRQ3! sp=1c013fa4 priority=13
IRQ3! sp=1c013f94 priority=13
IRQ3! sp=1c013f84 priority=13
IRQ3! sp=1c013f74 priority=13
IRQ3! sp=1c013f64 priority=13
IRQ3! sp=1c013f54 priority=13
IRQ3! sp=1c013f44 priority=13
IRQ3! sp=1c013f34 priority=13
IRQ3! sp=1c013f24 priority=13
IRQ3! sp=1c013f14 priority=13
IRQ3! sp=1c013f04 priority=13
IRQ3! sp=1c013ef4 priority=13
IRQ3! sp=1c013ee4 priority=13
IRQ3! sp=1c013ed4 priority=13
IRQ3! sp=1c013e78 priority=13
r0:0
r1:0
r2:ffffff0f
r3:fffeb010
r4:a
r5:0
r6:dead
r7:1c013e38
r8:1c013ed4
r9:1c000c6c
r10:1c000dac
r11:1c0006a4
r12:1c000c6c
r13:1c003a78
r14:1c000d60
pr:1c0019e4
gbr:ac1dcafe
mach:8b4005ad
macl:8b7aaae1
pc:1c001a08
sr:0
IRQ3! sp=1c013e1c priority=13
r0:0
r1:4001
r2:ffffff0f
r3:fffeb010
r4:a
r5:0
r6:dead
r7:1c013db0
r8:1c013e78
r9:1c000c6c
r10:1c000dac
r11:1c0006a4
r12:1c000c6c
r13:1c003a78
r14:1c000d60
pr:1c0019fa
gbr:ac1dcafe
mach:8b4005ad
macl:8b7aaae1
pc:1c001a08
sr:4001
レジスタバンクがオーバーフローした時にハードウェアでスタックに退避され る形式はこう。できればこの形にしたいけれど、もうちょっと考察。
// Stack frame when exception is occured.
struct exception_stack_frame
{
  uint32_t pc;
  uint32_t sr;
} __attribute__((packed));

// Frame must be reserved in exception
struct exception_frame
{
  uint32_t r0;	// return value (caller saved)
  uint32_t r1;	// scratch (caller saved)
  uint32_t r2;	// scratch (caller saved)
  uint32_t r3;	// scratch (caller saved)
  uint32_t r4;	// args (caller saved)
  uint32_t r5;	// args (caller saved)
  uint32_t r6;	// args (caller saved)
  uint32_t r7;	// args (caller saved)
  uint32_t r8;	// callee saved
  uint32_t r9;	// callee saved
  uint32_t r10;	// callee saved
  uint32_t r11;	// callee saved
  uint32_t r12;	// callee saved
  uint32_t r13;	// callee saved
  uint32_t r14;	// frame pointer (callee saved)
  uint32_t pr;
  uint32_t gbr;
  // MAC regsiters. in Renesas convention, these are callee saved.
  uint32_t mach;// caller saved
  uint32_t macl;// caller saved
  struct exception_stack_frame stack_frame;
} __attribute__((packed));



棚続き。側板がフレーム構造で棚板のホゾが見えてしまう。うまくホゾが切れ
ればそのままでもいいかと思っていたのだけど、かなり汚ないのでこれを隠す
パーツをラワンから。フェザーボードも初の出番。柔さもそう悪くなさそう。



全てのパーツを切削終了。壁にかける部分はちょっとギミックを施してみた。 壁取り付けパーツと貫が設置時には一体になる構造。

組み立て。一箇所間違えた。一番上のパーツと下から二番目のパーツ、幅は同 じくらいなのだけど、薄さが微妙に違うのだけど反対に組んでしまった。どう も組み立ての時は焦ってしまう。



ちょっと残っていたWATCOのオイルでフィニッシュ。やっぱり上の部分が重い印 象だな。

さっそくインストールしてみる。ラワンとSPFで色味が違うのがいい感じ。



棚続き。フェンスユニットを外してガイドだけで切削。アリ溝を掘ります。当
初普通のマイターゲージで送ってみたところ、うっかり手がぶれて大失敗して
しまった。




急遽ガチ固定の送り具を作成。引きクランプの先にアルミ削り出しの固定具を つけてみた。ガイド部分は安定感を求めてなんと50cm。
この作業の段階になってルーターテーブルとテーブルソーの上面がずれている ことがわかり、シムを入れて調整。まだまだ本調子とはいかない。

ホゾ部分はルーターテーブル横にとりつけたトリマーで横フライス的作業で。 先に外形切ってからホゾを切削したのは失敗。先にホゾ切って外形にすれば楽 にチッピングなしに加工できた...。

仮組み。ちょっと棚板が厚過ぎかも。もうちょっと薄くしよう。側板には間違 えて表裏に逆に加工してしまった跡が。一番上の部分が重すぎるかな。ここ、 再生中のCDのケースを置いておくところ。実は今でも毎日CDから再生している。 デスクトップマシンPowerEdge T105でNetBSDなので(USBが不安定)...。
下手に掘り込むと埃がたまるし、チープになりそうな感じがプンプンするので このままで。

音を出せなくなる時間になったので、また、つまみの練習。系統だった手段を 考えたい。(27個作るので)
まずは6cmくらいの長さで適当に切断。

ここはφ30まで切削して、つまみの外形までそこそこ切削しておいた方がいい。 (これはφ40で、なにも切削していない)

トンボして引き出しに埋め込む部分をφ13で切削。桜だとこんな切子が出る。



またトンボして、姿バイトで切削してみたところ、思いっきりキャッチしてし まった。これは無理し過ぎか。

できる限り木工旋盤の作業を楽にすべく、こんなところまで。

木工旋盤に移って、外形切削。回転数は最低で。使うバイトはこの二つ。切削 面をできる限り減らしてキャッチのリスクを減らして、後は研削で頑張る方針。 研削はベルトかけかえて怖くない程度に高回転で。

#40,#100,#320,#400と研削した。キャッチで失敗した傷はいいとして、#40でと れる傷がとれてない。まだまだだね。

SH2A続き。割り込みまわり。レジスタバンクを使うと
	.align	2
	.section .text
	.global _irq3
_irq3:
	mov.l	.L_c_irq3, r0
	jsr/n @r0
	resbank
	rte
	 nop

	.align	2
.L_c_irq3:
	.long	_c_irq3
こんなので全て終わってしまう。これが15段。すごい。これを活用するにはど ういった形がいいのかいろいろと妄想中。今迄マイOSはIRON系のスケジューリ ングだったのだけど、ここはフリーダムなスケジューラでいきます。


釣り棚続き。側壁部分の組み立てまで。



桜から切削したつまみにWATCOのチェリーで仕上げてみた。んー、やっぱり赤味 が強くてイヤらしいかも。

またひとつ練習につまみを切削。回転数もいろいろ変えてみていいところを探 しています。



SH2A続き。IRQ3(PG11)にプッシュボタンをつけた。これポートをプルダウンし てボタンでVccにあげるだけなのだけど、2回も配線間違えた。端子の先に出る と無力だ...。
SH2Aの新命令を押さえておきます。一つはbset,bclr,band,bor...の直接メモリを いじるビット命令。これ#imm3,@(disp12,Rn)の形式なので"m"が使えず("m"にすると @Rnになってしまう)、アドレスを渡しています。
#define	BSET(bit, addr)								\
  __asm volatile ("bset.b %0, @(0, %1)":: "i"(bit), "r"(addr): "memory")
#define	BCLR(bit, addr)								\
  __asm volatile ("bclr.b %0, @(0, %1)":: "i"(bit), "r"(addr): "memory")
"memory"をつけてメモリが改変されるのを知らせます。これがあることでgccが もう一度読みなおしてくれる。
"memory"あり

! 94 "main.c" 1
	bset.b #2, @(0, r8)
! 0 "" 2
	mov.b	@r8,r7
	mov.l	@r9,r4
	mov	#1,r5
	mov.l	.L60,r6
	jsr	@r10
	extu.b	r7,r7
! 96 "main.c" 1
	bset.b #0, @(0, r8)
! 0 "" 2
	mov.b	@r8,r7
	mov.l	@r9,r4
	mov	#1,r5
	mov.l	.L61,r6
	jsr	@r10
	extu.b	r7,r7

"memory"なし
! 94 "main.c" 1
	bset.b #2, @(0, r1)
! 0 "" 2
	mov.l	.L63,r1
	mov.l	@r1,r4
	mov	#1,r5
	mov.l	.L61,r6
	mov.l	.L65,r1
	jsr	@r1
	mov	#0,r7
	mov	r15,r1
	add	#3,r1
! 96 "main.c" 1
	bset.b #0, @(0, r1)
! 0 "" 2
	mov.b	@r1,r7
	mov.l	.L63,r1
	mov.l	@r1,r4
	mov	#1,r5
	mov.l	.L64,r6
	mov.l	.L65,r1
	jsr	@r1
	extu.b	r7,r7
あと新命令としてはclips.b,clips.w,clipu.b,clips.w。8bit,16bitでクリップ してくれる命令なのだけど、これはどういった使い道だ? 一応ここぞという時に 使えるように用意はしておいた。
#define	CLIPS_B(r)								\
  ({										\
	int32_t _tmp_  = r;							\
	__asm volatile ("clips.b %0" : "+r"(_tmp_));				\
	_tmp_;									\
  })
#define	CLIPU_B(r)								\
  ({										\
	uint32_t _tmp_  = r;							\
	__asm volatile ("clipu.b %0" : "+r"(_tmp_));				\
	_tmp_;									\
  })
#define	CLIPS_W(r)								\
  ({										\
	int32_t _tmp_  = r;							\
	__asm volatile ("clips.w %0" : "+r"(_tmp_));				\
	_tmp_;									\
  })
#define	CLIPU_W(r)								\
  ({										\
	uint32_t _tmp_  = r;							\
	__asm volatile ("clipu.w %0" : "+r"(_tmp_));				\
	_tmp_;									\
  })
テスト
  BSET (2, &b);
  printf ("bset 2 %x\n", b);
  BSET (0, &b);
  printf ("bset 0 %x\n", b);
  BCLR (2, &b);
  printf ("bclr 2 %x\n", b);
  BCLR (0, &b);
  printf ("bclr 0 %x\n", b);
  uint16_t hw = 0xdead;
  printf ("%x %x\n", SWAP16 (hw), hw);
  uint32_t w = 0xac1dcafe;
  printf ("%x %x\n", SWAP32 (w), w);
  printf ("128->%d 127->%d -127->%d -128->%d -150->%d\n",
	  CLIPS_B(128), CLIPS_B(127), CLIPS_B(-127), CLIPS_B(-128),
	  CLIPS_B(-150));

  printf ("%x %x %x\n", CLIPU_W (0xac1dcafe), CLIPU_W (0xfff1),
	  CLIPU_B (-127));
RAM data: 0x1c00366c-0x1c0036ac 64byte
bss: 0x1c0036ac-0x1c003750 164byte
VBR: 0x1c000000 (0x1c000000)
FRQCR=104
PLL: x12, Internal x1/1, Peripheral x1/6
Ick=144MHz, Pck=24MHz, Bck=48MHz
STBCR2: ........ [0x0] 0
STBCR3: ......|. [0x2] 2
STBCR4: ........ [0x0] 0
STBCR5: ...|.... [0x10] 16
STBCR6: ........ [0x0] 0
STBCR7: ..|.|.|. [0x2a] 42
STBCR8: ........ [0x0] 0
intc_priority: fffe0818:0 0->15
user> IRQ3!
IRQ3!
IRQ3!

user> 
user> 
user> IRQ3!

user> 
user> test
intc_priority: fffe081a:12 0->8
1c002e0c
movi20 #-116662=fffe384a
movi20s #-29865472=fe384a00
movi20 #0xf0=f0
movi20s #0xf00=f00
movi20 #-241=ffffff0f
bset 2 4
bset 0 5
bclr 2 1
bclr 0 0
adde dead
feca1dac ac1dcafe
128->127 127->127 -127->-127 -128->-128 -150->-128
ffff fff1 ff
user> 



ようやくスタックが巻き戻って釣り棚の製作。斜めの構造なのでジグを作りな
がら切断。やっぱり作業台があるととても楽。立ったり座ったりがだんだん辛
くなってきた今となっては立ったまま作業ができるのはうれしい。



SH2A続き。割り込みマスクの設定。ここはそのマスクにMOVI20命令を使ってみ よう。
  uint32_t r = 0;
  __asm volatile ("movi20 #-116662, %0" : "=r"(r));
  printf ("movi20 #-116662=%x\n", r);	// ->0xfffe384a
  __asm volatile ("movi20s #-29865472, %0" : "=r"(r));
  printf ("movi20s #-29865472=%x\n", r);	//->0xfe384a00
  __asm volatile ("movi20 #0xf0, %0" : "=r"(r));
  printf ("movi20 #0xf0=%x\n", r);	// ->0xf0
  __asm volatile ("movi20s #0xf00, %0" : "=r"(r));
  printf ("movi20s #0xf00=%x\n", r);	// ->0xf00
  __asm volatile ("movi20 #-241, %0" : "=r"(r));
  printf ("movi20 #-241=%x\n", r); // ->0xffffff0f
gccの場合、符号拡張を期待する値は10進でマイナス符号で入れないとだめ。上 記の例で-116662をインストラクションに入るバイナリパターンを考慮して 0xe384aとしたりするとだめ。MOVI20Sの場合も8bitシフトした後の値を符号付 き10進で入れる。
割り込み周りの制御は、今回はできる限りインラインアセンブラにしてみた。 intr_priorityはレジスタが4つ必要で、4つ以上になるとgccがうまく展開でき なかったので、これはサブルーチンに。
#define	intr_enable()								\
  ({										\
    uint32_t _tmp0_, _tmp1_;							\
    __asm volatile ("movi20	#-241,	%0\n\t"					\
		    "stc	sr,	%1\n\t"					\
		    "and	%0,	%1\n\t"					\
		    "ldc	%1,	sr"					\
		    : "=r"(_tmp0_), "=r"(_tmp1_));				\
  })
#define	intr_disable()								\
  ({										\
    uint32_t _tmp0_, _tmp1_;							\
    __asm volatile ("movi20	#0xf0,	%0\n\t"					\
		    "stc	sr,	%1\n\t"					\
		    "or		%0,	%1\n\t"					\
		    "ldc	%1,	sr" : "=r"(_tmp0_), "=r"(_tmp1_));	\
  });

#define	intr_suspend()								\
  ({										\
    uint32_t _tmp0_, _tmp1_, _tmp2_;						\
    __asm volatile ("movi20	#0xf0,	%0\n\t"					\
		    "stc	sr,	%1\n\t"					\
		    "mov	%1,	%2\n\t"					\
		    "or		%0,	%1\n\t"					\
		    "ldc	%1,	sr\n\t"					\
		    "and	%0,	%2"					\
		    : "=r"(_tmp0_), "=r"(_tmp1_), "=r"(_tmp2_));		\
    _tmp2_;/* Return old mask */						\
  })
#define	intr_resume(s)								\
  ({										\
    uint32_t _tmp0_, _tmp1_;							\
    __asm volatile ("movi20	#-241,	%0\n\t"					\
		    "stc	sr,	%1\n\t"					\
		    "and	%0,	%1\n\t"					\
		    "or		%2,	%1\n\t"					\
		    "ldc	%1,	sr\n\t"					\
		    "not	%0,	%0\n\t"					\
		    "and	%0,	%1\n\t"					\
		    : "=r"(_tmp0_), "=r"(_tmp1_) : "r"(s));			\
    _tmp1_;/* Return old mask */						\
  })

// Optional
#define	intr_status()								\
  ({										\
    uint32_t _tmp0_, _tmp1_;							\
    __asm volatile ("movi20	#0xf0,	%0\n\t"					\
		    "stc	sr,	%1\n\t"					\
		    "and	%0,	%1\n\t"					\
		    : "=r"(_tmp0_), "=r"(_tmp1_));				\
    _tmp1_;									\
  })

__BEGIN_DECLS
cpu_status_t intr_priority (cpu_status_t);
__END_DECLS

	.align	2
	.section .text
	.global _intr_priority
_intr_priority:
	movi20	#-241,	r0
	stc	sr,	r1
	mov	r1,	r2
	and	r0,	r1
	or	r4,	r1
	ldc	r1,	sr
	not	r0,	r0
	rts
	and	r2,	r0
テスト。OK。
~>Local file name? a.mot
1668 lines transferred in 10 seconds 
!
Read 39142 byte. success
Start address: 0x1c0012d8
mon> 
mon> g
0x1c0140000012d8
RAM data: 0x1c0034a4-0x1c0034e4 64byte
bss: 0x1c0034e4-0x1c003588 164byte
VBR: 0x1c000000 (0x1c000000)
FRQCR=104
PLL: x12, Internal x1/1, Peripheral x1/6
Ick=144MHz, Pck=24MHz, Bck=48MHz
STBCR2: ........ [0x0] 0
STBCR3: ......|. [0x2] 2
STBCR4: ........ [0x0] 0
STBCR5: ...|.... [0x10] 16
STBCR6: ........ [0x0] 0
STBCR7: ..|.|.|. [0x2a] 42
STBCR8: ........ [0x0] 0
user> test
intc_priority: fffe081a:12 0->8
1c002ccc
movi20 #-116662=fffe384a
movi20s #-29865472=fe384a00
movi20 #0xf0=f0
movi20s #0xf00=f00
movi20 #-241=ffffff0f
................................ [0x0] 0
enable................................ [0x0] 0
diable........................||||.... [0xf0] 240
enable................................ [0x0] 0
suspend................................ [0x0] 0
........................||||.... [0xf0] 240
suspend........................||||.... [0xf0] 240
........................||||.... [0xf0] 240
resume........................||||.... [0xf0] 240
resume a................................ [0x0] 0
pri3................................ [0x0] 0
..........................||.... [0x30] 48
..........................||...| 0 [0x31] 49
pri7..........................||.... [0x30] 48
.........................|||.... [0x70] 112
.........................|||...| 0 [0x71] 113
resume a................................ [0x0] 0
user> interrupt
15 = 15 disabled
0 = 0 enabled
0 = 0 15 = 15 suspended
15 = 15 15 = 15         suspended
15 = 15 15 = 15         resumed
0 = 0 0 = 0 resumed
2 = 2 priority
2 = 2 4 = 4     priority
4 = 4 3 = 3             priority
4 = 4 4 = 4             priority
2 = 2 2 = 2     priority
15 = 15 disabled
user> 


家の桜の枝から引出しのつまみを作る練習をしてみた。やはりゲージを作らな
いと。思ったような形にするのが意外に難しい。これを27個作る予定。



SH2A続き。例外処理。h8sxの時は例外と割り込みを分けるかどうか迷ったけれど、 やっぱり分けない方がよさそう。ということで今回はこう。
void null_handler_main (int);

#define	NULL_HANDLER(x)								\
  void null_handler ## x (void) __attribute__ ((interrupt_handler));		\
void										\
null_handler ## x ()								\
{										\
  null_handler_main (x);							\
}

#define	VECTOR_DECL(handler, vector)						\
  NULL_HANDLER (vector)								\
void handler (void) __attribute__ ((weak, alias ("null_handler" #vector)))

VECTOR_DECL (invalid_instruction, 4);
VECTOR_DECL (invalid_instruction_slot, 6);
VECTOR_DECL (address_error_cpu, 9);
VECTOR_DECL (address_error_dma, 10);
VECTOR_DECL (nmi, 11);
VECTOR_DECL (fpu, 13);
VECTOR_DECL (udi, 14);
VECTOR_DECL (bank_overflow, 15);
VECTOR_DECL (bank_underflow, 16);
VECTOR_DECL (div_zero, 17);
VECTOR_DECL (div_overflow, 18);

extern void start (void);
extern void stack_start(void);	// XXX kludge hack

const interrupt_handler_t vector_table[]
__attribute__ ((section (".vectors"))) =
{
  [0] = (const interrupt_handler_t)start,
  [1] = (const interrupt_handler_t)stack_start,
  [2] = (const interrupt_handler_t)start,
  [3] = (const interrupt_handler_t)stack_start,
  [4] = invalid_instruction,
  [6] = invalid_instruction_slot,
  [9] = address_error_cpu,
  [10] = address_error_dma,
  [11] = nmi,
  [13] = fpu,
  [14] = udi,
  [15] = bank_overflow,
  [16] = bank_underflow,
  [17] = div_zero,
  [18] = div_overflow,
};

void
null_handler_main (int vector)
{
  iprintf ("null_handler: %d\n", vector);
  while (/*CONSTCOND*/1)
    ;
  // NOTREACHED
}
__attribute__ ((interrrupt_handler))を設定すると(lib/gcc/sh-elf/4.3.2/m2aのlibgcc.aをリンクする必要あり)、このようにお膳立てしてくれる。
1c001fd8 <_null_handler4>:
1c001fd8:	4f 62       	sts.l	fpscr,@-r15
1c001fda:	d1 16       	mov.l	1c002034 <_null_handler4+0x5c>,r1	! 1c002574 <___fpscr_values>
1c001fdc:	71 04       	add	#4,r1
1c001fde:	41 66       	lds.l	@r1+,fpscr
1c001fe0:	71 fc       	add	#-4,r1
1c001fe2:	ff 0b       	fmov	fr0,@-r15
1c001fe4:	ff 2b       	fmov	fr2,@-r15
1c001fe6:	ff 4b       	fmov	fr4,@-r15
1c001fe8:	ff 6b       	fmov	fr6,@-r15
1c001fea:	ff 8b       	fmov	fr8,@-r15
1c001fec:	ff ab       	fmov	fr10,@-r15
1c001fee:	4f 02       	sts.l	mach,@-r15
1c001ff0:	4f 12       	sts.l	macl,@-r15
1c001ff2:	4f 52       	sts.l	fpul,@-r15
1c001ff4:	2f 06       	mov.l	r0,@-r15
1c001ff6:	2f 16       	mov.l	r1,@-r15
1c001ff8:	2f 26       	mov.l	r2,@-r15
1c001ffa:	2f 36       	mov.l	r3,@-r15
1c001ffc:	2f 46       	mov.l	r4,@-r15
1c001ffe:	2f 56       	mov.l	r5,@-r15
1c002000:	2f 66       	mov.l	r6,@-r15
1c002002:	2f 76       	mov.l	r7,@-r15
1c002004:	4f 22       	sts.l	pr,@-r15
1c002006:	d1 0c       	mov.l	1c002038 <_null_handler4+0x60>,r1	! 1c001bd0 <_null_handler_main>
1c002008:	41 0b       	jsr	@r1
1c00200a:	e4 04       	mov	#4,r4
1c00200c:	4f 26       	lds.l	@r15+,pr
1c00200e:	67 f6       	mov.l	@r15+,r7
1c002010:	66 f6       	mov.l	@r15+,r6
1c002012:	65 f6       	mov.l	@r15+,r5
1c002014:	64 f6       	mov.l	@r15+,r4
1c002016:	63 f6       	mov.l	@r15+,r3
1c002018:	62 f6       	mov.l	@r15+,r2
1c00201a:	61 f6       	mov.l	@r15+,r1
1c00201c:	60 f6       	mov.l	@r15+,r0
1c00201e:	4f 56       	lds.l	@r15+,fpul
1c002020:	4f 16       	lds.l	@r15+,macl
1c002022:	4f 06       	lds.l	@r15+,mach
1c002024:	fa f9       	fmov	@r15+,fr10
1c002026:	f8 f9       	fmov	@r15+,fr8
1c002028:	f6 f9       	fmov	@r15+,fr6
1c00202a:	f4 f9       	fmov	@r15+,fr4
1c00202c:	f2 f9       	fmov	@r15+,fr2
1c00202e:	f0 f9       	fmov	@r15+,fr0
1c002030:	00 2b       	rte	
1c002032:	4f 66       	lds.l	@r15+,fpscr
1c002034:	1c 00       	mov.l	r0,@(0,r12)
1c002036:	25 74       	mov.b	r7,@-r5
1c002038:	1c 00       	mov.l	r0,@(0,r12)
1c00203a:	1b d0       	mov.l	r13,@(0,r11)
こんな感じで例外を起こして例外ハンドラが呼ばれるのまで確認。
uint32_t
e (int32_t argc, const char *argv[])
{
  int i = -1;

  if (argc > 1)
    i = atoi (argv[1]);
  printf ("test=%d\n", i);
  switch (i)
    {
    default:
      break;
    case 0:
      __asm volatile (".long 0xffffffff");
      break;
    case 1:
      __asm volatile ("resbank");
      break;
    }

  return 0;
}
SH7262 Simple Monitor Build Jun  6 2010 16:50:45
mon> l
CCR1=0 CCR2=0
~>Local file name? a.mot
1036 lines transferred in 6 seconds 
!
Read 24266 byte. success
Start address: 0x1c0012d8
mon> 
mon> test
mon> g
0x1c0140000012d8
RAM data: 0x1c0024a8-0x1c0024dc 52byte
bss: 0x1c0024dc-0x1c00257c 160byte
VBR: 0x1c000000 (0x1c000000)
user> test
intc_priority: fffe081a:12 0->8
FRQCR=104
PLL: x12, Internal x1/1, Peripheral x1/6
Ick=144MHz, Pck=24MHz, Bck=48MHz
STBCR2: ........ [0x0] 0
STBCR3: ......|. [0x2] 2
STBCR4: ........ [0x0] 0
STBCR5: ...|.... [0x10] 16
STBCR6: ........ [0x0] 0
STBCR7: ..|.|.|. [0x2a] 42
STBCR8: ........ [0x0] 0
1c001f74
user> e 0
test=0
null_handler: 4
SH7262 Simple Monitor Build Jun  6 2010 16:50:45
mon> 


麺屋武蔵武骨外伝に開店を待って突撃。ここは超人気店で開店直後に入っても
食べ終わる頃にはほぼ満席になってしまう。味玉つけ麺で。武蔵の味玉はうま
いので、ここぞの機会には外せない。麺は並で。胃を大きくしてしまうとその
後が大変なので...。やっぱり全ての具材がうまい。トロトロのチャーシューが
泣ける。実のこと言うと昔の薄味の汁の方が好きだった。このくらいの濃さの
方が一般受けはいいとは思う。これはこれでしょっぱい汁をスープ割りもせず
にゴクゴク飲む背徳感にジーンとしてみる(スープ割りした方がおいしいけど)。
ベストを言えば最初にスープ割りを頼んでいきなり割って食べたい。濃いのが
いい汁もあるけれど、この味は薄くていいんだと思う。今日はまだ59kg。余裕
余裕。

SH2A続き。割り込みまわりを見てみると、動き自体はH8SXの割り込みモード2と 同じだ。最近のルネサスはこのあたりが標準なのかな。とはいえソフト的には まったく使いまわしはきかない。命令セットの拡張あたりをみても、H8SXと SH2AはコアのベースがH8かSH2かくらいの違いにみえる。
まずはクロックの確認。Interface 2010/6付録の基板はデフォルトでクロック モード1で、USBクロック(48MHz)。SH7262の限界はIck 144MHz, Pck 36MHz, Bck 72MHzだ。一番最初のブートローダの段階でIck=144MHz,Pck=24MHz, Bck=48MHzにセットしている。Bckはクロックモードで固定されてしまうのでソ フトウェア的には変更できない。
クロックモードによって組み合わせに制限がある。モード1の場合、Pckは 12MHzか24Hzしか選べない。(試しに36MHzに設定してみたらハングした)
mon> l
CCR1=0 CCR2=0
~>Local file name? a.mot
666 lines transferred in 4 seconds 
!
Read 15587 byte. success
Start address: 0x1c0012a4
mon> 
mon> g
0x1c0140000012a4
RAM data: 0x1c001978-0x1c0019a0 40byte
bss: 0x1c0019a0-0x1c001a38 152byte
user> test
intc_priority: fffe081a-12 0->8
FRQCR=104
PLL: x12, Internal x1/1, Peripheral x1/6
Ick=144MHz, Pck=24MHz, Bck=48MHz
user> 


横浜家系 侍 渋谷店に開店直後に突撃。ここ一ヶ月ラーメン断ちしていて、レー
ス終わったらまっさきに行こうと思っていたのだ。ここでのセットは硬め濃い
目で。東松原店だった頃は「普通」でちょうどよかったのだけど、渋谷店になっ
てからはこれがベスト。待っている最中からよだれを飲みこみ続ける状態だ。
視界のはじで、ゆであがったな、盛って、具を乗せて...と顔を上げると、あぁ
まだほうれんそうが残ってたか。

待ちに待ったラーメンだ。レンゲでスープを飲むと、脳天まで染み渡る。ちょっ と味に慣れてきたところで海苔食べたり、チャーシューたべたり、微妙にリセッ トしつつ、うまい麺を食べながらスープをすする。スープだけになってしまっ たところで、水を飲んでフルリセット。そしてまたここでインパクトを味わう。 うまかった。この世の幸せを味わった。
天一も食べたいし、武蔵も食べたい。地味に豊洲ラーメンのつけ麺もお気に入 りだ。侍、東松原店の後に入った哲麺も調査に行きたいけれど...
次のレースは7/4 MCFAJ2戦富士。もう一ヶ月切ってるので我慢します。富士は 一番苦手だし。高速コーナー過ぎるんだよ。ストレートでジリジリとあがるタ コメータの針にあがれ〜と念じるあの感覚はたまらないが。
例によってサーショクΣ、ta-1さんの撮影のこの前のレースです。ありがとう ございます。
これは1ヒート目の一周目の1ヘア。皆さんにいいように抜かれていってしまい ます。馬場さんのツナギなんとなくイメージ変わったと思いきやメーカー変え たのか。やっぱり白基本が映えるよね。いいデザイン。

ちょっと視線悪いかも。俺も思いきってここで縁石見てコーナーリングしてみ るか。






雨の走行の何が大変かといえば、後の整備だ。あれだけのヘビーウェットを走っ
た後となれば車体は全バラ清掃。



車体周りがかなりやつれてきた感じなので、これを機にちょっと見直します。

SH2A続き。オンボードのSPI接続のフラッシュロムのユーザエリアにマイモニタ を置きました。これでリセット即、マイモニタでNetBSDのtipからプログラムを ロードできるので、いくらでもトライ&エラー。マイOS開発環境が整った。

ldscriptはこうして、
/* SPI connected Flush rom */
OUTPUT_FORMAT ("elf32-sh")
OUTPUT_ARCH (sh)

MEMORY {
	vectors		: o = 0x1c080000, l = 0x24
/*
        Fast RAM                              SPI ROM

	0xfff80000----------------------------0x0000
	  SPIROM Page0 Boot program region.
	0xfff81fff----------------------------0x1fff
	0xfff82000----------------------------0x8000
	  This program region. (32KB)
	0xfff89fff----------------------------0xffff
*/
	ram		: o = 0xfff82000, l = 0x8000
	loader_area	: o = 0x1c080000, l = 0x8000
}

SECTIONS {

	 .vectors :
	 {
	 	 *(.vector)
	 } > ram AT > loader_area

	 .text :
	 {
	 	 _text_start = .;
		*(.text*)
		*(.rodata*)
		 . = ALIGN (4);
	 } > ram AT > loader_area

	 .data :
	 {
	 	 _data_start = .;
	 	 *(.data*)
		 _data_end = .;
		 . = ALIGN (4);
	 } > ram AT > loader_area

	 .bss :
	 {
	         _bss_start = .;
	      	 *(.bss*)
	 } > ram
	_bss_end = .;

	/DISCARD/ : { *(.*debug*) }
	/DISCARD/ : { *(.comment) }
}

EXEC_P, HAS_SYMS, D_PAGED
start address 0xfff82024

Program Header:
    LOAD off    0x00000100 vaddr 0xfff82000 paddr 0x1c080000 align 2**7
         filesz 0x00001500 memsz 0x00001500 flags r-x
    LOAD off    0x00001600 vaddr 0xfff83500 paddr 0x1c081500 align 2**7
         filesz 0x0000005c memsz 0x0000005c flags rw-
    LOAD off    0x0000165c vaddr 0xfff8355c paddr 0xfff8355c align 2**7
         filesz 0x00000000 memsz 0x000000b8 flags rw-

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         000014dc  fff82024  1c080024  00000124  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .data         0000005c  fff83500  1c081500  00001600  2**2
                  CONTENTS, ALLOC, LOAD, DATA
  2 .bss          000000b8  fff8355c  fff8355c  0000165c  2**2
                  ALLOC
  3 .vectors      00000024  fff82000  1c080000  00000100  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
このプログラムをフラッシュロムに置くプログラムに合わせてLMA,VMAを合わせ てみたものの、HEWでこのELFを置こうとしたら、HEWはVMAでロードしていた...。 しかたなくobjcopyでbinaryにしてHEWの設定でこのLMAにロード。このロードさ れたのが、CQのSPIwriterUserでSPI ROMに置かれる。
SPI接続のフラッシュロムに書き込むところまで作っておきたいところ。



筑波選手権第二戦、大波乱。レースが終わった時には「やっと終わった...」と
いう感じ。

4時起きで筑波に向かうと曇模様なものの雲の切れ間もあり、まぁなんとかなる だろうと思っていた。しかしサーキットに近づくにつれ雲が厚くなり、時折雷 光が見える。
それでもたまにパラつく程度で、車検前には予選は余裕でドライだろうと思っ ていたところ、車検中に突然の豪雨。これもすぐにやんだのだけど、日も差し てないし予選までには路面は乾かないので、渋々駐車場にレインタイヤと工具 を取りにいき、暖機場でタイヤ交換。ファイナルは15:34から15:35に。ちょっ とショート過ぎるのだけど、前を変える余裕はない。交換している最中に雨足 が激しくなり、コースに川が流れて最終でグラベルがコースに流れ出したので、 前の予選組は赤旗中断。S80の予選は天候待ちとなった。
そしてタイヤ交換の後、空気圧をチェックすると、フロントが1.8kgしかない。 周りの選手にエアポンプ借りようとしたら、なかった。筑波ガレージまでマシ ンもっていってエア入れて、キャブが水吸わないようにガムテープで処理して なんとか準備完了。
赤旗中断はまだ続き、ちょっと小降りになったところで、「S80の選手はウェイ ティングエリアに...」というアナウンスが。ウェイティングエリアにつくと、 すぐコースに通されてもう既にコースオープン。ちょっと暖機して40℃越えた ところで、まっさきにコースイン。「レインって結構グリップするから普通に 走ればいいんだよ」と言いきかせて、おら〜とがんばってみると、1ヘアの立ち あがりで大きくスライド。なんとか立ち直せたものの、ここで心が縮みこんで しまった。決勝はドライだし、予選でマシン壊したくないという思いもあり。 予選落ちないし。

ブリーフィングの時にはすっかりピーカンに。またスリックに交換。決勝は TC600のレースで赤旗中断で進行が押した。いつも通りこの季節はウォーマーな しでスタンドもなしで並んだのでウェイティングエリアで延々待ち続け。家帰っ たら顔だけめちゃくちゃ焼けてた。
そしてやっと決勝。スタートはあんまりうまくいかなかったけれど、前列の選 手はもっとうまくいかなかったみたいで、前に出れた。しかし1ヘアまでに抜か れてしまう。その後もどんどん抜かれてしまい、そして付いていけない。コー ナーの立ちあがりごとにどんどん先に行ってしまう。今日はだめかなという思 いが、無意識に勝負を捨ててしまう。いけると思えばなんとしてでもブロック するのだけど。
そうこうしているうちに1コーナーで黄色の振動。!!!レコードラインの真中に 転がってるし。ちょっとどきどきした。ここで赤旗中断。
レース中に赤旗中断すると、中断の前のラップで新しくグリッドを決める作業 があるので結構時間がかかる。赤旗から20分後に2ヒート目が7周で。
2ヒートのスタートは普通くらい。1ヒートと同じようにダラダラと抜かれ続け る情けない展開で終了。ベストも8.8まで。転倒、マシントラブルが多かったの で13位となったけど、今回は実質ビリだった。

ロガーデータはというと、ちょっとまたノイズがひどくなってきた。こうして みるとやはり2ヒートになると長いよね。コースインから1時間弱かかってるし。 後続のレースはあまりにも時間が押したので周回数減算になっていました。

しかしまさかこんなレースになるとは昨日は思いもよらなかった。明日は休養 したい。




筑波選手権第二戦の特スポでした。今年から午前中に通常走行枠、午後から特
スポ枠なので、ちょっとやり辛い。午前、小排気量A枠を二本、午後特スポ一本
走行しました。午前午後反対の方がいいんだけどな〜。

実のとこここ一週間疲れがとれず、今日も朝からお疲れ。今回うまく絞れてベ ストで57.5kgまで落とせたのだけど、これはただ単に食事量を減らしているだ けなのでヘロヘロさに輪をかけている。「本当にこの状態でコースインするの?」 という感じだったけれど段々、本数を重ねるごとに疲れがとれてきた。体もシャ キっとしてきたし。テンション上がってきた。

ここ最近のロガーの不調はやはりプラグキャップが外れかけていたからだった。 今日はうまくいった。しかし遅いな〜。頑張って9秒しかでない。色々乗り方変 えてみたりしてもがいてみるも、ピタっとタイムが変わらない。全体的に4〜 5km/h遅い。明日の気合いに期待だ。この分だとビリだぞ...。
91のノーマルに交換したフォークもちょっと問題。気持ちイニシャルかけたい のだけど、アジャスタがないのでかけれない。CXあたりでフロントがうねる感 もあるし。これはもうどうにもならないので気にしないことに。

下は去年の筑波選手権3戦の決勝でベスト近辺の走り。全部のコーナーで遅いの がわかる。同じようにがんばって走ってるんだけどな〜。

もっとオラオラ感かな。走りは気持ちだから。






SH2A続き。昨日シリアルが遅くて悩んでいたのはHEWからステップのために割り
込みが入っていたためだった...。今一つHEWの使い勝手がわからないのだけれ
ど、あともうちょっとすればマイモニタが完成するので我慢。

モニタの雛型までできました。今はこれをHEWからダウンロードして、SCI6の先 のNetBSDのtipからさらにダウンロードするプログラムをダウンロードして実行。 CPUクロックは最低でも48MHz(最高で144MHz)、シリアルにはFIFOもついている ので、モトローラSレコードファイルのロードも全部Cで。(25MHzをきって、FIFOもないとちょっときつくなる)
#include <system.h>
#include <console.h>
#include <console_machdep.h>
#include <shell.h>
#include <srec.h>

SHELL_COMMAND_DECL (l);	// S-recordファイルをロードする
SHELL_COMMAND_DECL (g);	// S-recordファイルのスタートアドレスにジャンプする
SHELL_COMMAND_DECL (v); // ロードされたメモリを確認

void led (void);
void led_init (void);

void
startup ()
{
  extern char bss_start[], bss_end[];
  char *p;

  // Clear BSS
  for (p = bss_start; p < bss_end; p++)
    *p = 0;

  boot_console_init (TRUE, 19); //Pck 24MHz 38400bps

  SHELL_COMMAND_REGISTER (l);
  SHELL_COMMAND_REGISTER (g);
  SHELL_COMMAND_REGISTER (v);

  iprintf ("SH7262 Simple Monitor Build %s %s\n", __DATE__, __TIME__);

  shell_set_device (SERIAL, SERIAL, TRUE);
  shell_prompt ();
  // NOTREACHED
}

uint32_t
l (int32_t argc __attribute__((unused)),
   const char *argv[] __attribute__((unused)))
{
  uint8_t c;
  srec_return_t ret = SREC_MISSING_START;
  int32_t err = -1;
  size_t sz;
#define	CCR1	((volatile uint32_t *)0xfffc1000)
#define	CCR2	((volatile uint32_t *)0xfffc1004)
/*

 SH7262のキャッシュはI/D分離でデフォルトでライトバックなのでキャッシュ
 ドから書き込んだのなら、フラッシュしないといけない。しかしCCR1のフラッ
 シュビット(OCF)では大容量内蔵RAMへの書き戻しはされないので(この領域は
 フレームバッファとしての利用が想定されているからだろう)、とりあえず
 srec_parser()の中で書き込むアドレスに0x20000000足してアンキャッシュド
 から書きこんでいる。ここはなんとかしたい。

 CCR1でライトスルーにしてもいいのだけど、CCR1のアクセスはアンキャシュド
 からじゃないといけないので(昔ながらのSHの嫌な仕様だ。SH4Aでは改善され
 たのだけど...)、それはいずれ。

*/
  srec_init ();
  iprintf ("CCR1=%x CCR2=%x\n", *CCR1, *CCR2);

  for (sz = 0; (c = igetc (SERIAL)); sz++)
    {
      if ((ret = srec_parser (c)) != SREC_OK)
	break;
    }

  iprintf ("Read %D byte. %s\n", sz, srec_error_message[ret]);
  if (ret != SREC_EOF)
    {
      iprintf ("Failed.\n");
      goto failed;
    }
  iprintf ("Start address: 0x%x\n", srec_start_addr);
  err = 0;

 failed:

  return err;
}

uint32_t
g (int32_t argc __attribute__((unused)),
   const char *argv[] __attribute__((unused)))
{

  iprintf ("Start address: 0x%x\n", srec_start_addr);
  // jump to user program.
  __asm volatile ("jsr @%0;nop" :: "r" (srec_start_addr));
  iprintf ("done.\n");

  return 0;
}

uint32_t
v (int32_t argc __attribute__((unused)),
   const char *argv[] __attribute__((unused)))
{
  int i;
//アンキャッシュドから確認。
  for (i = 0; i < 0xc0; i++)
    printf ("%x ", *(volatile uint8_t *)(0x3c010000 + i));
  printf("\n------------------------------\n");
//キャッシュドの様子も確認。
  for (i = 0; i < 0xc0; i++)
    printf ("%x ", *(volatile uint8_t *)(0x1c010000 + i));
  printf ("\n");

  return 0;
}
このプログラムから、空き領域にロードされるように仕込んだプログラムをロード してみて動くのを確認。
SH7262 Simple Monitor Build Jun  3 2010 20:12:36
mon> 
mon> 
mon> l
CCR1=0 CCR2=0
~>Local file name? a.mot
32 lines transferred in 0 seconds 
!
Read 674 byte. success
Start address: 0x1c010000
mon> 
mon> v
df 2 d0 3 40 2b 0 9 af fc 0 9 1c 1 40 0 1c 1 0 14 7f f8 3 e0 38 4a 1 e0 38 4a 61 11 61 1d 2 0 ff fc 21 29 23 11 3 e0 38 52 1 e0 38 52 61 11 62 1d 1 0 1 0 21 2b 61 1d 23 11 3 e0 38 56 1 e0 38 56 61 11 62 1d 1 0 1 0 21 2b 61 1d 23 11 62 f3 72 c8 e1 0 12 1f 62 f3 72 c8 e1 0 12 1e a0 23 0 9 61 f3 71 c8 51 1f 21 18 89 b 3 e0 38 56 1 e0 38 56 61 11 61 1d 2 0 fe ff 21 29 23 11 a0 b 0 9 3 e0 38 56 1 e0 38 56 61 11 62 1d 1 0 1 0 21 2b 61 1d 23 11 62 f3 72 c8 61 f3 71 c8 51 1e 71 1 12 1e 61 f3 71 c8 52 1e d1 6 32 17 8b d6 62 f3 72 c8 
------------------------------
df 2 d0 3 40 2b 0 9 af fc 0 9 1c 1 40 0 1c 1 0 14 7f f8 3 e0 38 4a 1 e0 38 4a 61 11 61 1d 2 0 ff fc 21 29 23 11 3 e0 38 52 1 e0 38 52 61 11 62 1d 1 0 1 0 21 2b 61 1d 23 11 3 e0 38 56 1 e0 38 56 61 11 62 1d 1 0 1 0 21 2b 61 1d 23 11 62 f3 72 c8 e1 0 12 1f 62 f3 72 c8 e1 0 12 1e a0 23 0 9 61 f3 71 c8 51 1f 21 18 89 b 3 e0 38 56 1 e0 38 56 61 11 61 1d 2 0 fe ff 21 29 23 11 a0 b 0 9 3 e0 38 56 1 e0 38 56 61 11 62 1d 1 0 1 0 21 2b 61 1d 23 11 62 f3 72 c8 61 f3 71 c8 51 1e 71 1 12 1e 61 f3 71 c8 52 1e d1 6 32 17 8b d6 62 f3 72 c8 
mon> g
Start address: 0x1c010000



朝起きてガレージでお茶を飲もうとすると、とてつもなく大きいスズメバチが。
ここまで大きいとビビる。こんな時はWAKO'Sのパーツクリーナーがあれば...と
思う(殺虫剤としても有効)。新品のMonotaROのパーツクリーナーで攻撃して弱
らせたところで、シンナーをスポイトで垂らして殺害。やっぱり大きい。女王
蜂かも。



家の近くに巣がなければいいけど。

SH2A続き。工人舎SA-5にHEW入れてやっています。癖を掴むのに一苦労。SH2Aの リセットベクタはPC+SPの組になっている。これをロードするプログラムでもそ こを設定してやらないとHEWがうまく動かないっぽい。具体的には
#define	STACK_START	0x1c028000
	.align	2
	.section .start_vector, "a"
// Power on reset
	.long start
	.long STACK_START
// Manual reset
	.long start
	.long STACK_START
と、PC+SPの組を設定し
OUTPUT_FORMAT ("elf32-sh")
OUTPUT_ARCH (sh)

MEMORY {
	start_vector	: o = 0x1c000000, l = 0x10
	ram		: o = 0x1c000500, l = 0x7ff00	/* 512KB */
}

SECTIONS {

	 .start_vector :
	 {
	 	 *(.vector)
	 } > start_vector

	 .text :
	 {
		*(.text*)
		*(.rodata*)
		 . = ALIGN (4);
	 } > ram

	 .bss :
	 {
	         _bss_start = .;
	      	 *(.bss*)
	 } > ram
	_bss_end = .;

}
として、スタックポインタを設定しておく。これでHEWでロード時にR15(SP)に 有効なスタックが設定されて、きちんと動く。(つまりこのR15をHEWの実行時も 参照している)

SCI6の出力は
typedef	unsigned short int     uint16_t;
typedef	unsigned char     uint8_t;

#define	PGCR4	((volatile uint16_t *)0xfffe38c6)

#define	SCSMR_6		((volatile uint16_t *)0xfffeb000)
#define	SCBRR_6		((volatile uint8_t *)0xfffeb004)
#define	SCSCR_6		((volatile uint16_t *)0xfffeb008)
#define	SCFTDR_6	((volatile uint8_t *)0xfffeb00c)
#define	SCFSR_6		((volatile uint16_t *)0xfffeb010)
#define	SCFRDR_6	((volatile uint8_t *)0xfffeb014)
#define	SCFCR_6		((volatile uint16_t *)0xfffeb018)
#define	SCFDR_6		((volatile uint16_t *)0xfffeb01c)
#define	SCSPTR_6	((volatile uint16_t *)0xfffeb020)
#define	SCLSR_6		((volatile uint16_t *)0xfffeb024)
#define	SCEMR_6		((volatile uint16_t *)0xfffeb028)

#define	STBCR4		((volatile uint8_t *)0xfffe040c)

void
startup ()
{
#define	PCIOR0	((volatile uint16_t *)0xfffe3852)
#define	PCCR2	((volatile uint16_t *)0xfffe384a)
#define	PCDR	((volatile uint16_t *)0xfffe3856)

  *PCCR2 &= ~0x3;	// PC8
  *PCIOR0 |= (1 << 8);	// PC8 output
  *PCDR &= ~(1 << 8);	// LED on.

  // SCI6 Power on
  *STBCR4 &= ~(1 << 1);
  *STBCR4;	// Dummy read

  // SCI initialize
  *SCSCR_6 &= ~(0xf << 4); // Drop RIE, TIE, TE, RE
  *SCFCR_6 |= (0x3 << 1); // Reset FIFO
  *SCFSR_6 |= 0;	// Clear Status.
  *SCSCR_6 &= ~0x3;	// Internal clock SCK pin is input.
  *SCSMR_6 = 0;	// 8N1 Pck 1/1 (Pck=24MHz)
  *SCEMR_6 = 0;	// x16 base clock
  *SCBRR_6 = 19; // 38400bps
  *SCFCR_6 = 0;	// FIFO

  // Pin configuration
  // TxD6
  *PGCR4 &= ~(0x7 << 8);
  *PGCR4 |= (0x4 << 8);

  // RxD6
  *PGCR4 &= ~(0x7 << 4);
  *PGCR4 |= (0x4 << 4);

  *SCSCR_6 |= (0x3 << 4); // TE,RE

#define	TDFE	(1 << 5)
#define	TEND	(1 << 6)

  while (/*CONSTCOND*/1)
    {
      while (!(*SCFSR_6 & TDFE))
	;
      *SCFTDR_6 = 'A';
      while (!(*SCFSR_6 & (TDFE | TEND)))
	;
      *SCFSR_6 &= ~(TDFE | TEND);
    }
}
こんな感じで。起動時にはSCI6の電源は入っていないので、STBCR4で電源を入 れて、多重化されているピンはPGCR4でSCI6のTxD,RxDに設定。
動くことは動くのだけど(ホスト側には'A'がずっと送られてくる)、あまりにも 遅すぎておかしい。38400bpsのスピードじゃない。
こんなところで手間取るようではまだまだだね〜。


CR85整備。Tカーの91ノーマルフォークと交換。91ノーマルはイニシャルの調整
をするのにトップキャップを開けてシムを入れないといけないという辛い仕様
なのだけど、イニシャルアジャスタが壊れて左側のンパーユニットがおかしい
今の92フォークよりはいいのでは。ただ、このフォーク、自分で歪み修正した
やつなんだよね...。右側がまだちょっと微妙に歪んでる。

ライダー的に減衰どうこうを感じとれないので、むしろ90のフォーク(これはイ ニシャルの調整はできるけれど、減衰の調整はできない)の方がいいのかも。
プラグキャップとコードが抜けていた。ちょっと抜けてるくらいでも普通に走 るんだよね。前回コイルの根本で断線しかけていた時もそうだった。ここ最 近のロガーの不調はこのノイズでは? (この程度のノイズで動かなくなるロガー も問題なのだけど...)

SH2A続き。CN3からSCI6をADM3202でRS232Cにひきだし。この状態で不意にショー トしたりしないように、基板側にソケットにしました。

筑波二戦、佐藤聡一郎選手出戦か〜。20年前にNB125をやっていた自分にとって は神レベルの方です。ライダーズサロン横浜のマシン作りは意欲的で、RCバル ブやプロリンク(これはあまりうまくいかず苦労していたような)、そこのエー スの佐藤選手は当時なんとなく応援してたんだよね。