[x68k/vs] 菅原さんが ADPCM - slinear16 変換ルーチンを 書いてくれたのでカーネルに入れて commit する。 訳も分からずにドライバ書きはじめてから1年2カ月、やっと完成と 言ってもいい状態になった。 まだ周波数変換とか必要だけどね。
頭の中に残ってるうちに MSM6258 の料理方法とかをどっかに 書いておかないといけないねえ。 [書きました]
[x68k/slhci] NetBSD 用の SL811HS/T のドライバコードを何名かの 方にお渡ししたが、その中の1名から i386 でアタッチできたとの報告を頂いた。 すごいぞ NetBSD。
[x68k/vs] vs0 で周波数変換を実装すべく aurateconv.c を 改造しにかかっていた。が途中で複雑すぎて挫折。
[x68k/slhci] SL811HS/T の Eratta が某 ML に流れていたので 久しぶりにコンテキストスイッチ発生してみる。 SL811HS/T の Rev1.2 ではハブ経由の Low Speed Device が扱えないが そのバグにソフトウェアで対応する方法などが書かれている。のはいいけど どこでどうしたらいいか分からず結局すぐに諦める。 つーか 20usec でパケットを出すとかって X68030/30MHz で可能なんだっけ?
[x68k/slhci] そういえば今まで気付かなかったが USB ハブ2段に してもちゃんと2段目の HUB まで attach できていた。 これってコントロール転送は完璧に出来上がってるってことだよなあ。 すごいぞ。でも割り込み転送ってどこでどうやったらええんじゃ。 ついでに挿抜の認識もどこでどうやったらええんじゃ?
[x68k/slchi] callout ってデバイスアタッチの時とかもちゃんと 動き続けてくれてるのかなあ、、とか思ったのでちゃんとユーザランドのある ほうの x68k で起動させてみることにする。 そういや usbdevs とかいうコマンドがあったようなのをどっかの ML で見たので 実行してみるが、何も表示されない。むむ、/dev/usb0 とかいるのか。 てことでキャラクタデバイスの 49 番あたりを登録して mknod してから実行してみる。 お、ちゃんと接続してるデバイスが見えてるぞ。万歳。
[x68k/slchi] (まだ全然機能しないけど) 一段落したので、 ELECOM の USB HUB をカスケードにした状態での dmesg。
続いて usbdevs -v の結果。NetBSD 1.5ZC (YUKA-SLHCI) #460: Sun Apr 21 00:24:23 JST 2002 isaki@erika.local:/var/obj/slhci/sys/arch/x68k/compile/YUKA-SLHCI X68030 (m68030 CPU/MMU, m68882 FPU, 30MHz clock) total memory = 12288 KB avail memory = 9252 KB using 179 buffers containing 716 KB of memory mainbus0 (root) intio0 at mainbus0 mapped at 0x800000 ne0 at intio0 addr 0xece300 intr 0xf9: Nereid Ethernet ne0: NE2000 (RTL8019) Ethernet ne0: Ethernet address 00:50:c2:10:60:dc ne0: 10base2, 10baseT, 10baseT-FDX, auto, default [0x00 0x10] auto slhci0 at intio0 addr 0xece380 intr 0xfb: Nereid USB slhci0: ScanLogic SL811HS/T USB Host Controller (rev 1.2) usb0 at slhci0: USB revision 1.1 uhub0 at usb0 uhub0: ScanLogic SL811HS/T root hub, class 9/0, rev 1.01/0.00, addr 1 uhub0: 1 port with 1 removable, self powered mfp0 at intio0 addr 0xe88000 intr 0x40 kbd0 at mfp0 clock0 at mfp0: MFP timer C rtc0 at intio0 addr 0xe8a000: RP5C15 dmac0 at intio0 addr 0xe84000: HD63450 DMAC dmac0: 4 channels available. opm0 at intio0 addr 0xe90000 vs0 at intio0 addr 0xe92000 using DMA ch3 intr 0x6a and 0x6b dmac0: allocating ch 3 for vs. vs0: MSM6258V ADPCM voice synthesizer audio0 at vs0: half duplex fdc0 at intio0 addr 0xe94000 intr 0x60 using DMA ch0 intr 0x64 and 0x65 dmac0: allocating ch 0 for fdc. fdc0: uPD72065 FDC fd0 at fdc0 drive 0: 1.2MB/[1024bytes/sector], 77 cyl, 2 head, 8 sec fd1 at fdc0 drive 1: 1.2MB/[1024bytes/sector], 77 cyl, 2 head, 8 sec par0 at intio0 addr 0xe8c000 intr 0x63: parallel port (write only, interrupt) scsirom0 at intio0 addr 0xfc0000: On-board at 0xe96020 spc0 at scsirom0 scsibus0 at spc0: 8 targets, 8 luns per target grfbus0 at mainbus0 grf0 at grfbus0: 768 x 512 16 colors builtin display ite0 at grf0: rows 32 cols 96 grf1 at grfbus0: 768 x 512 16 colors graphic display ite at grf1 not configured scsibus0: waiting 2 seconds for devices to settle... sd0 at scsibus0 target 0 lun 0: <TOSHIBA, MK2428FB, C10B> SCSI2 0/direct fixed sd0: 500 MB, 4002 cyl, 8 head, 32 sec, 512 bytes/sect x 1024512 sectors pow0: started by front power switch. pow1: started by front power switch. sram0: 16k bytes accessible bell0: YM2151 OPM bell emulation. uhub1 at uhub0 port 1 uhub1: Texas Instruments TUSB2046 hub, class 9/0, rev 1.10/1.25, addr 2 uhub1: 4 ports with 4 removable, self powered uhub2 at uhub1 port 4 uhub2: Texas Instruments TUSB2046 hub, class 9/0, rev 1.10/1.25, addr 3 uhub2: 4 ports with 4 removable, self powered boot device: sd0 root on sd0a dumps on sd0b root file system type: ffs
でも何も機能しないし (いや制御転送だけで動くデバイスがあれば 動作するだろうけど、そんなのないし)、活線挿抜も出来ないし...。yuka# usbdevs -v Controller /dev/usb0: addr 1: full speed, self powered, config 1, SL811HS/T root hub(0x0000), ScanLogi c(0x04ce), rev 0.00 port 1 addr 2: full speed, self powered, config 1, TUSB2046 hub(0x2046), Texas Instruments(0x0451), rev 1.25 port 1 powered port 2 powered port 3 powered port 4 addr 3: full speed, self powered, config 1, TUSB2046 hub(0x2046), Texas Instruments(0x0451), rev 1.25 port 1 powered port 2 powered port 3 powered port 4 powered yuka#
[x68k/vs] vs0 は ADPCM の再生をする訳だが、実際は標準的な ADPCM ではなく OkiADPCM という沖電気独自の ADPCM である。 なので AUDIO_ENCODING_OKIADPCM を新設しようとコードを書いてみた。 だけど、なぜか ioctl(AUDIO_SETINFO) がこける。むう。
[x68k/slhci] 割り込み転送で送るパケット(正確にはトランザクションかな) の内容が分かった。って単に仕様書読めって話なんだが、あんな分厚いもん 隅から隅まで全部読んでられん(笑)。英語が読めないって話もあるが。 それはさておき、割り込み転送では IN (か OUT) トランザクションを1つ 行なうだけでいいらしい。後はこれを一定時間ごとに行なえるような 仕掛けをしておけばいいようだ。さーてどうやるんだろう。 毎回 callout するんかなあ。
[x68k/slhci] root hub への割り込み転送が回るようになった。 原因はやっぱり何も分からずに uhci のコードを真似したことかな。
[x68k/slhci] デバイスへの割り込み転送を実装しようと思ってたのに なぜか割り込みが回るようになった。なんでだろ。 ということで外付けの USB HUB が動作するようになった。 以下、USB HUB にもう1つ USB HUB を差したり USB マウスを差したりした時の dmesg。
uhub1 at uhub0 port 1 ← Nereid に USB HUB を差す uhub1: Texas Instruments TUSB2046 hub, class 9/0, rev 1.10/1.25, addr 2 uhub1: 4 ports with 4 removable, self powered uhub2 at uhub1 port 1 ← USB HUB にもう1つ USB HUB を差す uhub2: Texas Instruments TUSB2046 hub, class 9/0, rev 1.10/1.25, addr 3 uhub2: 4 ports with 4 removable, self powered uhub2: at uhub1 port 1 (addr 3) disconnected ← 2段目の USB HUB を抜く uhub2 detached uhub2 at uhub1 port 1 ← もう1度差す uhub2: Texas Instruments TUSB2046 hub, class 9/0, rev 1.10/1.25, addr 3 uhub2: 4 ports with 4 removable, self powered slhci0: not support low speed device ← 2段目の USB HUB に USB マウスを差す slhci0: not support low speed device low speed には未対応なのでエラーになる slhci0: not support low speed device uhub2: device problem, disabling port 2 uhub2: at uhub1 port 1 (addr 3) disconnected ← 2段目の USB HUB をもう1度抜く uhub2 detached uhub2 at uhub1 port 1 ← もう1度差す uhub2: Texas Instruments TUSB2046 hub, class 9/0, rev 1.10/1.25, addr 3 uhub2: 4 ports with 4 removable, self powered
[x68k/slhci] root hub (SL811HS/T) でデバイス抜いたことを検出 してみた。某 ML で教えてもらった通りやると意外とあっさり出来た。 さすが本職の人は違う (当たり前か...)。 あとは抜いた時にちゃんとポートにリセットかけるようにすればいいのかな。
[x68k/slhci] 会社にあった IO-DATA USB-ET/TX (aue0) と USB シリアル(uplcom0) を借りて帰った。連休だしね。 どちらも NetBSD 1.6-current ではいつの間にかサポートされていたもの。 何が起きるかさっそく Nereid に挿してみる。 aue0 は attach されて ifconfig まで出来るけど ifconfig up した途端 カーネルが panic した。 uplcom0 は簡単に遊ぶ方法を思いつかないのでデバイスとして認識できたことだけ 確認。
[x68k/slhci] それはさておき root hub からデバイスを抜くあたりを 見てみることにする。が、うまくいったと思っても次に起動したらだめだったり なんか再現性が薄いので先に進まない。素早く抜くと dettach するけど ゆっくり抜くと dettach しないまま抜けてしまうとか。 むう。
[x68k/slhci] とりあえず Nereid からデバイスを抜いて dettach が 表示されなかったら即挿し戻す。そうすると dettach, attach が一度に表示される。 これって dettach 処理されてないんじゃなくてどっかでキューに溜ってるような 症状に見える。けど USB 回りのコードもまったく理解してないので それ以上追えなかったり(汗。 とりあえずこれを正しく dettach されるまで繰り返す(ぉぃ。 うーみゅ、不安定なコードだ。
[x68k/slhci] そして Nereid に Low Speed デバイスを直に挿すと カーネルがお亡くなりになった。たぶん内部で無限ループにはまってるんだと思う。 ハブ越えはだめだけど直挿しもだめだったっけ。 まあその前に NetBSD/x68k は wscons をサポートしてないから ums0 は カーネルに入れることすら出来ないんだけどね。
[x68k/build] 1、2カ月前に一度 i386 からクロスビルドを やってみたんだけど、その時は lib あたりのコンパイルで即こけたと思う。 ぼちぼちそういうのも直ってるだろうと安直に考えて、今日再び クロスビルドを行なってみた。なんかかなりいい感じで動いてるぞ。 distrib/x68k/floppies/ 以下でいくつかエラーが出たので直して commit する。けど正しい修正かどうか自信なし。
しかしほんとにさくさく進むなあ。2時間くらいで出来上がるみたい。 これなら毎日でも気軽に出来るじゃん。PentiumIII/1GHz って速いね。 68030/30MHz だと2週間くらいかかるから気軽にできないのよね。 そういう意味ではほんとにクロスコンパイルって助かるね。さすが NetBSD。
[x68k/build] 備忘録。フルビルドのしかた。
# cd /usr/src2回目以降はクロスコンパイル用のツールが出来上がっているので -T objdir/tools/tools.NetBSD-1.5ZC-i386 を指定したり -u を指定するとちょっと速くなる。
# ./build -m x68k -U -O objdir -D destdir -R reldir
途中 distrib/x68k/floppies/ramdisk.sysinst の処理に vnconfig が 必要なので特権ユーザで実行する必要がある。そこさえクリアできたらたぶん 一般ユーザでも出来るんだろうけど。 あ、そういやソースツリーを read only でマウントしてもビルドできるように なったんだろうか。以前試した時はそこでもこけてたような。
[x68k/build] distrib/x68k/floppies あたりがこけるので 何気に見てたら、new distrib へ移行しないといけないのね。みゅう。 そうとは知らずに久々に X68k でセルフビルドを始めてたが MAKEOBJ がまだ 終らない。ちゃんと ./build.sh に -o をつけませう。これで4時間は短縮できそう。
[x68k/build] つーか new distrib に移行してしまえばセルフビルドする 必要って全くなくなるのかな。
[x68k/build] distrib/x68k の下あたりを他の port を 真似して書いてみたところ、ちゃんとユーザ権限でのクロスビルド(on i386)が 成功した。でも distrib/x68k 以下がいい加減なので インストールフロッピーのイメージは作っただけで DESTDIR には 用意されてなかった(笑)。